接口自动化

@yaml+allure+pytest接口自动化框架TOC

一、创建用例步骤:

在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:
  • 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)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值