共计 3672 个字符,预计需要花费 10 分钟才能阅读完成。
本文首发于:行者 AI
在软件测试中,为我的项目编写接口自动化用例已成为测试人员常驻的测试工作。本文以 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
执行 py 文件后,打印读取 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 与 xrld 一样,都可读取 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 测试数据读取角度,进行一次简略的分享。如有不失当之处,欢送大家斧正。