pytest实现fixture的原理,pytest指定执行顺序
测试执行的顺序【收集测试用例,运行fixture函数,运行测试用例】用例的异常机制_mb62abf3afb54fb _博客的技术博客
Pytest执行顺序【收集测试用例,运行fixture函数,运行测试用例】1。首先,在执行pytest测试用例之前,先收集测试套件中的所有测试用例。[对于参数化的测试用例(甚至是那些带有parametrize decorator的用例),实际上这些用例已经在测试收集阶段自动准备好了]
可以参考这个博客【pytest修改测试用例的执行顺序(hook函数:pytest_collection_modifyitems)】。
导入pytest
从tools.read_config导入*
类测试日志1:
定义测试_1(自身):
print(ReadConfig()。read_config(project_GHelper , token ))
@pytest.mark.skip
定义测试_2(自身):
打印(“用例执行2”)
类别测试登录2:
@ pytest . mark . parameterize( data1,data2 ,[(1,2),( a , b)],ids=[第一个测试用例,第二个测试用例])
定义测试_3(自身、数据1、数据2):
打印运行结果(数据1,数据2):
【注意】在收集需要运行的测试用例时,测试用例的参数化部分会提前运行,即需要收集所有的测试用例;然后开始执行测试用例,即执行测试方法体中的程序。
例:用例参数化时不能替换token,因为每次fixture函数在测试用例收集后运行,此时参数化已经完成。(此时的令牌是执行fixture函数之前的旧令牌)
2.在运行测试用例之前,您将首先检查测试函数中的参数,然后搜索与这些参数同名的fixture。一旦pytest找到这些对象,它将运行这些fixture。
【推导:夹具的执行顺序】:
3.开始执行测试用例。
异常机制1。测试用例收集完成后,如果测试用例执行过程中设置前置功能异常,测试用例的执行将被中断(即不执行任何测试用例)。代码:
# conftest.py
导入pytest
@pytest.fixture(scope=session ,autouse=True)
def get_token():
引发异常(“执行用例时,在执行安装预操作期间出现异常”)
#直到测试用例收集完毕才会执行。
def pytest _ collection _ modify items(items):
打印( \npytest收集的所有测试用例:\ n ,项)
对于项目中的项目:
item . name=item . name . encode( utf-8 )。解码(“unicode_escape”)
项目。_ nodeid=item . nodeid . encode( utf-8 )。解码(“unicode_escape”)
打印(- * 10)
打印(用例名称:,item.name)
Print(用例节点:,item.nodeid) #打印出每个参数化的测试用例路径和每个测试用例的ids # test _ 002.py。
导入pytest
TestDemoB类:
定义测试_B_001(自身):
及格
定义测试_B_002(自身):
及格
定义测试_B_003(自身):
及格
if __name__==__main__ :
Test.main ([-vs ,_ _ file _ _])运行结果:
2.测试用例收集完成后,如果测试用例执行后拆机后功能异常,测试用例的执行不会被中断(因为此时测试用例已经被执行)。代码1:
# conftest.py
导入pytest
@ pytest . fixture(scope= function ,autouse=True)
def get_token():
打印(“在执行用例之前,执行设置预操作期间没有异常”)
产量
引发异常(“用例执行后,在执行拆卸后功能期间出现异常”)
#直到测试用例收集完毕才会执行。
def pytest _ collection _ modify items(items):
打印( \npy test收集的所有测试用例:\ n ,项)
对于项目中的项目:
item . name=item . name . encode( utf-8 )。解码(“unicode_escape”)
项目。_ nodeid=item . nodeid . encode( utf-8 )。解码(“unicode_escape”)
打印(- * 10)
打印(用例名称:,item.name)
Print(用例节点:,item.nodeid) #打印出每个参数化的测试用例路径和每个测试用例的ids # test _ 002.py。
导入pytest
TestDemoB类:
定义测试_B_001(自身):
及格
定义测试_B_002(自身):
及格
定义测试_B_003(自身):
及格
if __name__==__main__ :
Test.main ([-vs ,_ _ file _ _])运行结果:
代码2:
# conftest.py
导入pytest
@ pytest . fixture(scope= function ,autouse=True)
def get_token():
打印(“在执行用例之前,执行设置预操作期间没有异常”)
产量
引发异常(“用例执行后,在执行拆卸后功能期间出现异常”)
#直到测试用例收集完毕才会执行。
def pytest _ collection _ modify items(items):
打印( \npy test收集的所有测试用例:\ n ,项)
对于项目中的项目:
item . name=item . name . encode( utf-8 )。解码(“unicode_escape”)
项目。_ nodeid=item . nodeid . encode( utf-8 )。解码(“unicode_escape”)
打印(- * 10)
打印(用例名称:,item.name)
Print(用例节点:,item.nodeid) #打印出每个参数化的测试用例路径和每个测试用例的ids # test _ 002.py。
导入pytest
TestDemoB类:
定义测试_B_001(自身):
打印(1*100)
定义测试_B_002(自身):
打印( **100)
定义测试_B_003(自身):
打印( *100)
if __name__==__main__ :
Test.main ([-vs ,_ _ file _ _])运行结果:
3.测试用例收集完成后,测试用例执行时的setup前置函数和teardown后置函数无异常,测试用例执行正常,测试用例执行结果通过正常断言获得。代码:
# conftest.py
导入pytest
@ pytest . fixture(scope= function ,autouse=True)
def get_token():
打印(“在执行用例之前,执行设置预操作期间没有异常”)
产量
打印(“用例执行后,拆卸后功能执行期间无异常”)
#直到测试用例收集完毕才会执行。
def pytest _ collection _ modify items(items):
打印( \npytest收集的所有测试用例:\ n ,项)
对于项目中的项目:
item . name=item . name . encode( utf-8 )。解码(“unicode_escape”)
项目。_ nodeid=item . nodeid . encode( utf-8 )。解码(“unicode_escape”)
打印(- * 10)
打印(用例名称:,item.name)
Print(用例节点:,item.nodeid) #打印出每个参数化的测试用例路径和每个测试用例的ids # test _ 002.py。
导入pytest
TestDemoB类:
定义测试_B_001(自身):
断言假
定义测试_B_002(自身):
打印( **100)
定义测试_B_003(自身):
打印( *100)
if __name__==__main__ :
Test.main ([-vs ,_ _ file _ _])运行结果:
期待陌生,拥抱惊喜。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。