https://www.cnblogs.com/canglongdao/p/13395716.html

前言

学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次。当然还有更高级一点的setupClass和teardownClass,需配合@classmethod装饰器一起使用,在做selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。

pytest框架也有类似于setup和teardown的语法,并且还不止这四个。

用例运行级别

模块及(setup_module/teardown_module)开始于模块始末,全局的

函数级(setup_function/teardown_function)只对函数用例生效(不在类中)

类级(setup_class/teardown_class)只在类中前后运行一次(在类中)

方法级(setup_method/teardown_method)开始于方法始末(在类中)

类里面的(setup/teardown)运行在调用方法的前后

函数式

setup_function/teardown_function

1.pytest框架支持函数和类两种用例方式,先看函数里面的前置和后置用法:

setup_function/teardown_function每个用例开始和结束调用一次

#-*- coding=utf-8 -*-
import pytest
#函数式
def setup_function():print("setup_function:每个用例开始前都会执行")
def teardown_function():print("teardown_function:每个用例结束后都会执行")
def test_onea():print("正在执行--test_onea")x="xixi"assert 'i' in x
def test_twob():print("正在执行--test_twob")x="hua"assert hasattr(x,"check")
def test_threec():print("正在执行--test_threec")a="hello"b="hello world"assert a in b
if __name__=="__main__":pytest.main(["-s","test_f1.py"])
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: E:\study\python2020collected 3 itemstest_f1.py setup_function:每个用例开始前都会执行
.正在执行--test_onea
teardown_function:每个用例结束后都会执行
setup_function:每个用例开始前都会执行
F正在执行--test_twobtest_f1.py:11 (test_twob)
def test_twob():print("正在执行--test_twob")x="hua"
>       assert hasattr(x,"check")
E       AssertionError: assert False
E        +  where False = hasattr('hua', 'check')test_f1.py:15: AssertionError
teardown_function:每个用例结束后都会执行
setup_function:每个用例开始前都会执行
.正在执行--test_threec
teardown_function:每个用例结束后都会执行[100%]================================== FAILURES ===================================
__________________________________ test_twob __________________________________def test_twob():print("正在执行--test_twob")x="hua"
>       assert hasattr(x,"check")
E       AssertionError: assert False
E        +  where False = hasattr('hua', 'check')test_f1.py:15: AssertionError
---------------------------- Captured stdout setup ----------------------------
setup_function:每个用例开始前都会执行
---------------------------- Captured stdout call -----------------------------
正在执行--test_twob
-------------------------- Captured stdout teardown ---------------------------
teardown_function:每个用例结束后都会执行
=========================== short test summary info ===========================
FAILED test_f1.py::test_twob - AssertionError: assert False
========================= 1 failed, 2 passed in 0.03s =========================

2.从结果可以看出用例执行顺序:setup_function》用例1》teardown_function,setup_function》用例2》teardown_function,setup_function》用例3》teardown_function

备注:-s参数是为了显示用例的打印信息。-q参数只显示结果,不显示过程;pytest -h就可以查看不同参数的作用。

setup_module/teardown_module

1.setup_module是所有用例开始前只执行一次,teardown_module是所有用例结束后只执行一次

#-*- coding=utf-8 -*-
import pytest
#函数式
def setup_module():print("setup_module:整个.py模块只执行一次")print("比如:所有用例开始前只打开一次浏览器")
def teardown_module():print("teardown_module:整个.py模块只执行一次")print("比如:所有用例结束只最后关闭浏览器")
def test_onea():print("正在执行--test_onea")x="xixi"assert 'i' in x
def test_twob():print("正在执行--test_twob")x="hua"assert hasattr(x,"check")
def test_threec():print("正在执行--test_threec")a="hello"b="hello world"assert a in b
if __name__=="__main__":pytest.main(["-q","test_f1.py"])

2.从运行结果可以看到setup_module和teardown_module只执行了一次

test_f1.py setup_module:整个.py模块只执行一次
比如:所有用例开始前只打开一次浏览器
.正在执行--test_onea
F正在执行--test_twobtest_f1.py:13 (test_twob)
def test_twob():print("正在执行--test_twob")x="hua"
>       assert hasattr(x,"check")
E       AssertionError: assert False
E        +  where False = hasattr('hua', 'check')test_f1.py:17: AssertionError
.正在执行--test_threec
teardown_module:整个.py模块只执行一次
比如:所有用例结束只最后关闭浏览器

