pytest和ddt

参考链接: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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值