1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【pytest】概述pytest——setup teardown方法和conftest中的fixture用法 来执行测试

【pytest】概述pytest——setup teardown方法和conftest中的fixture用法 来执行测试

时间:2020-07-21 14:50:54

相关推荐

【pytest】概述pytest——setup teardown方法和conftest中的fixture用法 来执行测试

大家好,我是好学的小师弟。今天和大家分享下-在pytest中的前置/后置操作。

所谓的前置/后置操作,就是在测试用例执行前,你预先要执行的一些步骤;在测试用例执行完毕后,你要执行的一些数据清理/备份工作。

在pytest中已经给我们准备好了这两个函数,setup和teardown。用法如下:

"""setup_module: 这是模块级别的setup,作用域是整个.py文件(整个模块),只在运行所有的测试用例前,有且执行一次teardown_module:这是模块级别的teardown,作用域是整个.py文件(整个模块),只在运行完所有的测试用例后,有且执行一次setup_function:这是函数级别的setup,作用域只针对函数,注意这里的函数指的是,不在类里面的函数方法。如果函数在类里面,则function级别的setup,对他不起作用,因为不在它的作用域内。对于在类外的函数,function级别的setup会在每条测试用例执行前,都执行一遍teardown_function:这是函数级别的teardown_function,作用域只针对函数,注意这里的函数指的是,不在类里面的函数方法。如果函数在类里面,则function级别的teardown,对他不起作用,因为不在它的作用域内。对于在类外的函数,function级别的teardown会在每条测试用例执行完毕后,都执行一遍setup_class:这是类级别的setup,作用域只在含有这个setup的那个类中,且只在类中的所有测试用例执行前,有且执行一遍teardown_class:这是类级别的teardown,作用域只在含有这个teardown的那个类中,且只在类中的所有测试用例执行完毕后,有且执行一遍setup_method:这是方法级别的setup,作用域只在含有这个setup的那个类中,且在当前类中的每条测试用例执行前,都会执行一遍这个setupteardown_method:这是方法级别的teardown,作用域只在含有这个teardown的那个类中,且在当前类中的每条测试用例执行完毕后,都会执行一遍这个teardown"""

测试代码:

import allureimport pytestfrom control_login_csdn.login_csdn import login_csdn_pythonfrom read_yaml.read_csdn_python_hotrank import Read_csdndef setup_module():print('这是模块级别的setup,你会在执行所有的测试用例前,执行它。有且只会执行一次')def teardown_module():print('这是模块级别的teardown,只会在所有测试用例执行完毕后,才执行一次')'''注意 function函数级别的 不能在class内部使用'''def setup_function():print('这是函数级别的setup,你在执行每条测试用例前,都会执行它。但是前提是,''它只对不在类(class)里面的函数生效,如果你的test_函数写在类Test_里面去了,这个setup_function就不会生效,哪怕你把他写到class里面去也不会生效''它只对类(class)外的函数生效')def teardown_function():print('这是函数级别的teardown,每条测试用例执行完毕后,都会执行,但是前提是,它只对不在类(class)里面的函数生效,''如果你的test_函数写在类Test_里面去了,这个teardown_function就不会生效,哪怕你把他写到class里面去也不会生效''它只对类(class)外的函数生效')'''还有setup_class和teardown_class这两个类级别的他们要写到类里面去,有且只执行一次setup_method和teardown_method是方法级别的,他们要写到类里面去,而且类里面所有测试用例,她都会执行'''class Test_csdn_login():@allure.feature('登录模块')@pytest.mark.parametrize('indata,outdata',Read_csdn().read_csdn(filepath='./yaml_files/csdn_hot_rank_python.yaml'))@pytest.mark.xfaildef test_login(self, indata, outdata):# 调用业务代码,获取响应,业务代码就是login_csdn.py这个文件中的函数print('这是执行登陆测试用例')res = login_csdn_python(indata)# 断言assert res['code'] == outdata['code']print('测试结束了')@pytest.mark.xfaildef test_01(self):print('111')def setup_method(self):print('这是方法级别的setup,你会在类里面执行,且类里面的所有测试用例执行前都会执行这条语句')def teardown_method(self):print('这是方法级别的teardown,你会在类里面执行,且类里面的所有测试用例执行后都会执行这条语句')def setup_class(self):print('这是类级别的setup,你会在类里面执行所有的测试用例前,执行它。有且只会执行一次')def teardown_class(self):print('这是类级别的teardown,只会在类里面所有测试用例执行完毕后,才执行一次')if __name__ == '__main__':# -s 打印输出pytest.main(['-sq', 'test_practise_setup_and_taerdown_DifferFrom_fixture.py', "--alluredir=./target/allure-results"])'''F 用例失败E error. 成功的'''

