pytest参数化

pytest是一个单元测试框架

什么是单元测试

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。而这个最小可测单元,指的就是代码中的函数/方法。

由此我们推出第二个问题:函数/方法的入口和出口是什么

函数/方法的入口是内部的参数列表,出口是return值。

需求知道了,然后我们要做什么?

我们需要提供参数列表来尽可能的穷举出无限种可能情况,来确认他的返回值是否为预期情况。

这个为测试函数/方法提供多个参数的过程,就叫做参数化。

我认为单元测试从微观上来说的核心就是参数化入参,以及断言参数化。

至于setup 和teardown只是一些基础配置类

而pytest 本身就支持这些,而unittest本身并不支持数据的参数化,需要借助第三方工具DDT来实现参数化。

需求:函数 equivalent(a,b) 需要验证参数a,b之和是否为10 。

方案:为了不更改函数名称,我们保留原函数名和参数列表,在外层包括一层函数def test_add2(a,b)。因为pytest只能检测test开头或者结尾的函数。

参数化:

  1.参数化在当前类:

      在测试类内,添加装饰器@pytest.mark.parametrize('形参列表',[(第一组参数1,第一组参数2..),(第二组)参数1,第一组参数2)]      

  例子:

@pytest.mark.parametrize('a,b',[(5,5),(6,4),(3,7),(8,2)
                                ])

  2.外部文件参数化。参照下面的代码:

        直接在外部文件定义变量,写入多组参数列表;内部引用时,from 。import  * 导入 ,就可以使用

断言:

pytest直接使用assert 表达式 ,可以自定义表达式。

       ,同时可以声明断言提示信息。


outconfig.py  #外部参数化文件 
dataout=[(1,4),(7,8)]        




test_para.py  #测试类文件
import  pytest     #导入参数化包
from    case.test.import *    #导入参数化文件,文件内参数

@pytest.mark.parametrize('a,b',dataout)     #参数化:指定参数变量和值
def test_add2(a,b):
    def equivalent(a,b):
        return  a+b
    assert 10 == equivalent(a,b) ,"%s  +%s 不等于10 " %(a,b)  
                   # 自定义断言结构        #   断言失败提示信息

 执行结果:

ptest.py .F
AssertionError: 7  +8 不等于10 
10 != 15

  执行文件: ptest.py 

  执行结果 : . F   点代表执行成功;F代表执行失败fail

  执行成功:不显示断言信息

 执行失败:  显示assert 逗号部分的信息、 以及断言的前后内容结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值