• 周四. 4月 18th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

unittest与pytest对比

admin

11月 28, 2021
---相同点:
测试框架:通过python代码来编写用例、搜集用例、运行用例、生成报告
---编写用例:
unittest:继承TestCase unittest.testcase
pytest:函数/类里面的方法,用例名称必须以test_开头,如果用例在类中,类名必须以Test开头
---前置后置:
unittest:setup/teardown setupClass,tearDownClass
setup:当中得到的变量,如何从传递给测试用例 self.xxx
setupClass:cls.xxx

pytest:
方案一:沿用unittest的风格
1、用例级别:setup teardown 类和类外部的用例都可以使用
2、类级别:setup_class teardown_class
@classmethod
def setup_class(self):
print("类前置-01")
@classmethod
def teardown_class(self):
print("类后置01")
3、模块级别:
setup_module teardown_module
方案二:fixture
先定义再调用
定义:@pytest.fixture() def init()
调用:@pytest.mark.usefixtures("init")
1、函数实现的,函数名称不固定---如何知道它是前置/后置
@pytest.fixture
def fix():
pass
2、前置和后置操作,写在一个函数里面 ---如何区分哪些是前置代码 哪些是后置代码
@pytest.fixture
def fix():
前置代码
yeild #分隔线
后置代码
3、4个作用域 测试函数(function)、测试类(class)、测试模块文件(module)、测试会话(session)
@pytest.fixture(scope=function/class/module/session)
def fix():
前置代码
yield #分隔线
后置代码
4、不需要跟测试类/测试函数放在一起,需要时再调用
5、前置操作得到的一些数据,如何传递给测试用例
yield 返回值
在测试用例当中,以fixture函数名作为用例参数,用例参数接收返回值
def init():
print("作用于为测试函数的======前置======代码")
a = [1,2,3,4,5,6]
yield a
class TestDay:
def test_new01(self,init):
print("===类下的用例1===")
for i in init:
print(i)
测试函数的参数有两种:fixture 参数化-case
如果fixture有返回值,那么将它作为测试函数的参数时,则可以不用使用:@pytest.mark.usefixtures("init") 程序会自动找
6、共享机制:conftest.py
conftest.py:定义fixture,可以定义多个
共享的范围:当前conftest.py所在目录下(包括子孙目录)的所有测试用例共享
如果需要在test01基础上增加内容,变成test02。需要在test02上引用test01---伪继承
@pytest.fixture()
def fix01():
pass

@pytest.fixture()
def fix02(fix01):
新增的代码
yield fix01
执行顺序:fix01前置 fix02前置 fix02后置 fix01后置
嵌套的前提:fix01 与fix02 要么同级,要么fix01>fix02

---断言
unittest:self.assert
pytest:assert 表达式,根据表达式的结果判断通过/失败
---收集用例
用例分散在多个文件中
unittest:TestLoad.discover(目录)---收集到套件中,run方法执行
pytest:不需要写代码去搜集用例,自动收集-查找用例的方式。执行用例时会自动收集
pytest命令行:pytest[参数]
如何自动收集用例:
1、目录--从哪个目录下开始搜索用例:
rootdir:在哪个路径下运行,则pytest自动在当前路径下进行查找-rootdir

2、文件名--命名符合test_*.py或者*_test.py条件的文件名
3、函数/类下方法:-函数名以test_开头
-以Test开头(不含__init__)的类下的test_开头方法
搜集并运行用例
方式一:pytest -s -v 控制台显示详细用例执行情况
方式二:python文件中-pytest.main()
---执行顺序
1、文件名:ASCALL码顺序从上到下
2、文件内部:按照代码先后顺序-即从上到下执行
---测试报告
unittest:HTMLTestRunner BeautifulReport
pyteest:allure

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注