背景
为什么要做自动化测试?
节省测试时间,项目有一定体量后回归测试等场景需要耗费大量时间和人力
为什么要做接口自动化测试?
相对于ui,接口较稳定,实现自动化比较方便,代码成型后,用例和代码维护也比较方便
一、拆解接口测试的过程和场景
1.分析接口请求有哪些内容
- l 请求方法 method
- l 请求地址url
- l 环境配置 ip
- l 前置操作
- l Request Body (数据类型)
- l 状态码
- l Response body
- l 断言
- l 后置操作
2. 两种接口测试场景
- 对单个接口进行校验
接口字段的数据类型/长度/空值等检查点做校验,此场景大量不同数据请求同一个接口,适合做数据驱动(DDT),此场景主要解决批量读取用例数据,加载DDT,记录执行结果(使用异常处理)三个问题。
- 对接口进行业务流的测试
此场景会涉及多个接口及数据的插入及清洗等
1分析业务关系
可从流程图,4+1视图,设计文档等入手
2梳理
例:启动指标
启动指标的条件,该指标应存在(delete_flag=0)且指标状态为inactive
为确保用例的独立性(解耦),测试流程应为:
1新建指标并返回指标id
2请求指标启动接口,启动新建的指标;断言接口返回success/数据库内指标状态刷新为active;由于指标启动过程平台建任务有耗时,此处需要设置等待。
3数据的清理,请求指标停止接口停止该指标任务,删除此指标相关数据(指标表/指标表达式表)
二、分析接口自动化测试活动
1.接口拉通--编写用例的准备
接口文档
Postman(灵活运用postman生成代码的功能)
参照文档使用postman请求,拉通接口
2.测试过程相关数据的管理和组织
1.用例编写
用例数据 用例编号,用例名,url,method,入参,预期结果
2.用例文件的格式,组织方式 excel / python文件/yaml
1使用excel表格编写用例,注意用例表字段的设计
优点:维护简单,修改方便,不需要会编程
缺点:程序需要使用相关模块(openpyxl/xlrd等)支持才可以读取,需要编写相关代码
例:
适用于单接口校验做数据驱动
适用于业务场景测试,配合正则表达式和反射
2使用python文件编写用例
使用面向对象和继承的方法编写用例数据
优点:python可直接读取,不需要中间层,可直接在开发环境编写
缺点:编写人员需要会python语法,理解面向对象和继承等,跨语言较麻烦
例
class Case:
#此处可使用类属性放置所有用例实例共有的属性,如IP,但是IP这种环境配置还是建议放在config里,不然用例改环境太麻烦
host_ip=""
def __init__(self,num,name,url,method,req_body,exp_result):
self.num=""
self.name=""
self.url=""
self.method=""
self.req_body=""
self.exp_result=""
#将用例属性进行实例化传入,因为整个框架设计数据传递主要使用json,所以建议所有字符串都用双引号
#实例化用例后导入到其他模块使用就可以了
case_01=Case("01","case_01","/abc","post","{"user":"001"}","{"status":"success"}")
#多个用例时,可使用list传递,适用DDT
case_02=Case("01","case_01","/abc","post","{"user":"001"}","{"status":"success"}")
case_03=Case("01","case_01","/abc","post","{"user":"001"}","{"status":"success"}")
case_box=[case_01,case_02,case_03]
#当然,也可以写个循环生成用例,case_box.append()循环往里加
class New_case(Case):
def __init__(self,num,name,url,method,req_body,exp_result,exp_code): super().__init__(num,name,url,method,req_body,exp_result) self.exp_code = exp_code
#使用继承可以方便添加新的用例属性
3使用yaml文件编写用例
优点:跨语言优势强
缺点:编写人员需要会yaml语法,需要使用第三方模块支持才能读取数据
例
# yaml语法
# key: {key1: value1,key2: value2} 注意:冒号后有空格,字符串建议使用双引号
case_data_workbook:
workbook: "../data_of_cases/case2.xlsx"
worksheet: "Sheet1"
# 用例编写
case_01:
num: "01"
name: "case_01"
url: "/abc/o1"
req_body : '{"credentials": "123456","account":"admin"}'
3.环境配置config
1使用python类编写配置文件
优缺点同上,我们直接看例子
"""
建立一个类
配置项用类属性来写,方便其他模块导入使用
路径可以使用pathlib拼接
"""
class CONFIG: #环境host
HOST = "http://www.xxx.com:8108" #用例excel文件
WORKBOOK = "../data_of_cases/case2.xlsx" #用例sheet
WORKSHEET