接口自动化数据源问题

1、常见数据源类型
数据源说的是数据的源头,数据来自于哪里。在实现接口自动化测试的过程中,测试数据来源的问题是我们需要去解决的一个重要问题,并且,选择什么样的数据源可能会直接影响到我们测试框架的设计难度,执行效率和扩展性。

那么在自动化测试的实现过程中,可以作为数据源的技术有哪些呢?

  • Excel文件:管理方便,操作性强,增加一行一列都非常简单
  • CSV文件:管理方便,操作性强,增加一行一列都非常简单
  • 数据库:相对来说没那么容易维护,表设计更复杂,修改表结构都需要通过SQL脚本执行,并且需要自己去实现一套数据读写的api,因此操作性比不上Excel和csv这样的文件管理。

总结:在选取数据源时,尽量考虑Excel用例,因为我们平时已经习惯了用Excel来编写管理用例,相对来说也更简单,当然也不是说没有公司选择数据库来管理用例和测试数据,但是可能设计成本,维护成本更高。如果我们选择了用Excel用例来管理测试用例,那么剩下的问题就是使用什么样的技术去解析用例获取测试数据了。

2、openpyxl模块完成Excel数据读写
读写Excel的技术很多,我们这里选择openpyxl的原因是因为它的实现已经非常完整,而且api也比较友好易于理解。

openpyxl常用的模块有2个:load_workbook用来读取Excel里面的数据:
workbook用来新建工作簿以及写入数据到Excel中去,openpyxl常用api函数整理如下:

  • wb = Workbook(workbook_name):创建一个工作簿workbook对象wb,对应Excel表单的操作是要通过workbook对象来完成的,因此要先获取此对象。
  • sh_new = wb.create_sheet(sheet_name):创建一个表单对象sh_new,因为操作单元格是要通过表单对象来操作的。
  • wb.save(workbook_name):保存号工作簿,新建的工作簿一定要保存好才能进行下一步操作。
  • wb = load_workbook(“sample.xlsx”):打开一个名为sample.xlsx的工作簿。
  • sh_new = wb[“Sheet1”]:获取名为sheet1的表单对象
  • value = sh_new.cell(1,2).value:获取第一列第二行单元格的数据,并存储到value中
  • sh_new.cell(1,2).value=‘lemon’:更新第一列第二行单元格的数据为‘lemon’
  • sh_new.max_row:获取最大的行数
  • sh_new.max_column:获取最大的列数

    还有很多方法,大家可以根据自己的需求自行去拓展

3、Excel数据源简单案例
下面我们将以注册接口为例演示Excel数据源下测试数据获取的解决方案。用例设计如下:
在这里插入图片描述
用例分析:

  • id:用例编号,从1开始,唯一
  • title:测试用例的名称
  • method:接口提交类型(GET/POST)
  • Url:接口地址信息
  • params:请求参数

如上用例设计的很简单,每一列都很直观,如何从上面的用例中取出来接口地址和测试参数成为我们关注的重点,这里我们将用到openpyxl技术来读取Excel中的测试数据,在common下新建一个名为do_excel的py文件。

思路:在数据提供者方法中读出来我们需要的测试数据,包括接口地址以及参数、请求方法

实现思路:先获取最大的行数以及最大的列数,通过嵌套循环实现数据的读取,编写成读取数据类

示范代码如下所示:

from openpyxl import load_workbook
class DoExcel:
    def __init__(self, file_path, sheet_name):
        self.file_path = file_path
        self.sheet_name = sheet_name
    def do_excel(self):
        wb = load_workbook(self.file_path)
        sheet = wb[self.sheet_name]
        test_data = []
        for i in range(2, sheet.max_row + 1):
            sub_data = {}
            sub_data['id'] = sheet.cell(i, 1).value
            sub_data['title'] = sheet.cell(i, 2).value
            sub_data['method'] = sheet.cell(i, 3).value
            sub_data['url'] = sheet.cell(i, 4).value
            sub_data['params'] = sheet.cell(i, 5).value
            test_data.append(sub_data)
        return test_data

if __name__ == '__main__':
    test_data = DoExcel('C:/Users/Administrator/Desktop/test_data.xlsx', 'test_data').do_excel()
    test_data = DoExcel('C:/Users/Administrator/Desktop/test_api.xlsx', 'test_data').do_excel()
    for item in test_data:
        print(item)

执行代码后,看到Excel中的数据都被读取出来了,且有固定的格式:每一条用例都存储在字典里面,所有的数据存在一个大的列表里面,结果如下所示:

在这里插入图片描述
(* ̄(oo) ̄)仅供参考,有疑问可私聊博主哦,大家一起学习,共同进步!
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值