pytest3--参数化

本文介绍了在pytest中如何利用参数化避免逻辑重复,通过@pytest.mark.parametrize装饰器定义多组测试用例数据,以及如何从Excel文件中读取数据进行测试。讲解了基本用法、用例数据和测试函数分离,以及使用openpyxl库处理Excel测试数据的步骤。
摘要由CSDN通过智能技术生成

参数化的使用场景:
对于一个测试点,设计多条逻辑相似,只是输入数据和预期结果不同的用例时,如果每条用例都单独编写测试函数,会产生大量逻辑重复的代码。怎么办?==》使用“参数化”的方式编写一条测试函数,提供一组(多条)测试用例数据,达到只定义一个测试函数,但是却可以被作为多条用例执行多次的效果

如何在pytest中实现参数化(语法规则)

        。使用@pytest.mark.parametrize装饰器实现参数化

        。在定义测试函数时,在测试函数头顶上使用parametrize装饰器

        。这时就可以用“参数化”的方式只编写一个测试板书来对应多天用例


参数化的用法:
       ==》1.使用@pytest.mark.parametrize为测试函数定义“多组”用例数据。

                (1)每组用例数据中,可以使用多个值,参数的个数对应“”值’的个数。

                (2)“参数名字字符串”必须和测试函数的形参对应
       ==》2.用例数据和测试函数分离—将用例数据存放在独立的python文件中
       ==》3.更彻底的分离—将用例数据定义在外部的Excel(/xlsx)文件中

1.1基本用法如下图:只有一个参数:

多个参数:

多个参数:为了整洁,使用字典数据。上面的用法产生一个问题,如果形参个数很多,写出来就很乱。这时可以采用“一个形参搭配字典数据”的方法,如下图

2.用例数据和测试函数分离—将用例数据存放在独立的python文件中

目的:测试函数和测试数据分开存放。

步骤:1.创建独立的testdata数据文件夹,变量拿出来。2.测试函数模块import,然后使用数据。

3.更彻底的分离—将用例数据定义在外部的Excel(/xlsx)文件中

目的:使用openpyxl第三方包来读取Excel文件(.xlsx格式的)文件的测试数据,传给测试函数使用。

测试数据文件“仪表测试用例.xlsx”存放在\testdata下,表格如下

步骤:

1.需要先安装,使用pip命令--pip install - i Simple IndexSimple Index

2.根据sheet页名字,和第一列的关键字名字读取测试数据。

        函数传入2个参数,sheet_name是sheet页标签名,例如上图的“量表”页。function_name是“用例编号”列的用例编号。函数会找到该sheet页下,包含用例名字的测试数据。返回的数据是一个大列表,里面包含测试数据的字典数据。

from os.path import dirname
from openpyxl import load_workbook

def load_case_data(sheet_name, function_name):
    """从仪表测试用例的excel文件中,读取指定“表"中的指定”功能"的用例数据"""
    case_datas = []  # 建一个列表用来装测试数据
    wb = load_workbook(dirname(__file__)+"/仪表测试用例.xlsx") #加载Excel文件,返回文件对象:wb
    # 遍历wb文件中的指定sheet表中的所有值:逐行遍历,每行数据是一个元祖(元祖中的每个元素就是一个单元格的值)
    for row in wb[sheet_name].values:
        if function_name in row[0]: #仅在当前行的第一列(“用例编号”列)的值包含指定的"功能“名时
            print(row) # ('IP_VehicleSpeed_01', '测试时速信号:0', 0, '0km/h')
            data = {"case_id":row[0],
                    "title": row[1],
                    "signal": row[2],
                    "expected": row[3]}
            case_datas.append(data)
    return case_datas

需要解释的是:

为了使代码在不同的电脑都能运行,所以需要找到本文件在任何一台电脑上的绝对路径。

__file__表示当前文件的绝对路径。

dirname是取文件所在的目录

类推==》dirname(__file__)就表示当前文件的目录绝对路径。再拼接excel文件名,就得到了excel文件在任意电脑的绝对路径。

运行示例如下:

3.在测试函数模块,导入读取数据模块,并使用读取的测试数据执行测试函数

还剩一个pytest-html插件的使用,明天续上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值