pytest 框架实现一些前后置(固件,夹具)的处理,常用三种。
一、setup/teardown,setup_class/teardown_class
为什么需要这些功能 比如: web自动化执行用例之前, 需要打开浏览器, 执行之后需要关闭浏览器
import pytest
def setup():
print('\n在执行测试用例之前初始化的代码: 打开浏览器')
def setup_class():
print('\n在执行每个类之前的初始化工作')
@pytest.mark.smoke
def test_html_001():
print('这是一个html的测试函数')
def test_html_002():
print('这是一个html_002的测试函数')
def teardown():
print('\n在执行测试用例之后的扫尾的代码 关闭浏览器')
def teardown_class():
print('\n在每个类执行后的扫尾的工作: 比如销毁日志,销毁链接')
二、使用fixture装饰器来实现部分用例的前后置
装饰器 @pytest.fixture(scope=’’, name=’’, params=’’, autouse=’’, ids=’’)
- scope表示的是被@pytest.fixture标记的方法的作用域,默认为function, 还有class, module, package/session
- params: 参数化
- autouse: 自动使用,默认为false
- ids: 当使用params参数化的时候,给每一个值设置一个变量
- name: 给表示的是被@pytest.fixture标记的方法取一个别名(当取了别名之后, 那么原来的名称就不用了)
import pytest
@pytest.fixture(scope='function', name='project', params=['成龙', '甄子丹', '李连杰'], autouse=True, ids=['cl', 'zzd', 'llj'])
def my_fixture_01(request):
print('这是前后置的方法,可以实现部分以及全部用例的前后置')
yield request.param
print('只是后置的方法')
class TestFixture:
def test_fixture(self):
print('这是一个test_fixture的测试函数')
def test_fixture_001(project):
print('这是一个test_fixture_001的测试函数 '+ str(my_fixture_01))
执行结果
src/html_web/test_fixture.py::TestFixture::test_fixture[cl] 这是前后置的方法,可以实现部分以及全部用例的前后置
这是一个test_fixture的测试函数
PASSED只是后置的方法
src/html_web/test_fixture.py::TestFixture::test_fixture[zzd] 这是前后置的方法,可以实现部分以及全部用例的前后置
这是一个test_fixture的测试函数
PASSED只是后置的方法
src/html_web/test_fixture.py::TestFixture::test_fixture[llj] 这是前后置的方法,可以实现部分以及全部用例的前后置
这是一个test_fixture的测试函数
PASSED只是后置的方法
src/html_web/test_fixture.py::test_fixture_001[cl] 这是前后置的方法,可以实现部分以及全部用例的前后置
这是一个test_fixture_001的测试函数 <function my_fixture_01 at 0x7fb1d92e9170>
PASSED只是后置的方法
src/html_web/test_fixture.py::test_fixture_001[zzd] 这是前后置的方法,可以实现部分以及全部用例的前后置
这是一个test_fixture_001的测试函数 <function my_fixture_01 at 0x7fb1d92e9170>
PASSED只是后置的方法
src/html_web/test_fixture.py::test_fixture_001[llj] 这是前后置的方法,可以实现部分以及全部用例的前后置
这是一个test_fixture_001的测试函数 <function my_fixture_01 at 0x7fb1d92e9170>
PASSED只是后置的方法
=============================================================== 6 passed, 9 deselected in 0.04s ===============================================================
三、通过conftest.py和@pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登陆,模块的全局处理)
- conftest.py文件是单独存放的一个家具配置文件,名称是不能改的
- 用处可以在不同的py文件中使用fixture函数
- conftest.py为全局配置,原则上需要和运行的用例放在同一层,并且不做任何import倒入的操作
总结: setup/teardown setup_class/teardown_clss它是作用于所有的用例或者类 @pytest.fixture() 它的作用是既可以部分也可以全部前后置 conftest.py 和 @pytest.fixtrue()结合使用,作用于全局的前后置
四、pytest结合allure-pytest插件生成allure测试报告
- 下载,解压,配置path路径
https:github.com/allure-framework/allure2/releases path路径配置 验证: allure -version 问题: dos可以验证但是pycharm验证失败,需重启pycharm
- 生成allure报告: os.system(‘allure generate ./temp -o ./report --clean’)
- allure generate 命令,固定写法
- ./temp 临时的json格式报告的路径
- -o 输出output
- ./report 生成的allure报告的路径
- –clean 清空./report 路径原来的报告
|