参考链接:https://blog.csdn.net/qq_36502272/article/details/100986069
什么是ddt?ddt是一种测试思想,意为数据驱动测试,在unittest框架中我们也用到了ddt库,能简化我们的代码。但是pytest却不能使用ddt库,这让人很烦恼。但是,pytest毕竟是这么多人的选择,不可能没有办法将测试数据参数化的。
参数化测试数据就需要用到@pytest.mark.parametrize()装饰器了,我们只需要传递两个参数给装饰器,参数1是一个字符串,里面是你的测试方法需要传递的形参,需要用逗号隔开;参数2则是测试数据了,是一个list或者couple,里面可能嵌套list或者couple
实例:
@pytest.mark.parametrize("name,age",[[1,1],[1,2],[1,1],[3,2],[1,1],[1,3]])
def test(name,age,country='china'):
print(name,age,country)
assert age==name
这里有几个点要注意:
1.装饰器中第一个参数中的形参个数要和第二个参数中每个值中的len相等,不然会报错
2.装饰器第一个参数中的名要和测试方法的形参名一致,不然会报错
3.测试方法的形参数量不一定和装饰器方法中的长度一致。
#使用内置的mark.xfail标记为失败的用例就不运行了,直接跳过显示xfailed
@pytest.mark.parametrize("user,pwd",[("18221124104",111111),pytest.param("18200000000",111111,marks=pytest.mark.xfail)])
def test(user,pwd):
print(user,pwd)
assert user == "18221124104"
assert pwd== 111111
若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器
@pytest.mark.parametrize("x", [0, 1])
@pytest.mark.parametrize("y", [2, 3])
def test_foo(x, y):
print("测试数据组合:x->%s, y->%s" % (x, y))
--------------------------------------------------------------
test_login.py::test_foo[2-0] PASSED [ 25%]测试数据组合:x->0, y->2
test_login.py::test_foo[2-1] PASSED [ 50%]测试数据组合:x->1, y->2
test_login.py::test_foo[3-0] PASSED [ 75%]测试数据组合:x->0, y->3
test_login.py::test_foo[3-1] PASSED [100%]测试数据组合:x->1, y->3