学习pytest的第二天-----pytest中的setup与teardown
引入
了解unittest的我们都知道,unittest中有测试固件。用于在每个测试用例执行前后执行相关操作,我们一般会把每个测试用例的相同的准备操作和结束操作放在固件中。那么pytest中又如何实现相同的目的呢?
setup()和teardown() / setup_method()和teardown_method()
setup()表示测试类中每个测试方法(测试方法指的是在测试类中的测试用例)执行前都需要执行的操作,teardown()表示每个测试方法执行后都需要执行的操作。
setup_method()/teardown_method()两个方法和setup()/teardown()的作用是一样的,也是在测试方法执行的前后执行部分操作。
下面代码以setup()/teardown()为例:需要说明的是我们在程序的入口调用了pytest.main()方法,和我们在cmd窗口调用pytest命令一样:开始测试用例的执行(需要注意的是我们main函数传入的参数要以列表的形式)。pytest命令及相关参数可参考:学习pytest的第一天-----安装+用例设计规则+pytest命令
#test_Pytest.py文件
#coding=utf-8
import pytest
class Test_Pytest():
def setup(self):
print("setup方法执行")
def teardown(self):
print("teardown方法执行")
def test_one(self):
print("test_one方法执行")
assert 1==1
def test_two(self):
print("test_two方法执行")
assert "o" in "love"
def test_three(self):
print("test_three方法执行")
assert 3-2==1
if __name__=="__main__":
pytest.main(['-s','test_Pytest.py'])
执行结果如图:
setup_class()和teardown_class()
setup_class()和teardown_class()是在测试类中所有的测试方法执行的前后执行的操作。
代码栗子如下:
#test_Pytest.py文件
#coding=utf-8
import pytest
class Test_Pytest():
def setup_class(self):
print("setup_class方法执行")
def teardown_class(self):
print("teardown_class方法执行")
def setup_method(self):
print("setup_method方法执行")
def teardown_method(self):
print("teardown_method方法执行")
def test_one(self):
print("test_one方法执行")
assert 1==1
def test_two(self):
print("test_two方法执行")
assert "o" in "love"
def test_three(self):
print("test_three方法执行")
assert 3-2==1
if __name__=="__main__":
pytest.main(['-s','test_Pytest.py'])
运行结果图如下:
setup_function()/teardown_function()和setup_module()/teardown_module()
setup_function()/teardown_function()和setup_module()/teardown_module()这两对函数都是对于测试函数(测试用例不在测试类中,而直接在".py"文件中)使用的,故放一起介绍。
setup_function()/teardown_function()是在文件中每个测试函数执行前后都执行的操作。
setup_module()/teardown_module()是在文件中所有测试函数执行的前后执行的操作。
话不多说,直接来看代码栗子(需要注意的是因为测试函数不是在类中,所以参数中不能传self了):
#test_Pytest.py文件
#coding=utf-8
import pytest
def setup_module():
print("setup_module方法执行")
def teardown_module():
print("teardown_module方法执行")
def setup_function():
print("setup_function方法执行")
def teardown_function():
print("teardown_function方法执行")
def test_one():
print("test_one方法执行")
assert 1==1
def test_two():
print("test_two方法执行")
assert "o" in "love"
def test_three():
print("test_three方法执行")
assert 3-2==1
if __name__=="__main__":
pytest.main(['-s','test_Pytest.py'])
执行结果如图:
哼-~~嗯,讲两句哈:如果上面提到的五对"setup"和"teardown"放在一个".py"文件中,执行的顺序应该是:module级别的应该是最外层(级别最大),测试函数的function级别 和 测试方法的class/method 互不影响,按顺序自己执行自己的。这里就不演示了,有兴趣可以自行演示。
参考:
https://www.cnblogs.com/yoyoketang/tag/pytest/default.html?page=2(感谢作者)