ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pytest08--数据驱动测试

2021-11-13 09:33:03  阅读:143  来源: 互联网

标签:case __ -- 用例 expect 测试 测试函数 Pytest08


数据驱动测试

@pytest.mark.parametrize("参数1 , 参数2" ,
    [
         ['数据11' , '数据12' ] ,
         ['数据21' , '数据22' ]
    ] )
    def  测试函数名(参数1,参数2):
        测试代码

测试函数+循环执行用例

  1. pytest认为,测试函数只执行一次,就是一次测试;只要循环在函数内部,执行多少次循环都是一个测试
  2. assert一旦断言失败,后续代码将不再执行,所以当断言失败时,退出本次测试函数执行,由于只有一个测试函数,所以整个测试结束
  3. 至于循环调用测试函数,pytest不支持/不认可

参数化的含义

  1. 参数化也叫数据驱动测试:代码只编写一份,使用不同的测试数据去执行这份代码,这种测试方式叫做数据驱动测试
    ①将用例数据读到程序中,传递给测试函数或测试方法的形参,以进行测试,故名参数化

编写一个测试模块ce_calc3.py

定义2个测试函数,分别测试Calc类的add和sub方法,使用循环执行多个手工测试用例

全局变量

def quanju():
    global a  # 全局变量,在整个模块中所有函数里都能使用
    a = 34

def out():
    print(a)
quanju()
out()
if __name__ == '__main__':
    print(a)

使用for循环执行测试用例

# 参数化:对比在测试函数中使用循环实现执行大量用例
from calc import Calc
import pytest


# 测试固件:每次执行测试之前都要创建一个Calc对象
@pytest.fixture(autouse=True)
def create_calc_obj():
    global c  # 参考上一段代码中的全局变量的基础只是
    c = Calc()


cases1 = [[1, 2, 3], [1, 0, 1], [-1, 2, 1], [-1, -2, -3]]  # 加法的用例


# 测试加法
def test_add():
    # 运用for循环方式编写
    for case in cases1:
        a, b, expect = case
        actual = c.add(a, b)
        assert actual == expect, f'加法用例{case}测试失败==预期:{expect}==实际:{actual}'
        print(f'加法用例{case}执行完毕')


cases2 = [[1, 0, 1], [1, 2, -1], [3, 2, 1], [2, 3, -1]] # 减法用例


# 测试减法
def test_sub():
    # 运用for循环方式编写
    for case in cases2:
        a, b, expect = case
        actual = c.sub(a, b)
        # assert actual == expect, f'减法用例{case}测试失败==预期:{expect}==实际:{actual}'# 出现错误后面不执行
        pytest.assume(actual == expect, f'减法用例{case}测试失败==预期:{expect}==实际:{actual}')
        print(f'减法用例{case}执行完毕')


if __name__ == '__main__':
    pytest.main(['-v', '--tb=short', 'demo01.py'])

标签:case,__,--,用例,expect,测试,测试函数,Pytest08
来源: https://www.cnblogs.com/sean-test/p/15547272.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有