Python接口自动化测试:xlrd、pandas与yaml数据读取方案对比
本文总结Python接口自动化测试中三种主流用例数据读取方法:xlrd、pandas和yaml。通过注册接口示例,详细解析各库的代码实现与优缺点。xlrd适合小规模数据,pandas擅长处理大型表格,而yaml凭借高可读性和模块隔离性成为复杂场景优选。文章提供完整代码片段及注意事项,帮助测试人员根据项目规模选择最佳方案。
前言:
在软件测试领域,为项目编写接口自动化用例已成为测试人员的常规工作。本文以Python语言为例,基于笔者实际经验,对三种常用的用例数据读取方法——xlrd、pandas以及yaml进行简要介绍,并分析其使用方式及各自特点。
1. Python第三方库xlrd
xlrd模块主要用于读取Excel文档,是目前最常用的用例读取方式之一。具体使用步骤如下:以常见的注册接口为例,首先新建一个Excel文档,并在其中自定义接口用例参数。
(以下data均为随机生成,不涉及任何系统)

在Python环境中已安装第三方库的前提下,开始读取接口用例。本次演示为了直观展示,方法未进行封装处理。
xlrd代码演示
以下为具体实例代码:
import unittest
import xlrd
# 打开接口用例excel文件
excel_data = xlrd.open_workbook('register.xlsx')
# 读取excel文件中存放用例的sheet页,命名无要求
sheet = excel_data.sheet_by_name('register')
print(sheet.nrows)
print(sheet.row_values(1))
# 将读取到的用例全部追加到data列表中
data = []
for i in range(1, sheet.nrows):
data.append(sheet.row_values(i))
print(data)
class register(unittest.TestCase):
def test_register_check(self):
pass执行Python文件后,打印读取到的data列表,结果显示成功从Excel文件中提取用例数据:

然而,上述方法会将整个Excel文件中的用例全部存入一个列表中,导致数据调用不够便捷。因此,我们需要对数据进行拆分,并结合ddt数据驱动框架进行更高效的读取:
import unittest
import xlrd
from ddt import ddt,data,unpack
excel_data = xlrd.open_workbook('register.xlsx')
sheet = excel_data.sheet_by_name('register')
# print(sheet.nrows)
# print(sheet.row_values(1))
data_ = []
for i in range(1, sheet.nrows):
data_.append(sheet.row_values(i))
print(data_)
# 引入的装饰器@ddt;导入数据的@data;拆分数据的@unpack
@ddt
class register(unittest.TestCase):
@data(*data_)
@unpack
def test_register(self, title, data, check):
print(data)
if __name__ == '__main__':
unittest.main()利用ddt库中的data及unpack方法,Excel文件中的每条数据都被转换为独立的列表,从而更便于提供给接口测试用例使用:

xlrd模块在接口自动化测试中的应用频率极高,调用方式简单直观。在读取Excel测试用例后,还可以使用DDT装饰器对数据进行拆分,使数据结构更加简化。
xlrd适用于项目接口数据量较少、且接口字段调整不频繁的场景。如果项目中接口数量庞大,编写接口用例时存放数据的Excel文件内容会不断膨胀。这将导致测试用例的可读性和维护性在后期成为难题,进而影响测试效率。
2. Python第三方库pandas
pandas是Python中用于数据分析的包,能够帮助用户处理大型数据集。利用pandas中的DataFrame(二维表格型数据结构)方法,即可获取Excel表格中的测试数据。pandas与xlrd类似,均能读取Excel文件。
首先创建一个Excel文件,用于存放测试数据:

pandas代码演示
实例代码:
# 从excel文件中读取用例,name参数为sheet名称
def read_excel_data(inputdir,name):
dataframe = pandas.DataFrame(columns=['接口名','用例','请求地址','请求体','断言','协议','请求方式']) # 传入参数就是excel文件中的列名
try:
datafile = pandas.read_excel(inputdir,sheet_name=name)
dataframe = dataframe.append(datafile, ignore_index=True, sort=True)
except:
print("Warning:excel文件打开异常,请重试!")
To_list = dataframe.to_dict(orient='records') # 参数='records'时,转化后是 list形式
return To_list
from common.data import read_excel_data
import pytest
def getdata(path):
getdata = read_excel_data(path, '编辑xx')
print(getdata)
path = r'..\common\接口用例文档.xlsx' # excel文件的路径,按实际项目结构指明
getdata(path)调用封装好的方法后,成功读取到Excel文件中的全部用例数据:

该方法与xlrd类似,也是通过读取二维表格中的数据来获取所需的接口用例。
通过xlrd等方法读取Excel文件中的测试用例,是接口测试中比较主流的数据读取方式。但是,通过上述案例展示可以发现,如果Excel文件中的数据越来越多,后期测试的维护成本将显著增加。同时,在大篇幅数据中,表格格式也不方便阅读。这也是此类方法的一个主要弊端。
3. Python第三方库yaml
yaml是一种用于编写配置文件的序列化语言,其文件格式输出可以是列表、字典,也支持嵌套结构。层级关系通过空格区分,但不支持tab缩进。
破折号和空格( “ - ” ):表示列表格式
# 以下数据会以list形式被读取 - testapi - url - get

常见的yaml格式示例:
冒号和空格( “ :” ):表示字典格式
# 以下数据会以dict形式被读取
name: A
age: 1
spouse:
name: B
age: 2
slave:
- name: C # - 表示为列表
age: 3
- name1: D
age1: 4
yaml代码演示
读取yaml文件中的dict数据,代码如下:
import os
import yaml
class LoadTestData:
# 设置路径,获取yaml文件数据
def load_data(self, file_name):
yaml_path = os.path.join(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'test_file'), file_name)
yaml_data = yaml.load(open(yaml_path), Loader=yaml.FullLoader)
# print(yaml_data)
return yaml_data
def get_yaml_data(api_file, api_name):
'''
获取yaml中 api_name的数据
:param api_file: api文件位置
:param api_name: api文件名称
:return: 文件数据
'''
data = LoadTestData().load_data(api_file)[api_name]
print(data)
return data
if __name__ == '__main__':
file_name = 'api_data.yaml'
api_name = 'test'
# LoadTestData().load_data(file_name)
get_yaml_data(file_name,api_name )
print('读取成功')
请注意,调用yaml.load时,可能会因为yaml版本较高而提示异常。解决方法是指定loader = yaml.FullLoader,即可解决该异常。
根据上述yaml的实际应用可以发现,相比Excel表格存放的数据,yaml具有更好的可读性。此外,Python本身支持新建yaml文件,与脚本语言的交互性更佳。对于不同的测试模块,可以新建不同的yaml文件,从而实现了功能模块之间测试数据的隔离。
总结
在测试过程中,无论是以Excel表格还是yaml文件存放数据,都能实现测试数据的快速集成与组装。但Excel表格在数据量过大时,存在可读性降低及脚本执行时间较长等问题。yaml拥有简洁、与Python交互性高、可将功能模块的测试数据相互隔离等优点。但也需要对yaml的写法规范有一定了解,才能正确使用。
到此这篇关于Python接口自动化 之用例读取方法总结的文章就介绍到这了,更多相关Python 用例读取内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













