设计思路简介
设计思路采用的是关键字驱动+数据驱动的设计模式,采用的是python+requests+pytest为框架基础,excle为数据载体实现。
主要是为了降低接口测试的维护成本,将case与interface分离,保证后续的维护尽量只是在维护数据表,不与代码层面的东西关联。
现在还处于学习的阶段,很多东西还不成熟,希望后续能做好
框架结构
结构简介
Base:存放对应的项目需要的基础类,目前针对于项目需要的一些文件路径和接口发送需要调用的方法存放
common:主要存放一些公共方法,与项目实际无关,但项目需要时从common中进行继承,组装成项目有用的方法
config:存放配置文件,如数据库配置,邮件配置,项目配置,测试用例配置等
ExecuteTestCase:运行类,组织测试用例执行
log:项目中生成的log文件存放
main:pytest的中的conftest.py内容存放,全局定义
OperationData:对从excle中读取的数据进行处理和组装,达到发送接口的目的
report:报告类,目前可以生成pytest-html和allure报告
tool:项目中用到的方法的组装,继承于common中的方法,自定义的方法存放于UserFunction.py
数据存储简介
分表思路
针对于接口自动化的测试用例设计,一般的接口测试case都是通过操作步骤来对接口进行组合构成符合测试标准的测试用例。所以对于后续的维护中,有可能是接口的变动,业务逻辑没变。有可能是业务逻辑变动,接口没变。故将操作表(case.xls)即测试用例表和接口表(interface.xls)分开。
目的:
1、避免后续维护中业务逻辑发生变化时,需要维护接口数据的情况
2、整合测试用例,让接口用例看阅读起来更加有逻辑性
测试用例表:case.xlsx 字段说明
此处参考之前同事讲解的方案,可以说是借鉴(都懂的撒)
用例名称: 自定义编写,需要与CaseConifg.yaml 中的case名称对应
开关: 管控对应步骤是否需要执行,on:执行 off:不执行
操作: 目前仅支持excle中定义好的操作,
- 发送请求:相当于get或post的请求发送,需要添加接口名称
- 参数赋值:变量赋值,用来保证参数化
- 执行SQL:链接数据库执行对应的SQL内容
- 执行用例:相当于执行的对应用例当做是一个操作步骤,即该用例的前置条件
接口名称: 当操作为发送请求时,为必填项,其他操作步骤不需要填写。填写的接口名称必须与interface表中的接口名称一一对应
请求参数: 此处的请求参数相当于interface中的body数据,如果这个位置添加了对应的请求参数,那么就会以这里的请求参数发送请求,这里的请求参数也可以做参数化
数据库连接:添加的是指定环境数据库中对应的库名,可以不填写,如果不填写的话,需要在执行语句中增加库名
SQL: 需要执行的SQL语句,不建议填写select * from ,尽量不要使用*,需要取什么样的值,在查询时就明确出来,方便后续的变量赋值
SQL变量: 直接填写变量名称,变量之间使用英文[,]隔间,在SQL变量调用时,类似于jmeter中的sql变量调用,格式为"variable_n"调用
预期结果: 直接填写对应的信息,采用的是包含的对比,即预期结果只要在实际结果中存在,即认为是成功,不需要完全相等可以是字符串,或者是变量
实际结果: 一般常用的有 ${response} 响应结果,${code} 响应状态 ${rehead} 响应头。填写的可以是定义好的变量,也可以是响应中的信息,也可以是一个字符串
参数名称: 主要针对于参数赋值,参数化的时候的变量名称,多个填写时使用英文[,]隔开
参数: 参数赋值时填写的value值,可以是定值,如字符串,列表等。也可以是一个变量,
- 目前定义的变量提取方式有:
${__CutString()},${__JsonExtract()}
-
${__CutString()} 需要三个变量,类似于jmeter中的边界值提取器,每个变量之间使用;隔开 firstvb:需要提取的内容,即从什么地方提取,一般是为${response} secondvb: 左边界 thirdvb: 右边界,如果右边界是一个[,]时,需要使用/,来代替
-
${__JsonExtract()} 需要两个变量,类似于jmeter中的json提取器,提取方式有两种 1、"$.web.test[0].tes 2、“$..test_syw” 有几层就写几个.t_syw"
- 此处相当于自定义的方法内容,可以自己进行扩展
测试用例表:interface.xlsx 字段说明
接口名称: 唯一的,不允许重复
请求方法: 常规的请求方法,get或post, eg:GET,get,Get 仅支持着样子的大小写,其他类型不允许
协议: 常规协议,http的协议没问题,https的待验证
Host:
- 可以填写字符串或者变量
1、可以写定值
2、${host}
读取的是配置文件中的host值
Port: 1、可以填写定值 eg:8080 2、${authport} 在配置文件中配置好,在此处直接调用
URL: 填写请求的地址,格式为:/xxxx/xxxx
Body: 格式与请求Content-Type定义的类型需要一致。body中的内容可以做参数化
Head: 请求需要的请求头,格式要以json的格式填写,即键值对
Content-Type : 必须项,一般格式为 application/json;charset=UTF-8
文件路径 : 文件的路径,需要使用文件上传时,Content-Type中的内容必须要有:multipart/form-data
格式上有点乱,第一次写有点用不来这个东西