#pytest 框架实现一些前后置的处理,常用的三种方法
一,setup/teardown
setup /teardown 在每个用例前后都会执行
import pytest
class TestLogin:
#在所有的用例之前只执行一次
def setup_class(self):
print('在每个类执行钱的初始化的工作:例如:创建日志对象,创建数据库的连接请求对象')
#在每条用例之前都执行一次
def setup(self):
print('打开浏览器')
@pytest.mark.run(order=1)
def test_01_mingtian(self):
print('明天')
@pytest.mark.run(order=3)
def test_01_jintian(self):
print('晴天')
@pytest.mark.skip
@pytest.mark.run(order=2)
def test_01_zuotian(self):
print('昨天')
def teardown(self):
print('\n关闭浏览器')
def teardown_class(self):
print('\n 在每个类执行后的扫尾工作:例如:销毁日志对象,销毁数据库的连接')
if __name__ == '__main__':
pytest.main(['test_case.py','-s'])
使用@pytest.fixture() 装饰器来实现***部分***用例的前后置
pytest.fixture(scope,params,autouse,ids,name)
- scope 表示的是被pytest.fixture 标记的方法的作用域。function(默认),class,module,package/session
class TestOffice:
#autouse 默认为False,如果为True,就表示默认调用了前后置方法
@pytest.fixture(scope='class',autouse='True',)
def my_fixture(self):
print('\n这是一个前置方法')
yield
print('\n这个是一个后置方法')
def test_01_jintian(self):
print('\n今天')
def test_02_mingtian(self,my_fixture):
print('\n明天')
if __name__ == '__main__':
pytest.main(['test_office.py','-s'])
- params :参数化(支持,[],(),[{},{}],({},{}))
import pytest
class TestOffice:
#autouse 默认为False,如果为True,就表示默认调用了前后置方法
@pytest.fixture(scope='function',params=['王一一','王一二'])
def my_fixture(self,request): #request :用于传参
print('前置')
yield request.param
print('后置')
def test_01_jintian(self):
print('\n今天')
def test_02_mingtian(self,my_fixture):
print('\n明天')
print('----'+str(my_fixture))
if __name__ == '__main__':
pytest.main(['test_office.py','-s'])
params=[[‘王一一’,‘王一二’]] 这里的params是参数名,是有s
request.param 这里是属性名,不带s
预期结果
test_office.py::TestOffice::test_01_jintian
今天
PASSED
test_office.py::TestOffice::test_02_mingtian[\u738b\u4e00\u4e00] 前置
明天
----王一一
PASSED后置
test_office.py::TestOffice::test_02_mingtian[\u738b\u4e00\u4e8c] 前置
明天
----王一二
PASSED后置
- autouse=True: 自动使用,默认False
- ids: 当使用params 参数化时,给每一个值设置一个变量名,意义不大
- name:给被@pytest.fixture 标记的方法取一个别名,当去了别名后,原来的名称不能使用
三,通过conftest.py 和pytest.fixture()结合使用实现***全局***的前置应用(比如:项目的全局登陆,模块的全局处理)
1,conftest.py 文件时单独存放的一个夹具配置文件,名称不能更改
2, 用处可以在不同的py文件中使用同一个fixture函数
3,原则上conftest.py 需要和运行的用例放再同一层,并且不需要做任何import 操作。
总结:
setup/teardown, setup_class/teardown_class 作用于所有用例或者所有的类
@pytest.fixtrue(), 它的作用时既可以部分,也可以全部前后置
conftest.py 和@pytest.fixtrue()结合使用,作用域全局的前后置
四.断言
assert 1==2
五 . pytest 结合allure-pytest 插件生成allure测试报告
pytest-html
allure-pytest
-
生成json格式的临时报告
--alluredir ./temp
-
生成allure报告
os.system('allure generate ./temp -o ./report --clean') allure generate 命令,固定的 ./temp 临时的json 格式报告的路径 -o 输出output ./report 生成allure 报告的路径 --clean 清空./report 路径原来的报告