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/ ...
随机推荐
- JUC 并发类概览
JUC 并发类及并发相关类概览,持续补充... AQS 内部有两个队列,一个等待队列(前后节点),一个条件队列(后继节点),其实是通过链表方式实现: 等待队列是双向链表:条件队列是单向链表:条件队列如 ...
- PE文件中的输入表
前言 PE文件中的输入表含有三个重要结构IID,IDT,IAT.PE文件为需要加载的DLL文件创建一个IID结构,一个DLL与一个IID对应.IDT是输入名称表,IAT输入地址表,在没有绑定输入的情况 ...
- Solon Aop 特色开发(1)注入或手动获取配置
常规操作,先启动 Solon public class App{ public void main(String[] args){ Solon.start(App.class, args); } } ...
- Scanner, BufferedReader, InputStreamReader 与ACM模式输入
Scanner, BufferedReader, InputStreamReader 与ACM模式输入html { -webkit-print-color-adjust: exact } * { bo ...
- HTML的表格元素
一.HTML的表格元素 1.table元素 <table> 标签定义 HTML 表格.简单的 HTML 表格由 table 元素以及一个或多个 tr.th 或 td 元素组成.tr 元素定 ...
- Qt - QLineEdit编辑框
QLineEdit输入内容获取及合理性检查? 控件自带触发信息: void textChanged(const QString &);void textEdited(const QString ...
- Linux后台执行命令:&和nohup nohup和&后台运行,进程查看及终止
nohup和&后台运行,进程查看及终止 阅读目录 nohup和&后台运行,进程查看及终止 1.nohup 2.& 3.nohup和&的区别 &:是指在后台运 ...
- iozone测试方法-20191008
iozone 一.简介 磁盘设备之上是文件系统,测试磁盘的工具往往就是调用驱动块设备驱动的接口进行读写测试.而文件系统的测试软件就是,针对文件系统层提供的功能进行测试,包括文件的打开关闭速度以及顺 ...
- CentOS 7.3 安装指南 作者: Matei Cezar 译者: LCTT geekpi
CentOS 7.3 安装指南 作者: Matei Cezar 译者: LCTT geekpi | 2016-12-20 09:12 评论: 11 收藏: 4 分享: 1 基于 Red Hat 企 ...
- 搭建 Linux 集群环境
什么是集群 集群是一组通过网络互联的计算机,集群里的每一台计算机称作一个节点. 搭建集群环境规划 集群主机节点数:4 台安装 CentOS7 的虚拟机 主机名(Hostname) IP 地址 node ...