备注:setup_function/teardown_function和setup_module/teardown_module这四种方法是可以任意组合的,用一个和多个都可以。

类和方法

1.setup/teardown和unittest里面的setup/teardown是一样的功能,setup_class和teardown_class等价于unittest里面的setupClass和teardownClass

#-*- coding=utf-8 -*-
import pytest
#test_f1.py 类和方法
class TestCase():def setup(self):print("setup:每个用例开始前执行")def teardown(self):print("teardown:每个用例结束后执行")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_onea(self):print("正在执行--test_onea")x = "meili"assert "li" in xdef test_twob(self):print("正在执行--test_twob")x="he"assert hasattr(x,"check")def test_threec(self):print("正在执行--test_threec")x="hua"assert 'hu' in x
if __name__=="__main__":pytest.main(["-s",test_f1.py]) 
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: E:\study\python2020collected 3 itemstest_f1.py setup_class:所有用例执行之前执行一次
setup_method:每个用例开始前执行
setup:每个用例开始前执行
.正在执行--test_onea
teardown:每个用例结束后执行
teardown_method:每个用例结束后执行
setup_method:每个用例开始前执行
setup:每个用例开始前执行
F正在执行--test_twobtest_f1.py:20 (TestCase.test_twob)
self = <test_f1.TestCase object at 0x000001C60F375EB8>def test_twob(self):print("正在执行--test_twob")x="he"
>       assert hasattr(x,"check")
E       AssertionError: assert False
E        +  where False = hasattr('he', 'check')test_f1.py:24: AssertionError
teardown:每个用例结束后执行
teardown_method:每个用例结束后执行
setup_method:每个用例开始前执行
setup:每个用例开始前执行
.正在执行--test_threec
teardown:每个用例结束后执行
teardown_method:每个用例结束后执行
teardown_class:所有用例执行后执行一次

2.从结果看出,运行优先级别:setup_class》setup_method》setup》用例》teardown》teardown_method》teardown_class

备注:这里setup_method和teardown_method的功能和setup/teardown功能是一样的,一般二者用其中一个即可

函数和类混合

1.如果一个.py的文件里面既有函数用例又有类和方法用例,运行顺序又是怎样的呢?

#-*- coding=utf-8 -*-
#test_f1.py
import pytest
def setup_module():print("setup_module:py脚本开始")
def teardown_module():print("teardown_module:py脚本结束")
def setup_function():print("setup_function:每个函数开始")
def teardown_function():print("teardown_function:每个函数结束")
def setup_class():print("setup_class:类前一次") #定义在类外面,不报错,也不会被执行
def teardown_class():print("teardown_class:类后一次")
def test_one():print("正在执行--testone")assert 'o' in 'one'
def test_two():print("正在执行--testtwo")assert 'x' in 'xyz'
class Testc:def setup_method(self):print("setup_method每个类中方法开始前")def teardown_method(self):print("teardown_method每个类中方法结束后")def test_three(self):print("正在运行--类three")assert 'cs' in 'class'def test_four(self):print("正在运行--类four")assert 'c2' in 'c2'
if __name__=="__main__":pytest.main(["-s","test_f1.py"]) 

运行结果:

test_f1.py setup_module:py脚本开始
setup_function:每个函数开始
.正在执行--testone
teardown_function:每个函数结束
setup_function:每个函数开始
.正在执行--testtwo
teardown_function:每个函数结束
setup_method每个类中方法开始前
F正在运行--类threetest_f1.py:26 (Testc.test_three)
self = <test_f1.Testc object at 0x0000020C230F37F0>def test_three(self):print("正在运行--类three")
>       assert 'cs' in 'class'
E       AssertionError: assert 'cs' in 'class'test_f1.py:29: AssertionError
teardown_method每个类中方法结束后
setup_method每个类中方法开始前
.正在运行--类four
teardown_method每个类中方法结束后
teardown_module:py脚本结束

2.从运行结果看出,setup_module/teardown_module的优先级是最大的,然后函数里面用到的setup_function/teardown_function与类里面的setup_method/teardown_method互不干涉。定义在类外面的setup_class不执行,也不会报错。

