Python接口自动化 之用例读取方法总结

前言:

在软件测试中,为项目编写接口自动化用例已成为测试人员常驻的测试工作。本文以python为例,基于笔者曾使用过的三种用例数据读取方法:xlrd、pandas、yaml,下面简要地介绍下它们的使用方法及简单分析。

1. Python第三方库xlrd

xlrd模块可用于读取excel文档,是一种最常用的用例读取方式,使用方式如下。以演示惯例---注册接口为例,首先新建一个excel文档,文档中自定义接口用例参数:

(以下data均为随机生成,不涉及任何系统)

python已安装第三方库后,开始读取接口用例。本次为了方便演示,方法未进行封装。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

xlrd代码演示

以下为实例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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数据驱动方式,进行数据读取:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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代码演示

实例代码:

1

2

3

4

5

6

7

8

9

10

# 从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

1

2

3

4

5

6

7

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缩进。

破折号和空格( “ - ” ):列表格式

1

2

3

4

# 以下数据会以list形式被读取

- testapi

- url

- get

常见的yaml格式:

冒号和空格( “ :” ) :字典格式

1

2

3

4

5

6

7

8

9

10

11

# 以下数据会以dict形式被读取

name: A

age: 1

spouse:

    name: B

    age: 2

slave:

 - name: C  # - 表示为列表

   age: 3

 - name1: D

   age1: 4

 

yaml代码演示

读取yaml文件中的dict数据,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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的写法规范有一些了解,才能正确使用。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值