视频地址
内容概览
什么是前后置
在测试之前需要做一些准备工作(可以使用下边讲到的setup) 比如全局初始化数据库、准备测试数据,全局进行一个登录然后拿到登录凭证进行后续的请求,或者做ui自动化时需要初始化一个浏览器driver 进行后续的操作这些可以认为是前置。
后置就是和上边对应的过程,在测试结束时我们需要做的比如清空测试中关闭数据库链接、关闭浏览器、退出登录等 可以使用teardown来完成这些操作
Pytest的setUp()和tearDown()
Pytest框架setUp()函数和tearDown()函数主要分为:模块级,类级,方法级,函数级
模块级(setup_module/teardown_module)开始于模块始末,全局的
函数级(setup_function/teardown_function)只对函数用例生效(对类中的测试方法不生效)
类级(setup_class/teardown_class)只在类中前后运行一次(只在类中生效)
方法级(setup_method/teardown_method)开始于方法始末(只在类中生效)
类里面的(setup/teardown)运行在调用方法的前后(个人认为是为了兼容unittest的写法 执行的时候会报warning 告诉你用setup_method/teardown_method代替)
详细介绍
模块级 setup_module/teardown_module
顾名思义在整个模块生效
什么是模块呢,在这里你可以理解为一个py文件就是一个模块
所以在一个测试文件中写了setup_module在所有用例开始前只执行一次/teardown_module 在所有用例结束后执行一次
话不多说看例子
"""验证setup teardown"""
def setup_module():
print("在这个py文件最开始时只执行一次....")
print("=======setup_module=========")
def teardown_module():
print("在这个py文件最后只执行一次.....")
print("=======teardown_module=========")
def test_02_case1():
print("test_02_case1")
def test_02_case2():
print("test_02_case2")
class TestSetUpTeardown(object):
def test_02_setup_01(self):
print("test_02_setup_01")
print("执行的case1")
def test_02_setup_02(self):
print("test_02_setup_01")
print("执行的case2")
执行结果
函数级(setup_function/teardown_function)
对当前文件的每个函数方式的case生效、 对以类的方式编写的case不生效
def setup_function():
print("===========setup_function==========")
print("每个测试方法都执行/对以类的方式编写的case不生效")
def teardown_function():
print("===========teardown_function==========")
print("每个测试方法都执行/对以类的方式编写的case不生效")
def test_02_case1():
print("test_02_case1")
def test_02_case2():
print("test_02_case2")
class TestSetUpTeardown(object):
def test_02_setup_01(self):
print("test_class_02_setup_01")
print("执行的case1")
def test_02_setup_02(self):
print("test_class_setup_02")
print("执行的case2")
执行结果
类级(setup_class/teardown_class)
写在类中,只对当前的测试类进行生效 setup_class在执行case前只执行一次、teardown_class在执行完当前类的所有case后执行一次
class TestSetUpTeardown(object):
def setup_class(self):
print()
print("在这个类中执行一次.....")
print("setup_class================")
def test_02_setup_01(self):
print("test_02_setup_01")
print("执行的case1")
def test_02_setup_02(self):
print("test_02_setup_01")
print("执行的case2")
def teardown_class(self):
print()
print("在这个类中执行一次.....")
print("teardown_class================")
方法级(setup_method/teardown_method)
class TestSetUpTeardown(object):
def setup_method(self):
print()
print("在这个类中每个case执行一次.....")
print("setup_class================")
def test_02_setup_01(self):
print("test_02_setup_01")
print("执行的case1")
def test_02_setup_02(self):
print("test_02_setup_01")
print("执行的case2")
def teardown_method(self):
print()
print("在这个类中每个case执行一次.....")
print("teardown_method================")
总结
def setup_module():
print("在这个py文件最开始时只执行一次....")
print("=======setup_module=========")
def teardown_module():
print("在这个py文件最后只执行一次.....")
print("=======teardown_module=========")
def setup_function():
print()
print("每个测试方法都执行")
def test_02_case1():
print("test_02_case1")
def test_02_case2():
print("test_02_case2")
class TestSetUpTeardown(object):
def setup_class(self):
print()
print("在这个类中执行一次.....")
print("setup_class=============")
def setup_method(self):
print()
print("在这个类中的每个case前都执行")
print("setup_method===========")
def test_02_setup_01(self):
print("test_02_setup_01")
print("执行的case1")
def test_02_setup_02(self):
print("test_02_setup_01")
print("执行的case2")
def teardown_method(self):
print()
print("在个类中的每个case后都执行")
print("teardown_method===========")
def teardown_class(self):
print()
print("在这个类中执行一次.....")
print("teardown_class=============")