pytest(四)--测试用例setup和teardown相关推荐

  1. 九、Pytest框架 — Pytest框架的setUp()和tearDown()函数

    ###文章内容有配套的学习视频和笔记都放在了文章末尾### 1.setUp()和tearDown()函数介绍 之前学过Unittest测试框架,知道前置setup()函数和后置teardown()函数 ...

  2. python:pytest中的setup和teardown

    原文:https://www.cnblogs.com/peiminer/p/9376352.html 之前我写的unittest的setup和teardown,还有setupClass和teardow ...

  3. pytest_04_测试用例setup和teardown

    学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次. 当然还有更高级一点的setupClass和teardownClass,需配合@ ...

  4. python pytest setupclass_简单了解pytest测试框架setup和tearDown

    pytest的setup与teardown 1)pytest提供了两套互相独立的setup 与 teardown和一对相对自由的setup与teardown 2)模块级与函数级 模块级(setup_m ...

  5. pytest框架中setup、teardown和setup_class、teardown_class

    函数级别方法: setup:每个用例执行之前都会执行一次 teardown:每个用例执行之后都会执行一次 import pytest class TestFunc:def setup(self): # ...

  6. pytest学习:setup、teardown、setup_class、teardown_class的区别

    记录pytest 与 unittest内的前后置函数操作区别 pytest示例 setup_class:单个测试类开始前执行1次 setup:每个测试函数执行前执行1次 teardown:每个测试函数 ...

  7. pytest中setup和teardown

    参考博客: pytest 2.测试用例setup和teardown以及使用@pytest.fixture()装饰器来实现部分用例的前后置,param参数化,ids(不显示unicode编码),name ...

  8. Pytest框架 —— setUp()和tearDown()函数

    1.setUp()和tearDown()函数介绍 之前学过Unittest测试框架,知道前置setup()函数和后置teardown()函数非常好用,在每次用例开始前和结束后都去执行一次. 当然还有更 ...

  9. pytest 前置后置用法之 Fixture、setup、teardown

    文章目录 前言 使用 setup 和 teardown 实现 方法介绍 方法级别 类级别 模块级别 整体案例 执行结果 使用 Fixture 实现 方法介绍 使用 Fixture 完成前置方法 所有用 ...

最新文章

  1. OpenMp使用例子
  2. UA MATH571B 试验设计VI 随机效应与混合效应3 嵌套设计
  3. Android源码打包命令
  4. 最新解决ora-01034:oracle not available 的方法
  5. matlab persistent静态变量
  6. win7电脑浏览器证书过期的解决方法
  7. 2021款凯迪拉克CT5新增尊贵型 售价32.27万元
  8. 谷歌推出3D社区“Lively” 挑战第二人生(组图)
  9. 12.TCP/IP 详解卷1 --- 广播和多播
  10. 在url中传递参数(方法二)
  11. Julia: fill, repeat, repmat
  12. B站左程云算法视频高级班02
  13. 淘宝/天猫API接口详情介绍(B类高级接口)
  14. 《计算机组网试验-DNS服务器安装配置 》杭州电子科技大学
  15. 【已解决】vue报错:Parsing error: No Babel config file detected for...
  16. 【论文分享】ACL 2020 立场检测相关研究
  17. ppt矩形里面的图片怎么放大缩小_如何使用PPT调节图片的大小
  18. 计算H时M分S秒以后是_消防考试必会计算题汇总!
  19. 将串口转换成TCP连接
  20. 「π」里藏着所有人的银行卡密码和生日?

热门文章

  1. 机器学习笔记4-sklearn决策树(上)
  2. 解决帝国时代2终极版闪退问题
  3. 综合扫描工具x-scan使用教程
  4. 利用python决策树分析iris数据及树状图绘制
  5. Python爬虫工具(2)--Requests[socks] --走本地PAC代理的爬虫
  6. 设计一个Windows应用程序,要求如下: 构造一个产品基类。 分别定义家电、日用百货、衣服等派生类,具体要求有不同的特征和行为。 定义一个泛型货架类,约束参数类型为产品
  7. c语言2164错误,美能达C203253353复印机常见错误故障代码介绍
  8. 简单一元线性回归模型
  9. Python经典实例:约瑟夫生者死者小游戏
  10. hutool使用 WeakReference