httptesting HTTP(s)接口自动化测试框架
坐标: https://github.com/HttpTesting/pyhttp
# HttpTesting ![PyPI](https://img.shields.io/pypi/v/HttpTesting?style=plastic) HttpTesting 是HTTP(S) 协议测试框架,通过YAML来编写测试用例;支持通过pip直接从PyPi安装,支持命令行运行代码,不固定结构,通过命令生成脚手架。 ## 版本信息 |序号|版本号|描述|
|:---|:---|:---|
||v1.0|使用unittest框架|
||v1.1|使用pytest框架| ## 快速开始 ### python虚拟环境virtualenv使用 - 安装虚拟环境: pip install virtualenv - 创建虚拟环境: virtualenv demo_env - 命令行模式切换到虚拟环境Script目录: /../scripts/ - 激活虚拟环境: activate.bat ### HttpTesting安装 #### pip在线安装 - pip install HttpTesting==1.0.26 #### 下载whl文件进行安装 - pip install HttpTesting-1.0.40-py3-none-any.whl #### 更新HttpTesting包 已安装HttpTesting包,通过pip命令进行更新 - pip list 查看HttpTesting安装包版本信息 - pip install --upgrade HttpTesting - pip install --upgrade HttpTesting==1.0.26 ### amt 或 AMT命令 |序号|命令参数|描述|
|:---|:---|:---|
||amt -config set|此命令用来设置config.yaml基本配置|
||amt -file template.yaml|执行YAML用例,支持绝对或相对路径|
||amt -dir testcase|批量执行testcase目录下的YAML用例,支持绝对路径或相对路径|
||amt -startproject demo|生成脚手架demo目录,以及用例模版|
||amt -har httphar.har|根据抓包工具导出的http har文件,生成测试用例YAML|
||amt -convert demo.yaml|转换数据为HttpTesting测试用例| #### 基本配置 - URL设置 - 钉钉机器人设置 - 测试报告设置 - EMAIL邮箱设置 #### 用例执行 - YAML执行: amt -file template.yaml - YAML批量执行: amt -dir testcase #### 脚手架生成 - 脚手架功能,是生成一个测试用例模版. #### HAR har命令来解析, Charles抓包工具导出的http .har请求文件, 自动生成HttpTesting用例格式. ## 用例编写 ### 用例模型 >TESTCASE{ >>'case1':['description',{},{}], #场景模式每个{}一个接口 >>'case2':['description',{}], #单接口模式 >} ### YAML用例格式 TESTCASE:
#Case1由两个请求组成的场景
Case1:
-
Desc: xxxx业务场景(登录->编辑)
-
Desc: 登录接口
Url: /login/login
Method: GET
Headers:
content-type: "application/json"
cache-control: "no-cache"
Data:
name: "test"
pass: "test123"
OutPara:
"$H_token$": result.data
"${content_type}$": header.content-type
"${name}$": Data.name
"${pass}$": Data.pass
Assert:
- eq: [result.status, 'success']
-
Desc: 编辑接口
Url: /user/edit
Method: GET
Headers:
content-type: "${content_type}$"
cache-control: "no-cache"
token: "$H_token$"
Data:
name: "${name}$"
pass: "${pass}$"
OutPara:
"$H_token$": result.data
Assert:
- ai: ['success', result.status]
- eq: ['result.status', '修改成功'] TESTCASE:
#同一接口,不同参数,扩充为多个CASE
Case1:
-
Desc: 登录接口-正常登录功能
-
Desc: 登录接口
Url: /login/login
Method: GET
Headers:
content-type: "application/json"
cache-control: "no-cache"
Data:
name: "test"
pass: "test123"
OutPara:
"$H_cookie$": cookie.SESSION
Assert:
- eq: [result.status, 'success']
Case2:
-
Desc: 登录接口-错误密码
-
Desc: 登录接口
Url: /login/login
Method: GET
Headers:
content-type: "application/json"
cache-control: "no-cache"
Data:
name: "test"
pass: "test123"
OutPara:
"$H_cookie$": cookie.SESSION
Assert:
- eq: [result.status, 'error'] ### 参数说明 - "${H_token}$": 为参数变量,可以头信息里与Data数据里进行使用
- "%{md5('aaaa')}%": 为函数原型,具体支持函数下方表格可见. ### 自定义变量 变量作用域为当前CASE. ### 示例(部分代码片断) TESTCASE:
Case1:
-
Desc: 接口详细描述
USER_VAR:
token: xxxxxxxx
-
Url: /xxxx/xxxx
Method: POST
Headers: {}
Data:
OutPara:
Assert: [] - 以上通过USER_VAR字典对象来定义变量, key为变量名, value为变量值; 使用方法: ${token}$ - 无需定义变量, USER_VAR字段在用例中,可以省略. #### OutPara字段变量使用 OutPara字段用来做公共变量,供其它接口使用,默认为""; - 示例: "${H_token}$": result.data 是请求结果,返回的嵌套级别
- OutPara为dict类型,可以做多个公共变量. #### Assert断言 Assert字段默认为[]. |序号|断言方法|断言描述|
|:---|:---|:---|
||eq: [a, b]|判断 a与b相等,否则fail|
||nq: [a, b]|判断 a与b不相等,否则fail|
||al: [a, b]|判断 a is b 相当于id(a) == id(b),否则fail|
||at: [a, b]|判断 a is not b 相当于id(a) != id(b)|
||ai: [a, b]|判断 a in b ,否则fail|
||ani: [a, b]|判断 a in not b,否则fail|
||ais: [a, b]|判断 isinstance(a, b) True|
||anis: [a, b]|判断 isinstance(a, b) False|
||ln: [a]|判断 a is None,否则fail|
||lnn: [a]|判断 a is not none|
||bt: [a]|判断 a 为True|
||bf: [a]|判断 a 为False| #### 内置函数及扩展 使用原型(带参数与不带参数) - "%{md5('aaaa')}%" 或 "%{timestamp()}%" |函数名|参数|说明|
|:---|:---|:---|
|md5|txt字符串|生成md5字符串示例: cbfbf4ea6d7c8032584dcf0defa10276|
|timestamp|-|秒级时间戳示例: |
|uuid1|-|生成唯一id,uuid1示例:ebcd6df8a77611e99bb588b111064583|
|datetimestr|-|生成日期时间串,示例:-- ::|
|mstimestamp|-|毫秒级时间戳,20位|
|sleep_time|-|线程睡眠秒级,小数0.5为500毫秒,1为1秒| - 其它后续添加 ## 常用对象(通常做参数变量时使用)
- res: 请求Response对象
- result: res.json 或 res.text
- cookie: res.cookie 响应cookie字典对象; 当做为参数时如果cookie.SESSION这样的写法代表取cookie中的SESSION对象. 如果只写cookie,会解析成"SESSION=xxxxxxx; NAME=xxxxxx"
- headers: res.headers 响应头字典对象
- header: header.content-type 请求头对象 ## 用例执行
- 、生成脚手架
- 、编写脚手架中testcase下YAML模版用例
- 、切换到testcase目录
- 、amt -dir testcase 自动运行testcase下YAML用例
- 、自动生成测试报告Html ## 框架基本配置
- 、通过命令打开框架config.yaml
- 、amt -config set
- 、修改基本配置,并保存 ## 代码打包与上传PyPi ### 通过setuptools工具进行框架打包,需要编写setup.py - 打包:python3 setup.py bdist_wheel - 上传PyP: twine upload dist/*
效果图:控制台模式,和报告模式
httptesting HTTP(s)接口自动化测试框架的更多相关文章
- 接口测试入门(4)--接口自动化测试框架 / list和map用法 / 随机选取新闻 (随机数生成) / 接口相关id映射
一.接口自动化测试框架 为了更好的组织测试方法,测试用例并且持续集成,我们选择了 java+testNG(测试用例组织)+gitlab(代码版本管理)+Jenkins(持续集成工具) 作为一整套的自 ...
- python版接口自动化测试框架源码完整版(requests + unittest)
python版接口自动化测试框架:https://gitee.com/UncleYong/my_rf [框架目录结构介绍] bin: 可执行文件,程序入口 conf: 配置文件 core: 核心文件 ...
- 接口自动化 [授客]基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0
基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0 by:授客 QQ:1033553122 博客:http://blog.sina.com.cn/ishou ...
- 接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]
基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版] by:授客 QQ:1033553122 由于篇幅问题,,暂且采用网盘分享的形式: 下载地址: [授客] ...
- 基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0
基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0 目录 1. 开发环境2. 主要功能逻辑介绍3. 框架功能简介 4. 数据库的创建 5. 框架模块详细介绍6. Tes ...
- 【转】robot framework + python实现http接口自动化测试框架
前言 下周即将展开一个http接口测试的需求,刚刚完成的java类接口测试工作中,由于之前犯懒,没有提前搭建好自动化回归测试框架,以至于后期rd每修改一个bug,经常导致之前没有问题的case又产生了 ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
基于python实现的http+json协议接口自动化测试框架(实用改进版) by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 目录 1. ...
- Python 基于python实现的http接口自动化测试框架(含源码)
基于python实现的http+json协议接口自动化测试框架(含源码) by:授客 QQ:1033553122 欢迎加入软件性能测试交流 QQ群:7156436 由于篇幅问题,采用百度网 ...
随机推荐
- Codeforces 1208F Bits And Pieces 位运算 + 贪心 + dp
题意:给你一个序列a, 问a[i] ^ (a[j] & a[k])的最大值,其中i < j < k. 思路:我们考虑对于每个a[i]求出它的最优解.因为是异或运算,所以我们从高位向 ...
- gradlew compileDebug --stacktrace -info
gradlew compileDebug --stacktrace -info 在命令行中进入项目的根目录,或者可以在Android studio的Terminal中直接操作也可以,然后敲入一个命令: ...
- 【LeetCode】队列 queue(共8题)
[346]Moving Average from Data Stream [353]Design Snake Game [363]Max Sum of Rectangle No Larger Than ...
- Sass-Opacity函数-rgba()函数
在前面介绍 RGB 函数一节中,还记得吗?有一个 rgba() 函数可以创建一个颜色,同时还可以对颜色修改其透明度.其可以接受两个参数,第一个参数为颜色,第二个参数是你需要设置的颜色透明值. > ...
- Sass函数:数字函数-round()函数
round() 函数可以将一个数四舍五入为一个最接近的整数: >> round(12.3) 12 >> round(12.5) 13 >> round(1.4999 ...
- CSS书写顺序提高可读性
属性书写顺序 [建议] 同一 rule set 下的属性在书写时,应按功能进行分组,并以 Formatting Model(布局方式.位置) > Box Model(尺寸) > Typog ...
- Flutter-AppBar
1.1 简介 AppBar “应用栏” 应用栏由工具栏组成,或者是工具栏和其他 widget 组合形成,例如 TabBar和FlexibleSpaceBar; 应用栏通常用于 Scaffold.app ...
- 获取配置文件yml的@ConfigurationProperties和@Value的区别
首先,配置文件的事,我没讲properties,这个写中文的时候,会有乱码,需要去Idea里面设置一下编码格式为UTF-8 还有,我们的类和配置文件直接关联,我用的是ConfigurationProp ...
- bzoj1488 [HNOI2009]图的同构 Burnside 引理
题目传送门 bzoj1488 - [HNOI2009]图的同构 bzoj1815 - [Shoi2006]color 有色图(双倍经验) 题解 暴力 由于在做题之前已经被告知是 Burnside 引理 ...
- 前端BFC布局学习
BFC,全称为(Block formatting context).按照我的理解是我们在某一条件下会触发BFC布局,会产生一定的效果. Block Formatting Contexts翻译为:块级元 ...