Pytest学习笔记2-setup和teardown
前言
我们在做自动化的时候,常常有这样的需求:
执行每一条用例时,都重新启动一次浏览器
每一条用例执行结束时,都清除测试数据
在unittest中,我们可以使用 setUp() 和 tearDown() 两个方法来实现以上需求,其中 setUp() 方法用于初始化测试固件;而 tearDown() 方法用于销毁测试固件。程序会在运行每个测试用例(以 test_ 开头的方法)之前自动执行 setUp() 方法来初始化测试固件,井在每个测试用例(以 test_ 开头的方法)运行完成之后自动执行 tearDown() 方法来销毁测试固件。
那么如何实现只启动一次浏览器,所有测试用例执行结束后再清除数据这样的需求呢?
- unittest提供了setUpClass()和tearDownClass()两个方法,配合@classmethod装饰器使用即可
作为比unittest更强大的框架,pytest自然也有类似的方法
pytest的setup/teardown方法包括:
- 模块级别(setup_module/teardown_module)
- 函数级别(setup_function/teardown_function)
- 类级别(setup_class/ teardown_class)
- 方法级别(setup_method/teardown_methond或者setup/teardown)
模块级别
模块中的第一个用例开始前执行一次setup_module方法,模块中的最后一个测试用例结束后执行一次teardown_module方法
import pytest
def setup_module():
print("执行setup_module")
def teardown_module():
print("执行teardown_module")
class TestDemo(object):
def test_case1(self):
print("执行测试用例1")
assert 1 + 1 == 2
def test_case2(self):
print("执行测试用例2")
assert 1 + 3 == 4
def test_case3(self):
print("执行测试用例3")
assert 1 + 5 == 6
运行结果如下:
函数级别
在每个测试函数前运行一次setup_function方法,在每个测试函数结束后运行一次teardown_function方法,只对函数用例生效,不在类中。
import pytest
def setup_function():
print("执行setup_function")
def teardown_function():
print("执行teardown_function")
def test_case1():
print("执行测试用例1")
assert 1 + 1 == 2
def test_case2():
print("执行测试用例2")
assert 1 + 3 == 4
def test_case3():
print("执行测试用例3")
assert 1 + 5 == 6
运行结果如下:
类级别
setup_class/teardown_class 对类有效,位于类中,在执行测试类之前和之后各调用一次
import pytest
class TestDemo(object):
def setup_class(self):
print("执行setup_class")
def teardown_class(self):
print("执行teardown_class")
def test_case1(self):
print("执行测试用例1")
assert 1 + 1 == 2
def test_case2(self):
print("执行测试用例2")
assert 1 + 3 == 4
def test_case3(self):
print("执行测试用例3")
assert 1 + 5 == 6
运行结果如下:
方法级别
setup_method/teardown_method和setup/teardown,在测试类中每个测试方法前后调用一次。这两个方法效果是一样的
import pytest
class TestDemo(object):
def setup_method(self):
print("执行setup_method")
def teardown_method(self):
print("执行teardown_method")
def test_case1(self):
print("执行测试用例1")
assert 1 + 1 == 2
def test_case2(self):
print("执行测试用例2")
assert 1 + 3 == 4
def test_case3(self):
print("执行测试用3")
assert 1 + 5 == 6
运行结果如下:
四种级别混合使用
如果把这四种级别的方法混合使用,运行顺序如何呢?
import pytest
def setup_module():
print("模块开始时,执行setup_module")
def teardown_module():
print("模块结束时,执行teardown_module")
def setup_function():
print("函数用例开始时,执行setup_function")
def teardown_function():
print("函数用例结束时,执行teardown_function")
def test_a():
print("执行测试函数a")
def test_b():
print("执行测试函数b")
class TestDemo(object):
def setup_class(self):
print("测试类开始时,执行setup_class")
def teardown_class(self):
print("测试类结束时,执行teardown_class")
def setup_method(self):
print("类中的方法开始时,执行setup_method")
def teardown_method(self):
print("类中的方法结束时,执行teardown_method")
def test_case1(self):
print("执行测试用例1")
assert 1 + 1 == 2
def test_case2(self):
print("执行测试用例2")
assert 1 + 3 == 4
def test_case3(self):
print("执行测试用例3")
assert 1 + 5 == 6
运行结果如下:
总结
- 模块级(setup_module/teardown_module)开始于模块始末,全局的
- 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
- 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
- 方法级(setup_method/teardown_method或setup/teardown)开始于方法始末(在类中)
Pytest学习笔记2-setup和teardown的更多相关文章
- [转载]pytest学习笔记
pytest学习笔记(三) 接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...
- pytest学习笔记(pytest框架结构)
一.pytest框架中使用setup.teardown.更灵活按照用例级别可以分为以下几类: 1.模块级:(setup_module.teardown_module)在模块始末调用 2.函数级:(se ...
- pytest学习笔记
From: https://blog.csdn.net/gaowg11/article/details/54910974 由于对测试框架了解比较少,所以最近看了下pytest测试框架,对学习心得做个记 ...
- Pytest学习笔记3-fixture
前言 个人认为,fixture是pytest最精髓的地方,也是学习pytest必会的知识点. fixture用途 用于执行测试前后的初始化操作,比如打开浏览器.准备测试数据.清除之前的测试数据等等 用 ...
- pytest 学习笔记一:参数化与组织分层
组织分层: 1.普通方式,和unittest分层类似: setup_module() # 通常放在类外 setup_class(cls) setup(self) teardown(self) tea ...
- pytest学习笔记二 fixtrue
前言 官方文档关于fixture功能的解释如下: The purpose of test fixtures is to provide a fixed baseline upon which test ...
- 『德不孤』Pytest框架 — 10、setUp()和tearDown()函数
目录 1.setUp()和tearDown()函数介绍 2.setUp()和tearDown()函数作用 3.setUp()和tearDown()函数说明 4.示例 (1)方法级 (2)类级 (3)函 ...
- pytest学习笔记(二)
继续文档的第二章 (一)pytest中可以在命令行中静态/动态添加option,这里没什么好讲的,略过... 这里面主要讲下如何试用skip/xfail,还有incremental(包含一些列的测试步 ...
- pytest 学习笔记一 入门篇
前言 之前做自动化测试的时候,用的测试框架为Python自带的unittest框架,随着工作的深入,发现了另外一个框架就是pytest (官方地址文档http://www.pytest.org/en/ ...
随机推荐
- liunx服务器安装jdk
1.官网下载需要版本的jdk,官网地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...
- 使用花生壳、瑞友天翼远程访问金蝶K3
金蝶版本号 WISE15.1 瑞友6.0系列 花生壳5 金蝶软件无法通过外网直接访问 因此需要使用瑞友天翼来实现远程访问 一般来说 金蝶服务器固定了IP地址以后 通过路由器开房两个外网端口即可实现瑞友 ...
- XAML 属性元素,标记扩展和注释
这节来讲一下XAML中的属性元素,标记扩展,和注释. 属性元素 一般的,我们想要对一个标签的属性赋值,可以直接在标签内部键入属性名给其赋值,如我们给button的Content属性赋值: <Bu ...
- Blazor实现未登录重定向到登录页的方法
今天研究了一下blazor,发现他默认启动就是类似于后台管理系统的界面,看到这个页面我就想给他写个登录,有登录就涉及到未登录重定向的问题,但是我没有找到blazor全局路由的设置,知道的老哥可以告诉我 ...
- UVA OJ 10035 - Primary Arithmetic
Primary Arithmetic Children are taught to add multi-digit numbers from right-to-left one digit at a ...
- [2021BUAA软工_助教博客]作业成绩汇总
作业及成绩 作业链接 成绩链接 个人阅读作业#1 个人阅读作业#1_成绩 个人阅读作业#2 个人阅读作业#2_成绩 结对项目-第一阶段 结对项目-第一阶段_成绩 结对项目-第二阶段 结对项目-第二阶段 ...
- Mybatis-spring-boot-starter自动配置的原理分析
相信大家在使用SpringBoot的过程中,经常会使用到mybatis,通过使用mybatis-spring-boot-starter依赖进行自动配置,省去了自己依赖配置和Bean配置的很多麻烦. 有 ...
- [bug] Mysql 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。
参考 https://blog.csdn.net/cherrycheng_/article/details/51251441?
- [Java] 分布式消息队列(MQ)
概述 场景 服务解耦 削峰填谷 异步化缓冲:最终一致性/柔性事务 MQ应用思考点 生产端可靠性投递 消费端幂等:消息只能消费一次 高可用.低延迟.可靠性 消息堆积能力 可扩展性 业界主流MQ Acti ...
- Linux_计划任务
[Centos7.4] !!!测试环境我们首关闭防火墙和selinux:免得后面的测试会出现问题 [root@localhost ~]# systemctl stop firewalld [root@ ...