乐趣区

关于接口:Python接口自动化之常见用例读取方法介绍

本文首发于:行者 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 测试数据读取角度,进行一次简略的分享。如有不失当之处,欢送大家斧正。

退出移动版