第四章 参数化测试
一不小心就鸽了一年多,真是抱歉了。这章咱们来学习下参数化测试,很多时候,咱们测试一个功能,他的处理逻辑是固定的,但是需要验证各种不同的入参情况下会输出啥,但是总不能每个入参就写一条用例吧,那样光写用例都占满了测试时间了,为了解决这个问题,我们就可以使用参数化的方法。
pytest参数化的方法是使用装饰器,就是和之前给用例做标记的方法类似,添加@pytest.mark.parametrize(参数名,参数值)。还是直接举例子吧:
import pytest
@pytest.mark.parametrize("name", ["Mark", "Joe"])
def test_use_param(name):
assert name == "Mark"
上述用例检查入参是否是字符串Mark,参数名为name,枚举值为Mark和Joe,虽然只有一个用例函数,但是实际执行会分别代入不同的参数,执行2次,结果如下:
可以看到输出的结果,不同的用例还贴心地用了参数的内容来作为了区分。
可能这时候你又要说了:“我不止一个参数啊,多个参数也可以么?要怎么操作?”,答案当然是可以的,一种方法是这样:
import pytest
@pytest.mark.parametrize("name", ["Mark", "Joe"])
@pytest.mark.parametrize("age", [18, 20])
def test_use_param(name, age):
assert name == "Mark" and age == 20
执行结果:
还有一种方法是这样:
import pytest
@pytest.mark.parametrize("name, age", [("Mark", 18), ("Joe", 20)])
def test_use_param(name, age):
assert name == "Mark" and age == 18
执行结果:
可以看到,第一种结果会自动帮你对多个入参进行组合遍历,而第二种则需要你自己搭配入参,实际工作中使用哪种可以自己根据需要确定。
当然,参数组合比较多的情况下,还是建议将枚举值移出装饰器,代码看起来会简洁一点,例如:
import pytest
name_age = [("Mark", 18), ("Joe", 20)]
@pytest.mark.parametrize("name, age", name_age)
def test_use_param(name, age):
assert name == "Mark" and age == 18