Pytest的前置和后置处理
一.模块级别的setup和teardown1.在Pytest中可以使⽤setup和teardown函数来定义测试⽤例的前置和后置操作1.1.setup函数它会在每个测试⽤例执⾏之前运⾏⽤于设置测试环境和准备测试数据1.1.setup全称setup_module1.2.teardown函数它会在每个测试⽤例执⾏之后运⾏⽤于清理测试环境和资源1.2.1.teardown全称teardown_module2.代码中尽可能前置、后置写统一要么都带上module要么都不写3.setup、teardown与setup_module、teardown_module同时出现会导致前置和后置竞争导致可能其中一个不会在终端显示出来4.示例defsetup():# 前置操作print(执行前置操作)defteardown():# 后置操作print(执行后置操作)deftest_example():# 测试用例print(执行测试用例)4.1.执行顺序4.1.1.先执行setup4.1.2.再执行test_example4.1.3.最后执行teardown二.函数级别的setup和teardown(没有类)1.setup_function函数级别的前置操作(函数即用例)2.teardown_function函数级别的后置操作(函数即用例)3.函数级别的前置、后置操作每一个用例开始执行的的前后都会执行一次前、后置操作4.test_002.pydefsetup_module():# --- setup# 前置操作print(执行模块级别前置操作)defteardown_module():# --- teardown# 后置操作print(执行模块级别后置操作)deftest_example1():# 测试用例1print(执行测试用例test_example1)deftest_example2():# 测试用例2print(执行测试用例test_example2)defsetup_function():# 函数级别的前置操作print(执行函数级别的前置操作)defteardown_function():# 函数级别的后置操作print(执行函数级别的后置操作)三.类级别的setup和teardown(有类)1.setup_class类级别的前置操作2.teardown_class类级别的后置操作3.setup_class和teardown_class在测试类的开始和结束时运⾏3.1.但是需要加上默认的‘classmethod’装饰器才会被识别为类级别的前、后置操作4.类级别的前、后置操作固定写法格式4.1.test003.pyclassTestClass:classmethoddefsetup_class(cls):# 类级别的前置操作print(执行类级别的前置操作)classmethoddefteardown_class(cls):# 类级别的后置操作print(执行类级别的后置操作)deftest0021(self):print(执行测试用例test0021)deftest0022(self):print(执行测试用例test0022)四.方法级别的setup和teardown(有类)1.setup_method方法级别的前置操作2.teardown_method方法级别的后置操作3.setup_method和teardown_method在每个测试⽅法的开始和结束时运⾏4.test_004.pyclassTestClass:defsetup_method(self,method):# 方法级别的前置操作print(执行方法级别的前置操作)defteardown_method(self,method):# 方法级别的后置操作print(执行方法级别的后置操作)deftest_example1(self):# 测试用例1print(执行测试用例test_example1)deftest_example2(self):# 测试用例2print(执行测试用例test_example2)deftest_example3(self):# 测试用例3print(执行测试用例test_example3)5.类级别的前、后置与方法级别的前、后置一起使用执行顺序5.1.先执行类级别的前置操作5.2.再逐个执行每个测试用例执行每个用例的同时都会执行一次方法级别的前、后置操作5.3.最后执行类级别的后置操作5.4.test_005.pyclassTestClass:defsetup_method(self,method):# 方法级别的前置操作print(执行方法级别的前置操作)defteardown_method(self,method):# 方法级别的后置操作print(执行方法级别的后置操作)deftest_example1(self):# 测试用例1print(执行测试用例test_example1)deftest_example2(self):# 测试用例2print(执行测试用例test_example2)deftest_example3(self):# 测试用例3print(执行测试用例test_example3)classmethoddefsetup_class(cls):# 类级别的前置操作print(执行类级别的前置操作)classmethoddefteardown_class(cls):# 类级别的后置操作print(执行类级别的后置操作)五.模块的前后置操作案例1.test_duck40.pydefsetup():# 模块的前置操作用例开始执行之前先打印出一句开始的提示语print(---烤鸭店系统开始工作---)defteardown():# 模块的后置操作用例执行结束后打印出一句结束的提示语print(---即将退出烤鸭店系统---)deftest_duck_4_0():projects{}# 装多个商品whileTrue:oper_typeinput(1 - 录入商品\n2 - 查询商品\n3 - 退出\n请做出你的选择)ifoper_type1:pro_list[]# 录入逻辑print(准备开始录入商品)load_txt[请输入商品名:,请输入商品的成本价,请输入商品的产地,请输入商品的生产日期]foriinload_txt:name1input({}.format(i))pro_list.append(name1)projects[pro_list[0]]pro_listelifoper_type2:# 查询逻辑print(projects)po_nameinput(请输入要查询的商品名:)print(你要查询的商品是{}.format(projects[po_name]))# 烤鸭 -- 直接给我烤鸭信息elifoper_type3:breakelse:print(无法别操作请重新输入)continue2.main.pyimportpytest pytest.main([-k,test_duck40,-vs])2.1.main文件执行结果