从0开始的接口自动化
日常接触到的接口自动化从实际目标可以划分为两大类:
- 为模拟测试数据而开展的接口自动化
这种接口自动化,大多是单次执行,目的很明确是为了功能测试创造测试数据,节约人工造数据的时间和人工成本,提高功能测试人员的测试效率。
- 在功能测试之前提前发现错误而开展的接口自动化
这种接口自动化的工作流程跟功能测试一样,需要设计接口测试用例,然后执行接口测试用例。说白了就是对单接口进行功能校验,包括接口参数的必填性、长度字符类型限制、入参枚举值等是否正确、响应数据是否正确等进行校验。
本文主要讲解第二种的接口自动化测试。浓缩了接口自动化的核心点进行实战,该实战或许能成为面试的加分点。
- 接口测试用例设计
- 代码读取接口测试用例
- 利用pytest框架实现接口自动化
- 利用python-requests完成接口请求
- 利用jenkins+allure实现持续构建和输出测试报告
需求分析
- Excel管理接口测试用例
- Pytest框架运行测试用例
- Jenkins集成构建
- Allure展示测试报告
数据准备
了解接口
接口请求方式:get
接口请求头:{"Content-Type": "text/html;charset=utf-8"}
接口请求体:{"key": "*****************,"type": ""}
参数值:type=guoji、keji、yule,默认top
新闻请求:http://v.juhe.cn/toutiao/index
备注:接口请求的key需要自行去聚合数据平台申请
设计接口测试用例
接口测试用例设计思路跟功能测试用例设计一致,基本是是校验:必填项、字符类型长度限制、入参内容等。
接口部分用例设计如下:(仅供参考)
脚本目录设计
完整的接口自动化测试,一般分为:数据、公共配置、接口脚本、报告三大基础文件夹。
- 数据:Data文件夹用于存放数据,例如测试用例文档
- 公共脚本:Common文件夹用于存放公共方法的代码文件,例如:读取测试用例代码文件等
- 接口脚本:Request文件夹用于存放各个不同业务接口的代码文件,例如:获取新闻头条接口代码文件等
- 报告:Report文件夹,用于存放测试结果报告
脚本设计相关知识点
读取测试用例
知识点1:xlrd读取excel的基础方法
- 打开文件对象:fb=xlrd.open_workbook(‘xls测试用例文件路径’)
- 获取工作表名称:sheetnames=fb.sheet_names ()
- 打开测试用例所在工作表:casesheet=fb.get_by_name(‘’用例所在工作表名称)
- 获取测试用例条数(表格行数):rows=casesheet.nrows
- 获取工作表内单元格值:cell_value=casesheet.cell_values(x,y),其中x 和y为单元格的横坐标和纵坐标
- 由于需要通过pytest的装饰器进行参数化,所以读取到的单元格需要组合成列表的模板。
例如:
case1=[‘url_01’,’method_01’,{body_01 },’expect_01’]
Case2=[‘url_02’,’method_02’,{body_02 },’expect_02’]
最后提供给pytest读取的数据应该是:
[[‘url_01’,’method_01’,{body_01 },’expect_01’],
[‘url_02’,’method_02’,{body_02 },’expect_02’]]
代码片段:
使用列表追加的方法append()
备注:通过cell_values()读取到的单元格数据,默认是字符串str类型
知识点2:数据转化
-
- url、method是字符串类型,所以无需转化
- header和body需要通过json.loads()转为json格式
接口请求
知识点: requests接口请求基础
- 发起接口请求 resq=request.get()、resq =request.post()
- 获取响应数据并转为json格式 resq.json()
- 断言 assert
- 提取响应内容:
jsonpath语法,response[‘msg’]、response[‘data’][‘name’]
知识点:pytest框架
环境安装:pip install pytest
- Pytest使用规则:用例和脚本文件必须以test开头
- 参数化执行用例:Pytest装饰器@pytest.mark.aprametrize()
- 单个参数写法:@pytest.mark.parametrize('inData',[10,20]) 第一个参数为变量名称,第二个为参数值。不需要设置循环读取参数值,因为pytest的装饰器会自动循环读取
- 多个参数写法:(参数值以元组形式写)@pytest.mark.parametrize('第一个参数名称,第二个参数名称'),[(第一个参数的第一个值,第二个参数的第一个值),(第一个参数的第二个值,第二个参数的第二个值)]
- 不需要设置循环读取参数值,因为pytest的装饰器会自动循环读取
- 本地调试运行脚本:
接口自动化运行脚本到生成allure-html报告,分为2步骤:
第1步:alluredir生成测试报告数据源文件json,存入report文件夹内
pytest.main(['接口请求脚本文件.py','-s','--alluredir=../report/'])
第2步:从report文件夹内将测试报告数据源文件json转为html报告
os.system('allure generate ../report/ -o ../report_html/')
持续构建
知识点:jenkins构建+allure测试报告
- Jenkins环境搭建
- 下载allure报告插件
- 构建
- 构建:利用Pytest命令执行脚本,并生成allure源数据
- 构建后操作:添加allure report(jenkins会自动将allure源数据组合成html报告)
结果