说明
相信之前接触过的unittest的各位对setup、teardown都不会陌生,当使用了setup、teardown之后,每个用例执行之前和执行结束后都会去执行一次。这就好比是开车一样,只要我开车了,都要先对车进行启动,然后到达目的地之后对车进行熄火。这样做的好处就是在我们进行自动化测试用例执行之前进行测试准备和初始化操作,测试结束后进行清理操作,比如说一些数据库的还原、浏览器的关闭等。
说了这么多,pytest也有这种功能和语法,而且种类比unittest更加的丰富,使用起来也更加的方便快捷。
级别介绍
pytest的用例级别主要分为以下几类:
1、模块级:setup_module/teardown_module
2、函数级:setup_function/teardown_function
3、类级:setup_class/teardown_class
4、方法级:setup_method/teardown_method
5、类里面的级别:setup/teardown
下面通过代码来进行演示说明。
- 模块级:setup_module/teardown_module
setup_module/teardown_module是适用于全局的,它适用于模块的始末,换句话说就是整个.py文件只运行一次,只要有一个.py文件运行,那就会执行一次setup_module和teardown_module,代码和运行结果如下:
# -*-coding:utf-8 -*-
#test_moudle.py
import pytest
def setup_module():
print('\nsetup_moudle:整个.py模块只能执行一次')
print('比如:所有用例开始前只打开一次浏览器')
def teardown_module():
print('teardown_moudle:整个.py模块只执行一次')
print('比如:所有的用例结束只最后关闭浏览器')
def test_one():
print('正在运行test_one函数')
x = 'hello'
assert 'h' in x
def test_three():
print('正在运行test_three函数')
a = 'hello'
b = 'hello world'
assert a in b
if __name__ == '__main__':
pytest.main(['-s','test_moudle.py'])
- 函数级:setup_function/teardown_function
setup_function/teardown_function是针对于用例的,每个用例执行前、执行结束后都会执行一次setup_function、teardown_function,代码和运行结果如下:
#-*-coding:utf-8-*-
import pytest
#test_fun_class.py
def setup_function():
print('\nsetup_function:每个用例开始前都会执行')
def teardown_function():
print('teardown_function:每个用例结束后都会执行')
def test_one():
print('正在执行--test_one')
assert 1==1
def test_two():
print('正在执行--test_weo')
assert 2==2
if __name__ == '__main__':
pytest.main(['-s','test_fun_class.py'])
这里需要注意的是,setup_function和teardown_function不能作用于class类中的方法,例如,TestCase类中的test_three、test_four执行时setup_function、teardown_function并没有执行。
import pytest
def setup_function():
print('\nsetup_function:每个用例开始前都会执行')
def teardown_function():
print('teardown_function:每个用例结束后都会执行')
class TestCase():
def test_three(self):
print('正在执行--test_three')
assert 5==5
def test_four(self):
print('正在执行--test_four')
assert 6==6
if __name__ == '__main__':
pytest.main(['-s','test_fun_class.py'])
- 类级:setup_class/teardown_class
setup_class/teardown_class使用对象是用于class类的,只在类中执行前后执行,类之外的用例是不会去执行的,如下所示:
import pytest
def test_one():
print('正在执行--test_one')
assert 1==1
def test_two():
print('正在执行--test_weo')
assert 2==2
class TestCase():
def setup_class(self):
print('\nsetup_class:所有用例执行之前')
def teardown_class(self):
print('teardown_class:所有用例执行之后')
def test_three(self):
print('正在执行--test_three')
assert 5==5
def test_four(self):
print('正在执行--test_four')
assert 6==6
if __name__ == '__main__':
pytest.main(['-s','test_fun_class.py'])
- 方法级:setup_method/teardown_method
setup_method/teardown_method是适用于class中的方法的,它只在类中的方法执行时先执行setup_method和teardown_method,它和setup_function/teardown_function正好相反,代码演示及结果如下:
import pytest
def test_one():
print('\n正在执行--test_one')
assert 1==1
def test_two():
print('正在执行--test_weo\n')
assert 2==2
class TestCase():
def setup_method(self):
print('setup_method:每个用例执行之前')
def teardown_method(self):
print('teardown_method:每个用例执行之后\n')
def test_three(self):
print('正在执行--test_three')
assert 5==5
def test_four(self):
print('正在执行--test_four')
assert 6==6
if __name__ == '__main__':
pytest.main(['-s','test_fun_class.py'])
- 类里面的级别:setup/teardown
setup/teardown也是作用于类中,是在调用类的方法前后去使用的,如下所示:
import pytest
def test_one():
print('\n正在执行--test_one')
assert 1==1
def test_two():
print('正在执行--test_weo\n')
assert 2==2
print('***********************')
class TestCase():
def setup(self):
print('setup:每个用开始前执行')
def teardown(self):
print('teardown:每个用结束后执行\n')
def test_three(self):
print('正在执行--test_three')
assert 5==5
def test_four(self):
print('正在执行--test_four')
assert 6==6
if __name__ == '__main__':
pytest.main(['-s','test_fun_class.py'])
总结
以上大概就是pytest常用的几种级别用例的使用方法介绍,掌握了以上的方法,将会方便于今后写自动化测试用例,做到不同级别的用例,方法去进行响应的一个前置和后置处理操作,希望能帮助到小伙伴,也希望大家能给点个赞,哈哈!