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 由于篇幅问题,采用百度网 ...
随机推荐
- Swoole 简单学习(2)
Swoole 简单学习(2) swoole之tcp服务器: //创建tcp服务器new swoole_server(string $host,int $port,int $mode=SWOOLE_PR ...
- [BZOJ3669] [NOI2004] 魔法森林 LCT维护最小生成树
题面 一开始看到这道题虽然知道是跟LCT维护最小生成树相关的但是没有可以的去想. 感觉可以先二分一下总的精灵数,但是感觉不太好做. 又感觉可以只二分一种精灵,用最小生成树算另一种精灵,但是和似乎不单调 ...
- python基础:11.列表对象属性排序
def __lt__ def __gt__ def __repr__
- note2
- 【leetcode】1017. Convert to Base -2
题目如下: Given a number N, return a string consisting of "0"s and "1"s that represe ...
- mobx学习笔记04——mobx常用api
1 可观察的数据(observable) observable是一种让数据的变化可以被观察的方法. 那些数据可被观察? -原始类型 String.Number.Boolean.Symbol -对象 - ...
- php获取linux服务器CPU、内存、硬盘使用率的实现代码
define("MONITORED_IP", "172.16.0.191"); //被监控的服务器IP地址 也就是本机地址 define("DB_SE ...
- 新建工程spring boot
新建工程spring boot 使用Maven管理, 在官网(http://atart.spring.io)下载demo后,加入依赖 <dependency> <gr ...
- python的迭代器(转自廖雪峰老师python基础)
我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list.tuple.dict.set.str等:一类是generator,包括生成器和带yield的generato ...
- 服务器上的 IPProxy代理设置
1.window 平台 CCProxy 安装包 传送门: http://www.xue51.com/soft/2794.html 该页面详细的说明了ccproxy怎么安装.怎么破jie.... 下面老 ...