转载地址:https://www.cnblogs.com/yoyoketang/p/9455276.html
前言
pytest.mark.parametrize装饰器可以实现测试用例参数化。
parametrizing
1.这里是一个实现检查一定的输入和期望输出测试功能的典型例子
# content of test_expectation.py # coding:utf-8 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 @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 ===========================