# 一、源码:
github地址:
https://github.com/18713341733/ApiFrame
或者可以下载 csdn :
框架基本搭建完成了,这是最终版。有疑问需要交流的可以+v。
# 二、 实现功能
1、yml管理case 。在yml文件中编辑case
2、get 请求、post 请求 及返回结果的断言
3、与mysql数据库的交互封装
3、数据的传递与依赖:
a、实现了单例模式的全局字典,随时可以从字典中取数据、存数据
# 三、框架介绍
## 3.1 case编写
用户编写case时,需要写两个地方。
1、/data/ 下,yml文件,编写case所需数据
2、/test_case/下,编写case
## 3.2 登录信息维护
大部分的接口,请求,都需要带有token信息。登录信息的维护
登录账号维护:config/user.yml
账号登录并提取登录状态的请求:common/get_login_info.py
## 3.3 数据库信息维护
数据库配置信息:config/db.yml
封装数据库逻辑:
1、pytest 在启动项目时,先与mysql数据库建立连接,拿到conn信息。
在pytest 在项目结束时,关闭数据库连接。
test_case/conftest.py
```commandline
# 在执行项目代码之前,最先执行这个方法。autouse=True
@pytest.fixture(scope="session", autouse=True)
def setup():
# TODO 在执行项目代码之前,最先执行这个方法
print("启动建立数据库连接")
# 测试项目资讯平台数据库连接
baidu_manager_conn = get_baidu_manage_db_conn()
print("===========开始执行项目===============")
yield baidu_manager_conn
print("关闭数据库连接")
baidu_manager_conn.close()
```
## 3.4 变量值的来源
来源一: 全局大字典,通过get_value,set_value 方法,保存值,取值
来源二:
yml文件中的dependence(前置模块)、teardown(后置模块)
![img_1.png](img_1.png)
![img_2.png](img_2.png)
## 3.5 yml文件格式
对象,map(属性和值) (键值对)
```commandline
user:
userName: "xiaoming"
boss: true
birth: 2022/07/13
age: 20
```
行内写法:
```commandline
user:{userName: "小明",boss: true,birth: 2022/07/13,age: 20}
```
# 四、yml中编写case
## 4.1 注意事项
1、yml文件,是通过缩进表示层级关系的,所在xxx.yml文件中,编写case时,一定要注意缩进。
2、每个yaml文件是一个模块
3、每个模块下,编写case时。一定要保证 case 名称与接口名称一致。
## 4.2 yml中case讲解
```commandline
/api/abc/abc/abc/page:
- name: "获取接口统一鉴权token"
request:
method: post
url: /api/abcf/abc/abc/page
headers:
Content-Type: application/json
datas:
username: miaojiang
password: 123456
assertion:
-
- expectation: "'data':"
- compare: "in"
- ctual_value:
-
- expectation: "1"
- compare: "="
- ctual_value: "$.data.id"
```
1、yml中接口名称(/api/abc/abc/abc/page),必须与 接口文档中的接口名称保持一致
2、name 为当前case的名称
3、reqeust 填写请求需要的信息。
4、assertion: 断言
最少要有1个断言。上述代码中有2个断言。
expectation 为用户的期望值
compare 比较方式
ctual_value 为实际值。为空时,实际值取的整个response返回值。 想取具体某个字段时,需要使用jsonpath语法。 python中jsonpath的用法_python jsonpath_keer丶的博客-CSDN博客
jsonpath语法 在当前项目example中也有示例。
### 4.2.1 传参编写
1、传参为空
datas 后面为空就可以了
Content-Type: application/json
datas:
assertion:
2、传参为josn,写法一
datas 后面直接跟一个字典。这个字典只能写一行。
headers:
Content-Type: application/json
datas: {"username":"miaojiang","password":"123456","code":"1111"}
assertion:
2、传参为josn,写法二
参数为key value的形式。
datas:
username: miaojiang
password: 123456
assertion:
### 4.2.2 headers编写
后台中,很多接口,都需要一个登录信息的鉴权。
是通过header里的 Authorization 进行鉴权的。 当case需要有这个信息时,在yml里的headers中可以写Authorization,也可以不写这个字段。 框架中,鉴权信息不是通过 headr控制的,是通过 编写case时,传参get_authorization控制的,如
def test_get_info(self,test_data:dict,get_authorization):
### 4.2.3 断言编写
代码如下:
assertion:
-
- expectation: "操作成功"
- compare: "in"
- ctual_value:
-
- expectation: "admin"
- compare: "="
- ctual_value: "$.data.user.name"
1、支持多个断言
2、断言逻辑是,拿着期望值 expectation 与 实际值 ctual_value 做比较
3、ctual_value:为空时,表示实际值是整个接口返回值response
4、当实际值,想具体取接口返回值中的某一个字段时,使用jsonpath的写法。
如整个返回值为
```commandline
{
'code': 200,
'msg': '操作成功',
'data': {
'user': {
'name': 'miaojiang',
'createTime': '2022-04-25 13:53:01',
'update': None,
```
想要对比的实际值为data下,user 下的 name 字段。 写法为:
```commandline
- ctual_value: "$.data.user.name"
```
5、 比较方式 compare in 表示 期望值 在 实际值里面。
```commandline
> 期望值 大于 实际值
< 期望值,小于 实际值
```
# 五、py文件中case编写
类名,与方法名,必须以test_开头。
case 需要登录鉴权信息时,需要传入 get_authorization,如
def test_get_info(self,test_data:dict,get_authorization):
# 六、case中依赖数据的处理
##6.1 编写的接口,依赖另一个接口的数据,处理。在yml文件中,写被依赖的接口数据
举个例子。
```commandline
/goods/getgoods:
- name: "演示:获取商品信息"
request:
method: post
url: /api/abc/goods/getGoods
headers:
Content-Type: application/json
datas: {"id": $id}
assertion:
-
- expectation: "成功"
- compare: "in"
- ctual_value:
dependence:
request:
method: post
uri: /api/abc/goods/queryGoodsList
headers:
Content-Type: application/json
datas: {"Platform":"","pageNum":1,"pageSize":10}
expectation:
id: $.data.list[:1].id
```
查询商品详情:/goods/getGoods:
url: /api/abc/goods/getGoods
需要传一个good id, 但是这个id 不能写死。 我先去获取 商品列表,queryGoodsList ,取第一个商品的 id,将这个id 传给查看 商品详情的接口。 在 getGoods 接口中,传参 id,写不写无所谓。怎么写都行。 重点在于dependence.expectation的取值。
id: $.data.list[:1].id
key:value
key 为 getGoods 接口中,传参datas 中的key, value ,取值,为依赖接口queryGoodsList 返回值中的,需要的字段取值 用的jsonpath语法
注意: 1、yml中,有依赖的场景再添加dependence, 没有依赖,就不需要添加 dependence 数据
2、dependence 中的uri,如果host 与主接口的host一致,就可以直接写uri,不用写host, http://xxx.xx.xx
如果依赖的接口host,与主接口的host不一致,则需要在dependence 中的uri 中,写全url的路径。
## 6.2 将依赖的数据进行参数化,从全局变量的字典中取值。
比如,修改商品 的 接口,这个商品的id,不能是写死的,是一个参数化的东西。
第一步:
我在yml文件中,写商品的id 时, 使用 ${id} 的形式。
方式一:datas所有数据写一行
datas: {"id": "${id}","status":"0"}
方式二:datas数据写多行
datas:
Platform: "abc"
id: "${id}"
imgUrl: "http://t"
或者
datas:
Platform: "abc"
id: ${id}
imgUrl
没有合适的资源?快使用搜索试试~ 我知道了~
pytest+yml+allure实现接口自动化框架
共268个文件
py:36个
sample:13个
yml:10个
需积分: 0 37 下载量 101 浏览量
2023-05-19
10:09:58
上传
评论 3
收藏 704KB ZIP 举报
温馨提示
pytest+yml+allure实现接口自动化框架,可以满足绝大部分的接口场景,好用!
资源推荐
资源详情
资源评论
收起资源包目录
pytest+yml+allure实现接口自动化框架 (268个子文件)
013d5604cd410656082bf9b76d6c433a91342e 277B
027daab04e3b492f3fc0ac0bddb5d471970e97 731B
056f1455bf71f9a4121c9d61d04149363dfa4e 1KB
0b104eb20b061fcebb0953b5c4b46a32b15725 94KB
0b835c48cdf8b7d0ca066137fbbe9ba869b1f0 54B
0bb396735dfce4516c4abd7e9444da0a874597 1KB
0c068bc0b3d2f82facd8aa2c778b18995b031a 369B
0ecad760736d2be9e8c7b0721c73bf44f10ec8 102B
0fa4b209cb9c72f014db3c07515e2d44e56c29 1KB
0fb63519c8c60554e608e057a273724fb5317b 449B
10276aac7f98db5fdd67b1889def57bb910843 790B
108d4b33a21d58d38a344a64e1587898b95c84 461B
10d52b89a7daa0d0a1c1de79a32f2b7a9400e5 100B
11fafc56754333c41a7e1e9f382748b89cd8b5 985B
13797a1600a17c5baae63f5451adcfca37bfd7 94B
149e0224b5c5c1c35fd170c40d967a55fc0427 631B
167aedd6f43499a24de4804597ab235a1a6842 794B
16e392d14ff67cbee3494d1dbaa8b1a9066a3b 243B
18e30847b30c881b63823152e5856ba57251e5 731B
1acc8c88d7ef92bcff4e27e6c3bf5d9a2c7f3d 171B
1b9a4fa544d960bd6f15374b61e1a1a8fcc81c 1KB
1bfa0deca6bc2138fb8aa44dd6ccbd92341fc8 304B
1d01e96356a4ec8473077cbf68e73c3c343bc1 462B
1d05ab21ce3319edacb80dcd3d7533549c0185 902B
1ef2228c223fcb23143d0546a110207ab7933d 253B
22281323a5e593fb55e02172157c852b4d9a57 203B
233e4eab65f684b14c64a22083014a8631112a 416B
2384372080a2298f1227bcff5888ff35384da0 144B
241d22be32de8f1021e627544863830b324b3e 6KB
2710e2a3626b0e49a7aec0b43d107ec5696fd9 32KB
28e6d4857690e248c8a237021a7c5446ef56d8 297B
290326e6c25d0d38f6d478fab4c53fe7ff6057 541B
2a9625f827cf8404ddf1816ec433fe558069b8 144B
2ad277963636581a3b2b45c04557875a5becb4 2KB
2b9759e579fa589a4885b371bb8a038c5d0974 1KB
2d1398a12afa4ff5df1c698cab44f6c6bfdd9b 161B
2f6a3994a8783d76a4b31584611098b7a1bb15 483B
329588ad658f73611a96b3c7a43c74b4f36e4b 284B
32e6fac60e011bb6f401d97d0a6c4b6b1cc085 644B
3503ab97a5398218bc4e081bf8b853fc115eba 944B
3553ac7b2f80376f68b65f03845e7271d8edfc 817B
360b18ef2b0555f4b787220b8b6dc94aab88e1 573B
37282330b86654d66f77e84e7b5abb69a57de6 674B
37cbf15dbe94d911169125f5294671ea5accb2 304B
38e83e4672c25c639239f3b71f0b14a75513a7 382B
3cbb1c7f8202da3eff9eaeee492733a248a62f 930B
3d91e8e848e6e10cf732e8ed3abb7f98055305 3KB
3e614744ea5ec249528ca168d9df6b6fcfce7d 1KB
3f9ec387207d57265c9b6e472dfdd6155a9005 198B
3fbc5f1ff6e67f9d531cef94e943498bd13a13 579B
40ddb8e750e62fdde6e6c045677232ab19421d 402B
41ebddbb35c744d0925c041faa31ca5bc977d5 381B
42df3aae6cdea678a13b60b7aafd43727ddf51 186B
447d96733537ae047b221754f26a18684a10ec 624B
45413cad03bc7248ad74f3a9075a6239a3075d 455B
4917f420e2bb1cbeafe98849d70b90c858b0ea 1KB
4d1924382a985815677e56ee0b971c79b4a5d2 289B
4dedf126be21efb092eab5ff45b2f56b0d76d2 1KB
4fbae80184ecbe6d7328e26469f655c3a5262c 986B
50173165585b78fbc4001c2c32bbb928ff8c8e 658B
50a80f927736118e07f254609b5dc9734b005e 60B
5205c76112fb1dcfe5467b2e059e8542db9f8a 1KB
55703309cf769f603db5cdc91f46b472f21dab 540B
58c98c907b03c3c7fa0336b764c96d01160c92 402B
591ac58c11026b553f843b1d3e44d85e3bf3d7 835B
59c9c3eeb5f822f719a4469c2135bfb28842bb 8KB
5a7a32a7fa66c62c8d2a092056e60694c223fc 774B
5ae581fae3598535b73de69218014113463e51 501B
5bb0c5169bacab8405b72fd8cb711ba2f1e7bd 89B
5ce2da2d6447d11dfe32bfb846c3d5b199fc99 142B
605b9cecefbdd6ab111a475075a8874bf403ae 477B
61f097848239654e9b7b396402646d2832b861 52B
625bf25344fc5c8ac0fb8238fc6847367cdb5f 482B
644d84af3eb29842d31515ab00b79e8f231d11 249B
655810686f11d646c8832beb3f8e1bbcf0a857 3KB
698ae376c1c53c31c4e648e3efeee729cf6cbd 886B
69cf0f3a78a69f6f91491ae7a9872290229a2c 566B
6a016448bb3ef9c836d5ac76130d4c4c42f644 346B
6a47ac28d09fc90845406897bd517ac42dc4f7 56B
6a5903ee9fc4e6b3a48713ba90280cc7e3e7a8 269B
6f1366612cfc5b888be28244002ae36c86f975 164B
72ba398fa78899d02ca3636b8dbe14af1d0233 455B
72d086d9a0cdd9945512c61fbf5702f2db6fcc 984B
74606fb26238f7f62ec322484e8fea86b1b470 243B
74ad381afd89be7cc37570594fb6ccc0e4db32 813B
750c6b17fc2d7dffb2c68578428426f1baedbd 991B
7a0a763038dda1db9f2bbaef5d1d021b9cbf54 102B
7bc631bccbadd96e4d0451dbfdb9c442a64ea3 543B
7fb29c75061155e00444a7d90a5dc58cc462f7 1KB
80555a47a6b1e0a7ca0a7bd05e516b8d762c91 163B
80ee895f6442a97701e16903f89fe36c7abfa4 568B
81152de0bd8cad638dd0646be6357916b1940a 678B
820bd987284e9c329cf97b044c2f6df5628a34 283B
830fe8c55bac4c76e7d5379f9ededf3e642955 630B
839624fb46a9bac69e0779ceb0bf6eaac1a2c3 102B
856e9d4d33c95f2a62086c68a6ad76b1ffd491 462B
86d5df76cc2a2fd24581cbdb613e6f8c18022c 897B
8a4332b7e9f37d46cd5f67d725116f263f8464 5KB
8a5e59bf712a439d97246b6005b9a21702a63f 106B
8b4c3606dc9ebbbe6d8d0712fdfb5640245ca7 87B
共 268 条
- 1
- 2
- 3
资源评论
做测试的喵酱
- 粉丝: 6113
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- 【ERP标准流程-标准流程-进货管理】(DOC 17页).doc
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- Java爬虫项目【项目开发计划】(共12页).docx
- 11111111111
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功