Pytest框架实现一些前后置(固件、夹具)的处理,常用三种。
为什么需要这些功能?
比如:web自动化的打开浏览器、关闭浏览器。
import pytest
def test_fi01():
print("测试函数01")
assert 1 == 2
class TestLogin:
age = 18
def setup_class(self):
print("\n在每个类执行前的初始化工作:比如:创建日志对象、创建数据库连接、创建接口请求对象")
def setup(self):
print("\n执行测试用例之前初始化:打开浏览器,加载网页")
# 标记执行顺序
@pytest.mark.run(order=1)
def test_01(self):
print("\n测试方法01")
# 标记成冒烟用例
@pytest.mark.smoke
def test_02(self):
print("\n测试方法02")
# 标记成模块用例
@pytest.mark.login
def test_03(self):
print("\n测试方法03")
# 标记成无条件跳过
@pytest.mark.skip(reason="还没调试好")
def test_04(self):
print("\n测试方法04")
# 标记成有条件跳过
@pytest.mark.skipif(age >= 18, reason="已成年,不执行")
def test_05(self):
print("\n测试方法05")
def teardown(self):
print("\n执行测试用例后的扫尾工作:关闭浏览器")
def teardown_class(self):
print("\n在每个类执行后的扫尾工作:比如:销毁日志对象、断开数据库连接、销毁接口请求对象")
装饰器
@pytest.fixture(scope="", params="", autouse=True, ids="", name="")
参数解析:
import pytest
@pytest.fixture(scope="function", params=["Tom", "Jack", "Jerry"], ids=["t", "ja", "je"], name="abc")
def my_fixture(request):
print("\nfixture:这是前置的方法")
yield request.param
print("\nfixture:这是后置的方法")
class TestUser:
def test_06(self, abc):
print("\n测试方法06", abc)
def test_07(self):
print("\n测试方法07")
class TestUser2:
def test_user2_01(self):
print("\n测试方法test_user2_01")
执行效果:
============================= test session starts =============================
collecting ... collected 5 items
test_useradd.py::TestUser::test_06[t]
fixture:这是前置的方法
测试方法06 Tom
PASSED
fixture:这是后置的方法
test_useradd.py::TestUser::test_06[ja]
fixture:这是前置的方法
测试方法06 Jack
PASSED
fixture:这是后置的方法
test_useradd.py::TestUser::test_06[je]
fixture:这是前置的方法
测试方法06 Jerry
PASSED
fixture:这是后置的方法
test_useradd.py::TestUser::test_07
测试方法07
PASSED
test_useradd.py::TestUser2::test_user2_01
测试方法test_user2_01
PASSED
============================== 5 passed in 0.03s ==============================
上面两种方式作用只能生效在同一个模块下,如何实现跨模块的前后置呢?
# 全局前后置方法
import pytest
@pytest.fixture(scope="function")
def all_fixture():
print("\nfixture:全局前置")
yield
print("\nfixture:全局后置")
assert 1 == 2
--alluredir ./temp
os.system("allure generate ./temp -o ./reports --clean")
报告展示:
原因:allure报告需要用allure命令渲染之后才能显示效果。
解决办法:使用命令 allure open ./reports