接口自动化
一、创建用例步骤:
在data文件夹下方创建相关的yaml用例
写完之后,需要执行 utils/read_files_tools/case_automatic_control.py这个文件,生成自动化代码
执行caseAutomaticControl.py文件之后,会发现,在test_case层新增该条用例的对应代码,可直接执行该用例调试
当所有接口都编写好之后,可以直接运行run.py主程序,执行所有自动化接口(从A-Z排序依次执行)
二、配置文件解释:
域名:新增域名需要自定义方法,需要在regular_Contrl里面去封装(按照现有的域名封装方法添加),目前我封装了两个域名,有需要可以自己去加
实时更新pytest文件,开启后若改yaml测试用例会将testcase一同更新,若关闭,改后需要重新生成新的测试文件
数据库相关配置,目前只支持连接一个,如果有兴趣的同学可以拓展一下
三、测试用例相关字段解释:
见下图:
四、用例中调用方法的一些介绍:
1、设计相关依赖的数据:
dependence_case 需要设置成 True,并且在下面的 dependence_case_data 中设计相关依赖的数据。
case_id:例如 在某测试场景中我们在写B接口时需要依赖A接口返回的id,因此依赖的case_id 就是A接口的 case_id :send_test_01
dependent_type:我们依赖的是A接口的响应内容,因此这次填写的是 response
jsonpath: 通过jsonpath 提取方式
replace_key:拿到id之后,我们将B用例中的data中的响应id参数,那么我们使用jsonpath的方式,进行替换 $.data.id,可以添加多个 dependent_type
例:
dependence_case_data:
- case_id: send_tset_01
dependent_data:
提取接口响应的id
- dependent_type: response
jsonpath: $.data.id
replace_key: $.data.id
提取接口响应的Token
- dependent_type: response
jsonpath: $.data.Token
替换请求头中的Token
replace_key: $.headers.Token
2、调用缓存方式:
如果用例中的依赖cache文件中的缓存,直接写我们存入缓存中的名称即可
例:
headers:
Content-Type: application/json;charset=UTF-8;
type: $cache{B_type}
authorization: $cache{B_work_login_init}
3、data中随机字符:
我们在用例中编写的格式为函数名称()的方法,程序调用时,会生成当前时间。在regularControl.py文件中,还封装了一些常用的随机数,如随机生成男生姓名、女生姓名、身份证、邮箱、手机号码之类的;比如在用例中,假设我们需要获取一个 1-10之间的随机数,那么我们直接这样调用该数据即可下面reason是key:测试 {{random_int(1, 10)}}是值
reason:测试 {{random_int(1, 10)}}
4、上传文件:
在yaml文件中,我们需要注意两个地方, 1、requestType: 上传文件,我们需要把方式更改成 file 2、file: 如果是文件上传的话,就需要有file,然后我们上传的文件写在file下方 3、file_name: 首先,这个file_name是我们公司接口定义的上传文件的参数,test.png 这个是我们放在Files这个文件夹下方的文件名称 程序在执行的时候,会判断如果你的requestType为 file的时候,则会去执行file下方的参数,然后取到文件名称直接去执行用例
例:
requestType: file
is_run:
data:
file:
file_name: tset.png
data:
is_upload: 0
params:
collect: false
- 1、file: 这里下方上传的是文件参数
- 2、data: 这个data下方是该接口,除了文件参数,还需要上传其他的参数,这个参数会以json的方式传给服务端(如果没有其他参数,可以不用写这个)
- 3、params: 这个是除了文件参数以外的,上传的其他参数,这个参数是拼接在url后方的
5、依赖数据存入缓存文件:
程序中提供了current_request_set_cache这个关键字,可以将当前这条用例的请求数据 或者响应数据 给直接存入缓存中
例:
dependence_case_data: True
current_request_set_cache: #将提取的内容让在cache文件缓存中
1、response 从响应中提取内容 2、request从请求中提取内容
- type: request
jsonpath: $.data.userName
name: B.userName_init
6、依赖数据从sql里面获取:
用例中的 dependent_type 需要填写成 sqlData。 当你的依赖类型为 sqlData 数据库的数据时,那么下方就需要再加一个 setup_sql 的参数,下方填写需要用到的sql语句,需要注意case_id: 因为程序设计原因,通常情况下,我们关联的业务,会发送接口请求,但是如果我们依赖的是sql的话, 是不需要发送请求的,因此我们如果是从数据库中提取数据作为参数的话,我们case_id 需要写self ,方便程序中去做区分
例:
dependence_case: True
依赖的数据
dependence_case_data:
- case_id: self
dependent_data:- dependent_type: sqlData
jsonpath: $.id
replace_key: $.data.paymentActivityId
assert:
sql:
setup_sql:
- dependent_type: sqlData
- select id from
huihua_saas
.card_payment_activity_info
where activity_status = “START” order by id desc limit 1 ;
7、断言:响应断言、数据库断言
数据库断言:断言sql的时候,AssertType 的值需要填写成 SQL,下面需要编写sql语句,也可以断言多个(sql是列表类型的,不想多表联查的话可以编写多个语句)
响应断言:断言接口响应时,AssertType为空
例:
assert:
id:
jsonpath: $.data.paymentActivityId
type: ==
value: $.id
AssertType: SQL
activityid:
jsonpath: $.data.activityid
type: ==
value: 10086
AssertType:
sql:
- SELECT * FROM
huihua_saas
.card_payment_activity_info
order by id desc limit 1 ;
断言接口状态码:直接在assert下方添加一个 status_code 参数,状态码我们判断其为 200assert:
例:
status_code: 200
8、增加等待时间
sleep:2
9、设置data中数组格式配置
10、清洗数据-数据库删除
当前在ymal文件最后的数据加上:
teardown_sql:
- delete from
huihua_saas
.prize_draw_activity
where merchant_id =‘34’ and activity_title like ‘创建微信小程序抽奖活动01%’ order by id desc limit 1 - delete from
huihua_saas
.prize_draw_activity
where merchant_id =‘34’ and activity_title like ‘创建支付宝抽奖活动01%’ order by id desc limit 1 - delete from
huihua_saas
.prize_draw_activity
where merchant_id =‘34’ and activity_title like ‘创建微信小程序抽奖活动02%’ order by id desc limit 1 - delete from
huihua_saas
.prize_draw_item
where activity_id =‘$cache{cardTicketIdWX02}’; - delete from
huihua_saas
.prize_draw_item
where activity_id =‘$cache{cardTicketIdWX01}’; - delete from
huihua_saas
.prize_draw_item
where activity_id =' c a c h e c a r d T i c k e t I d Z F B 01 ′ ; 其中依赖的 a c t i v i t y i d = ′ cache{cardTicketIdZFB01}'; 其中依赖的activity_id =' cachecardTicketIdZFB01′;其中依赖的activityid=′cache{cardTicketIdWX02} ;用sql取得依赖数据存入缓存
四、用例中所有支持的断言类型
见下图:
五、设计用例中的token
为了防止重复请求调用登录接口,pytest中的 conftest.py 提供了热加载机制,需要在 conftest.py 提前编写好登录的代码
我们会先去读取文件中的用例,然后执行获取到响应中的token,然 编写Cache(“B_work_login_init”).set_caches(token),将token写入缓存中,其中 B_work_login_init 是缓存名称。编写好之后,运行脚本时我们会在 requestControl.py 文件中,读取缓存中的token,如果该条用例需要依赖token,则直接进行内容替换。用例中token 填写我们所编写的缓存名称即可
六、执行用例后查看报告、日志、邮件等
执行本框架之后,需要搭建好 python、jdk、 allure环境(allure安装教程:https://blog.csdn.net/m0_49225959/article/details/117194318)