《pytest测试实战》新手友好版——第四章 参数化测试

第四章 参数化测试

    一不小心就鸽了一年多,真是抱歉了。这章咱们来学习下参数化测试,很多时候,咱们测试一个功能,他的处理逻辑是固定的,但是需要验证各种不同的入参情况下会输出啥,但是总不能每个入参就写一条用例吧,那样光写用例都占满了测试时间了,为了解决这个问题,我们就可以使用参数化的方法。

    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

 

 

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 好的,下面是一个简单的 pytest 测试实战: 假设我们有一个函数,接收两个数字参数并返回它们的乘积: ```python def multiply(a, b): return a * b ``` 我们可以使用 pytest 来编写测试用例,确保函数的行为符合预期。首先,我们需要创建一个名为 `test_multiply.py` 的文件,在其中编写测试用例。 ```python # test_multiply.py from multiply import multiply def test_multiply_positive_numbers(): result = multiply(2, 3) assert result == 6 def test_multiply_negative_numbers(): result = multiply(-2, -3) assert result == 6 def test_multiply_zero(): result = multiply(0, 5) assert result == 0 result = multiply(5, 0) assert result == 0 ``` 在这个测试用例中,我们创建了三个测试函数,分别测试两个正数相乘、两个负数相乘以及其中一个数为零的情况。使用 `assert` 关键字来断言函数的返回值是否符合预期。 运行测试用例,可以使用以下命令: ``` pytest test_multiply.py ``` 如果所有测试用例都通过,pytest 将输出以下内容: ``` ============================= test session starts ============================= platform linux -- Python 3.8.5, pytest-6.2.1, py-1.10.0, pluggy-0.13.1 rootdir: /path/to/test_directory plugins: anyio-2.2.0 collected 3 items test_multiply.py ... [100%] ============================== 3 passed in 0.01s ============================== ``` 如果有任何测试用例失败,pytest 将输出详细的错误信息,帮助您快速定位问题。 这就是一个简单的 pytest 测试实战,它可以帮助您编写可靠的测试用例以确保代码的正确性。 ### 回答2: pytest是一种Python测试框架,它提供了一系列的方法和工具来编写和执行测试用例。pytest测试实战是指在实际项目中使用pytest进行测试的过程。 首先,我们可以使用pytest编写测试脚本。测试脚本可以包含多个测试用例,每个测试用例是一个以test_开头的函数。我们可以使用assert语句来断言测试的结果是否符合预期。pytest提供了丰富的断言方法,可以方便地进行各种断言操作。 其次,我们可以使用pytest的fixture功能来创建和管理测试的前置条件。fixture可以用来模拟测试环境和数据,使测试用例的编写更加简洁和灵活。我们可以在测试用例中使用fixture来获取测试数据或者创建测试环境,从而减少重复的代码。 另外,pytest还提供了参数化测试的功能,可以通过参数化的方式运行同一个测试用例的多组测试数据。这样可以提高测试覆盖率,减少测试代码的编写量。 pytest还支持多线程和分布式测试,可以实现并发执行测试用例,提高测试效率。同时,pytest还提供了详细的测试报告和日志功能,方便我们查看和分析测试结果。 最后,使用pytest进行测试实战时,我们可以根据项目的需要进行自定义的插件开发。pytest提供了丰富的插件接口,可以轻松扩展pytest的功能和特性。 总而言之,pytest测试实战是指在实际项目中使用pytest进行测试的过程。通过使用pytest,我们可以简洁高效地编写和执行测试用例,提高测试效率,并且可以根据项目的需要进行自定义的插件开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值