接口自动化知识与设计
一. 接口自动化测试
1. 自动化测试的流程:
- test环境:研发在向test环境代码仓库push代码后,自动的触发jenkins任务,构建接口自动化测试,并主动发送错误的构建邮件
- beta环境:周三上beta后,手动触发beta环境的自动化测试
- 线上环境:周四上线后,手动触发线上环境的自动化测试
2. 使用流程设计
- 目前有3个环境:test/beta/release,每个环境有2个版本的代码: pro/latest,所以需要维护3套环境的测试用例,并使用特殊的请求头,区分请求到哪个版本(pro/latest)代码中
- test环境,测试用例的管理基于excel,自动化测试框架搭建好后,基本上都是在维护一份excel的测试用例,对测试用例进行新增,修改,代码改动较少,后期维护成本低
二. 接口自动化测试设计
1. 基于python的单元测试框架:unittest、pytest
unittest和pytest都是基于python的单元测试框架,基本上都是由:test fixture(前置)、test case(测试用例)、test suite(测试集合)、test runner(运行测试)这几个概念组成,能很好的支持各类断言语句。
2. python ddt:数据驱动模块
一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合,所以在测试一个接口时,通常会编写多条case,而这些除了传参不同外,并没有什么区别。这个时候就可以利用ddt来管理测试数据,提高代码复用率。
3. python requests:基于python的HTTP客户端库。
能够模拟客户端向服务器发送HTTP请求。
4. python xlrd:用于读取excel的数据
能够对excel表格进行读取,针对表单、逐行、逐列等方式读取
5. allure:测试报告库
三. unittest
简单用法
unittest
是python
自带的一个单元测试框架,类似于java
的junit
,基本结构是类似的。基本用法如下:
1.用import unittest
导入unittest
模块
2.定义一个继承自unittest.TestCase
的测试用例类,如class xxx(unittest.TestCase):
3.定义setUp
和tearDown
,这两个方法与junit
相同,即如果定义了则会在每个测试case
执行前先执行setUp
方法,执行完毕后执行tearDown
方法。
4.定义测试用例,名字以test
开头,unittest
会自动将test
开头的方法放入测试用例集中。
5.一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用assertEqual
、assertRaises
等断言方法判断程序执行结果和预期值是否相符。
6.调用unittest.main()
启动测试
7.如果测试未通过,则会显示e
,并给出具体的错误(此处为程序问题导致)。如果测试失败则显示为f
,测试通过为.,如有多个testcase
,则结果依次显示。
四. ddt模块
ddt 是第三方模块,需安装, pip install ddt
DDT
包含类的装饰器ddt和两个方法装饰器data
(直接输入测试数据)
通常情况下,data中
的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack
分解数据。
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有@unpack
,那么[a,b]
当成一个参数传入用例运行
如果有@unpack
,那么[a,b]
被分解开,按照用例中的两个参数传递
六. requests模块
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多
因为是第三方库,所以使用前需要cmd安装
pip install requests
安装完成后import
一下,正常则说明可以开始使用了。
基本用法:
requests.get()
用于请求目标网站,类型是一个HTTPresponse
类型
import requests
response = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头信息
print(response.cookies) # 打印cookie信息
print(response.text) #以文本形式打印网页源码
print(response.content) #以字节流形式打印
七. xlrd模块
-
xlrd
是读取excel
表格数据; -
支持
xlsx
和xls
格式的excel表格; -
三方模块安装方式:
pip3 install xlrd
; -
模块导入方式:
import xlrd
基础用法
# 文件名以及路径,如果路径或者文件名有中文给前面加一个r表示原生字符。
workbook = xlrd.open_workbook(filename)
# 通过名称获取
sheet = workbook.sheet_by_name('open_live')
# 1. 返回book中所有工作表的名字
names = workbook.sheet_names()
print(f'1. 返回book中所有工作表的名字: {names}')
# 2. 获取该sheet中的有效行数
nrows = sheet.nrows
print(f'2. 获取该sheet中的有效行数: {nrows}')
# 3. 读取前10行数据
excel_data = []
for i in range(10):
# print(sheet.row(i))
excel_data.append(sheet.row(i))
image.png
八. 测试用例设计
controller表:
- 控制各个表单模块的执行
-
各个表单执行的前置条件:包括账号、url、partner_id、partner_key等
image.png
模块表
-
主要完成该模块下测试用例的编写,控制单条用例是否执行,控制测试用例的关联参数等
image.png
九. 难点介绍
- 如何在test环境push完代码后就触发jenkins任务?
- 这里主要介绍非匿名token访问gitlab的方式,匿名token可以直接使用jenkins任务中的token访问gitlab的钩子
- gitlab中提供了回调的钩子,自动化测试需要提供一个接口来接收gitlab 的钩子回调,拿到开发提交代码后的信息,这个信息会通过我们通过的接口,由gitlba回调给我们,当我们判断是test环境的主版本仓库时,再调用jenkins-api来执行相应的自动化job
- 结果收集:如何收集jenkins执行任务后的结果,并发送邮件:需要在服务端开一个crontab定时任务,每分钟去轮询调用jenkins-api询问当前任务是否执行完毕,并查询状态,如果收集到结果,就保存当前结果发送邮件并停止任务