pytest文档9-参数化parametrize

前言

pytest.mark.parametrize装饰器可以实现测试用例参数化。

parametrizing

1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子

# content of test_expectation.py # coding:utf-8 # ** 作者:上海-悠悠 QQ交流群:588402570** import pytest @pytest.mark.parametrize("test_input,expected",                         [ ("3+5", 8),                           ("2+4", 6),                           ("6 * 9", 42),                         ]) def test_eval(test_input, expected):    assert eval(test_input) == expected if __name__ == "__main__":    pytest.main(["-s", "test_canshu1.py"])

运行结果

================================== FAILURES =================================== _____________________________ test_eval[6 * 9-42] _____________________________ test_input = '6 * 9', expected = 42    @pytest.mark.parametrize("test_input,expected",                             [ ("3+5", 8),                               ("2+4", 6),                               ("6 * 9", 42),                             ])    def test_eval(test_input, expected): >       assert eval(test_input) == expected E       AssertionError: assert 54 == 42 E        +  where 54 = eval('6 * 9') test_canshu1.py:11: AssertionError ===================== 1 failed, 2 passed in 1.98 seconds ======================

在这个例子中设计的,只有一条输入/输出值的简单测试功能。和往常一样

函数的参数,你可以在运行结果看到在输入和输出值

2.它也可以标记单个测试实例在参数化,例如使用内置的mark.xfail

# content of test_expectation.py import pytest # ** 作者:上海-悠悠 QQ交流群:588402570** @pytest.mark.parametrize("test_input,expected", [                        ("3+5", 8),                        ("2+4", 6),                        pytest.param("6 * 9", 42, marks=pytest.mark.xfail),                        ]) def test_eval(test_input, expected):    print("-------开始用例------")    assert eval(test_input) == expected if __name__ == "__main__":    pytest.main(["-s", "test_canshu1.py"])

运行结果:

test_canshu1.py -------开始用例------ .-------开始用例------ .-------开始用例------ x ===================== 2 passed, 1 xfailed in 1.84 seconds =====================

标记为失败的用例就不运行了,直接跳过显示xfailed

参数组合

1.若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器

import pytest @pytest.mark.parametrize("x", [0, 1]) @pytest.mark.parametrize("y", [2, 3]) def test_foo(x, y):    print("测试数据组合:x->%s, y->%s" % (x, y)) if __name__ == "__main__":    pytest.main(["-s", "test_canshu1.py"])

运行结果

test_canshu1.py 测试数据组合:x->0, y->2 .测试数据组合:x->1, y->2 .测试数据组合:x->0, y->3 .测试数据组合:x->1, y->3 . ========================== 4 passed in 1.75 seconds ===========================

这将运行测试,参数设置为x=0/y=2,x=1/y=2,x=0/y=3,x=1/y=3组合参数。

作者:上海-悠悠 QQ交流群:588402570

《python自动化selenium+appium》8月11号开学!(2个月2000,包教会)

(0)

相关推荐

  • python新手用pyinstaller -F - w test.py打包后的exe无法运行

    python新手用pyinstaller -F - w test.py打包后的exe无法运行 置顶 风很大很大 2020-03-15 09:46:46  1662  收藏 3 分类专栏: 笔记 版权 ...

  • pytest文档42-fixture参数化params

    前言 参数化是自动化测试里面必须掌握的一个知识点,用过 unittest 框架的小伙伴都知道使用 ddt 来实现测试用例的参数化. pytest 测试用例里面对应的参数可以用 parametrize ...

  • pytest文档39-参数化(parametrize)结合allure.title()生成不同标题报告

    前言 pytest的参数化(parametrize)可以实现只需维护测试数据,就能生成不同的测试用例目的.可以在参数化的时候加 ids 参数对每个用例说明使用场景. 最终我们希望在 allure 报告 ...

  • pytest文档67-在 pytest.mark.parametrize 中使用 fixture

    前言 测试用例参数化的时候,使用 pytest.mark.parametrize 参数化传测试数据,如果我们想引用前面 不同fixture 返回的数据当测试用例的入参,目前没好的解决办法. 可以用fi ...

  • pytest文档69-Hook函数之参数化pytest_generate_tests

    前言 pytest 实现参数化有三种方式 pytest.fixture() 使用 fixture 传 params 参数实现参数化 @ pytest.mark.parametrize 允许在测试函数或 ...

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

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

  • pytest文档1-环境准备与入门

    前言 首先说下为什么要学pytest,在此之前相信大家已经掌握了python里面的unittest单元测试框架,那再学一个框架肯定是需要学习时间成本的. 刚开始我的内心是拒绝的,我想我用unittes ...

  • pytest文档2-用例运行规则

    用例设计原则 文件名以test_*.py文件和*_test.py 以test_开头的函数 以Test开头的类 以test_开头的方法 所有的包pakege必须要有__init__.py文件 help帮 ...

  • pytest文档3-pycharm运行pytest

    前言 上一篇pytest文档2-用例运行规则已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多 写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻 ...

  • pytest文档5-fixture之conftest.py

    前言 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录. ...