pytest、allure学习-1

黄鹏宇 127 2023-10-25

〇、简介

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

image-1698216401087

image-1698216668274

二、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创建的

image-1698216629873

三、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