结果图:

"""============================= 2 xpassed in 0.84s ==============================Process finished with exit code 0这是模块级别的setup,你会在执行所有的测试用例前,执行它。有且只会执行一次这是类级别的setup,你会在类里面执行所有的测试用例前,执行它。有且只会执行一次这是方法级别的setup,你会在类里面执行,且类里面的所有测试用例执行前都会执行这条语句XPASS [ 50%]这是执行登陆测试用例测试结束了这是方法级别的teardown,你会在类里面执行,且类里面的所有测试用例执行后都会执行这条语句这是方法级别的setup,你会在类里面执行,且类里面的所有测试用例执行前都会执行这条语句XPASS [100%]111这是方法级别的teardown,你会在类里面执行,且类里面的所有测试用例执行后都会执行这条语句这是类级别的teardown,只会在类里面所有测试用例执行完毕后,才执行一次这是模块级别的teardown,只会在所有测试用例执行完毕后,才执行一次"""

pytest中除了提供现成的setup方法和teardown方法,还提供了conftest文件结合fixture的方法来达到处理测试用例的前置条件和后置条件的操作。

conftest简介:

1.conftest是一个名字固定的.py文件,他就叫conftest。

2.conftest作用域:一般在工程根目录下设置的conftest.py文件起到全局作用。 在不同子目录下也可以放conftest.py的文件,作用范围只能在该目录及以下目录内

3.conftest.py文件的作用:所有同目录下的测试用例文件运行前都会执行conftest.py文件,它就相当于一个前置文件,将conftest的该特性和fixture方法结合起来使用,即可达到测试用例前置/后置条件语句操作

在根目录下新建一个conftest.py文件

然后在conftest.py文件中,写入前置/后置条件语句,通过fixture来实现

import pytest@pytest.fixture(scope='module', autouse=True)def start_prepare():print('正在初始化数据,我现在就相当于setup操作') # 这个就相当于setupyieldprint('测试结束,正在处理测试文件,我现在就相当于teardown') # 这个就相当于teardown"""这边的scope指的就是你这个fixture语句的作用域假设有三个测试用例文件scope='session',在三个测试用例文件,一个都没有执行前执行一次,有且仅执行一次你可以把session理解为早读课,三个测试用例文件,理解为早上的三节课。scope='module',每一个测试文件执行前都要执行一遍fixturescope='class',每一个测试文件中的测试类执行前都要执行一遍fixturescope='function',所有文件的每条测试用例执行前都要执行一遍fixtureautouse=True这个就是运行时,自动执行该条语句不需要我们再去调用@pytest.mark.usefixtures("你的fixture的函数名")来执行fixture语句这里我们调用的话,就是@pytest.mark.usefixtures("start_prepare")"""

测试代码:

import pytest@pytest.fixture(scope='module', autouse=True)def start_prepare():print('正在初始化数据,我现在就相当于setup操作') # 这个就相当于setupyield print('测试结束,正在处理测试文件,我现在就相当于teardown') # 这个就相当于teardown

注意:这个代码是写在conftest.py文件中的。conftest.py文件不需要导入,在执行pytest测试用例的时候,它会自动去找conftest.py文件

现在再运行,上面写的setup和teardown的代码,你会发现多出来两行字,就是conftest.py文件里的fixture这两行字。

效果图:

'''============================= 2 xpassed in 1.01s ==============================Process finished with exit code 0正在初始化数据,我现在就相当于setup操作 #fixture语句这是模块级别的setup,你会在执行所有的测试用例前,执行它。有且只会执行一次这是类级别的setup,你会在类里面执行所有的测试用例前,执行它。有且只会执行一次这是方法级别的setup,你会在类里面执行,且类里面的所有测试用例执行前都会执行这条语句XPASS [ 50%]这是执行登陆测试用例测试结束了这是方法级别的teardown,你会在类里面执行,且类里面的所有测试用例执行后都会执行这条语句这是方法级别的setup,你会在类里面执行,且类里面的所有测试用例执行前都会执行这条语句XPASS [100%]111这是方法级别的teardown,你会在类里面执行,且类里面的所有测试用例执行后都会执行这条语句这是类级别的teardown,只会在类里面所有测试用例执行完毕后,才执行一次这是模块级别的teardown,只会在所有测试用例执行完毕后,才执行一次测试结束,正在处理测试文件,我现在就相当于teardown #fixture语句'''

新人创作不易,觉得不错的看官,点个赞吧,么么哒!!!

转载注明出处!

【pytest】概述pytest——setup teardown方法和conftest中的fixture用法 来执行测试用例的前置/后置条件语句操作

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。