前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >pytest文档74-参数化parametrize加marks标记(pytest.param)

pytest文档74-参数化parametrize加marks标记(pytest.param)

作者头像
上海-悠悠
发布2021-01-18 10:33:28
发布2021-01-18 10:33:28
78600
代码可运行
举报
运行总次数:0
代码可运行

前言

pytest 使用 parametrize 参数化的时候,有多组测试数据,需要对其中的一些测试数据加标记跳过,可以用pytest.param实现。

pytest.param

先看下 pytest.param 源码,可以传三个参数

  • param values :按顺序传参数集值的变量args
  • keyword marks : marks关键字参数,要应用于此参数集的单个标记或标记列表。
  • keyword str id: id字符串关键字参数,测试用例的id属性
代码语言:javascript
代码运行次数:0
运行
复制
def param(*values, **kw):
    """Specify a parameter in `pytest.mark.parametrize`_ calls or
    :ref:`parametrized fixtures <fixture-parametrize-marks>`.

    .. code-block:: python

        @pytest.mark.parametrize("test_input,expected", [
            ("3+5", 8),
            pytest.param("6*9", 42, marks=pytest.mark.xfail),
        ])
        def test_eval(test_input, expected):
            assert eval(test_input) == expected

    :param values: variable args of the values of the parameter set, in order.
    :keyword marks: a single mark or a list of marks to be applied to this parameter set.
    :keyword str id: the id to attribute to this parameter set.
    """
    return ParameterSet.param(*values, **kw)

使用示例

代码语言:javascript
代码运行次数:0
运行
复制
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

@pytest.mark.parametrize("test_input,expected", [
    ("3+5", 8),
    pytest.param("6*9", 42, marks=pytest.mark.xfail),
])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

运行结果:1 passed, 1 xfailed in 0.08 seconds

skip跳过用例

上面的案例是标记xfail,想标记skip跳过用例也是可以的

代码语言:javascript
代码运行次数:0
运行
复制
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

@pytest.mark.parametrize("user,psw",
                         [("yoyo1", "123456"),
                          ("yoyo2", "123456"),
                          pytest.param("yoyo3", "123456", marks=pytest.mark.skip)])
def test_login(user, psw):
    print(user + " : " + psw)
    assert 1 == 1

运行结果:2 passed, 1 skipped in 0.03 seconds

上面的2个参数也可以用pytest.param格式

代码语言:javascript
代码运行次数:0
运行
复制
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

@pytest.mark.parametrize("user,psw",
                         [pytest.param("yoyo1", "123456"),
                          pytest.param("yoyo2", "123456"),
                          pytest.param("yoyo3", "123456", marks=pytest.mark.skip)])
def test_login1(user, psw):
    print(user + " : " + psw)
    assert 1 == 1

id参数

id参数是给用例添加标题内容,没加id参数的时候,用例会默认拿请求的参数当用例标题

添加id参数

代码语言:javascript
代码运行次数:0
运行
复制
import pytest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

@pytest.mark.parametrize("user,psw",
                         [pytest.param("yoyo1", "123456", id="test case1: yoyo1"),
                          pytest.param("yoyo2", "123456", id="test case2: yoyo2"),
                          pytest.param("yoyo3", "123456", marks=pytest.mark.skip, id="test case3: yoyo3")])
def test_login1(user, psw):
    print(user + " : " + psw)
    assert 1 == 1

运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • pytest.param
  • skip跳过用例
  • id参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档