〇、简介
https://allurereport.org/docs
https://docs.pytest.org/en/7.4.x/
一、跟allure相关的
中文乱码的话,在pytest.ini加入
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True
@pytest.mark.gpt
@allure.feature("商品模块")
@allure.epic("xx在线购物平台接口测试")
class TestProductManagement:
# 这个放在
# trivial”, “minor”, “normal”, “critical”, and “blocker”
@allure.severity(allure.severity_level.BLOCKER)
@allure.title("添加商品到购物车")
@allure.story("成功添加商品到购物车")
def test_add_to_cart_success(self):
assert True
@allure.severity(allure.severity_level.TRIVIAL)
@allure.title("添加商品到购物车")
@allure.story("添加无效商品到购物车")
def test_add_to_cart_invalid_product(self):
assert 1 == 10
@allure.severity(allure.severity_level.MINOR)
@pytest.mark.priority_high
@allure.title("添加商品到购物车")
@allure.story("添加大量商品到购物车")
def test_add_mass_to_cart_invalid_product(self):
assert 1 == 10
二、pytest.ini
pytest.ini是pytest的全局配置文件,一般放在项目的根目录下,用于改变pytest的运行方式,设置配置信息,读取后按照配置的内容去运行
常见参数
- addopts
设置自定义执行参数
[pytest]
addopts = -v -s --alluredir=./allure-results
- testpaths
设置执行路径
[pytest]
testpaths = ./testcase
- markers
[pytest]
markers=smoke: 冒烟测试
test:临时
gpt: chatgpt创建的
三、marker
四、常用命令或插件
0. allure
1. 指定顺序
- 插件:pytest-order
- 装饰器 @pytest.mark.order(1)
2. 并行测试
- 插件: pytest-xdist
pytest -n=2
testcase/test_main.py::test_1
testcase/test_main.py::test_2
[gw1] PASSED testcase/test_main.py::test_1
[gw0] PASSED testcase/test_main.py::test_2
3. 生成测试报告
- 插件:pytest-html
./venv/Scripts/activate
pytest --html=./report/report.html
可以把css样式合并到html里,创建一个独立的报告。
./venv/Scripts/activate
pytest --html=./report/report.html --self-contained-html
4. 前置/后置
可以使用 setup 和 teardown 来实现前置和后置方法,同时也可以使用装饰器 Fixture 来实现。主要用来做数据准备或者数据清理使用。
- 前后置分为:方法前后置,类前后置,模块前后置
Fixture实现
def fixture(scope="function", params=None, autouse=False, ids=None, name=None)
参数解释
1. scope
表示装饰器函数的作用域,相当于是方法的级别。可以传递的参数有:“function”, “class”, “module”, “package” or “session”
- function : 默认级别,即 方法级别,在测试方法执行前执行,
- class :类级别, 在测试类中所有方法执行之前执行
- module: 模块级别
- session
2. params
一个可选的参数列表,用于做Fixture的参数化。可将数据提供给其他的Fixture,或者所有测试使用它 。
有几个参数,就会执行几次。
@pytest.fixture(params=['apple', 'banana'])
def fruit(request):
print('2.1 方法前置')
yield request.param
print("2.2 方法后置")
def test_fruit(fruit):
print("\n笔者今天吃{}".format(fruit))
assert True
3. autouse
为True时,自动调用 Fixture的方法
为False时,需要如下使用
@pytest.fixture(scope='function', autouse=False)
def func2():
print('2.1 方法前置')
yield
print("2.2 方法后置")
def test_1(func2):
print("1. 测试方法test1")
4. ids
一个字符串id的列表,即当使用params参数化时,给每一个值设置一个变量名。如果没有提供ID,params将自动生成ID 。
5. name
用于给方法起别名, 调用的时候使用别名调用。
5. 重试
pytest-rerunfailures:实现重新运行失败用例
6. 随机排序测试
- 插件:pytest-randomly
7. 参数化插件
- 插件:pytest-parameterize
@pytest.mark.parametrize("test_input, expected", [
("3+4", 7),
("2+5", 7),
("6*9", 54)
])
def test_parameterize_eval(test_input, expected):
print(f"测试数据{test_input}, 预期结果{expected}")
assert eval(test_input) == expected
8. 显示色彩和进度条(?这个没生效)
创建 pytest-sugar
安装插件即可生效:pip install pytest-sugar