httprunner+pytest+allure+Jenkins接口自动化一
在这之前搞了postman GitHub Jenkins email html report接口自动化,现在换httprunner方案。
【本地环境】
工作电脑是Windows,在github上下载Windows压缩包安装即可。
下载的是这个:hrp-v4.3.0-windows-amd64.tar.gz
GitHub地址:Releases · httprunner/httprunner · GitHub
安装完成后本地可以使用hrp的相关命令。
【创建项目】
在命令行窗口中创建httprunner项目,我创建的是python项目:
hrp startproject demo --py
创建过程可以指定目录或者在指定目录下创建,名称可以自己取,demo只是举个例子。
【编写脚本】
刚开始写的时候无从下手,最好的方法是用hrp convert 将har文件转换成python脚本,代码结构一目了然,后面就知道怎么写了,har文件用Charles导出。同理,想写yaml或json格式的脚本也可以进行相应的转换。
hrp convert gz_api_auto/har/gz_login.har --to-pytest --output-dir gz_api_auto/testcases
转换完成后会同时生成py和json两个文件:
用pycharm打开生成的httprunner项目,打开刚才转换的py文件,提示没有httprunner安装包时,安装即可:
通过观察示例中的脚本发现,Config和Step提供的方法都可以用.pycharm点提示出来:
config用来配置一些基本信息,例如:
.variables(),用来声明接口调用过程中的公用参数,当切换环境时可以和base_url一同修改;
.base_url(),在切换环境或切换域名时只要修改这一处即可;
.verify(),这是requests.post中固有的参数;
.export(),用来声明结果调用过程中需要传递的参数,例如,user id、session id、token等
teststeps是具体调用接口的地方了,每个Step就是对接口的一次调用,我们写的接口测试用例和接口自动化的地方就在这了。httprunner最大的特点也在这里,一个接口的调用是通过链式调用完成的,在这个过程中只需要引用需要的方法并传递相应的参数就行了。在这里没有对数据的处理,这样就显得很清晰。数据的处理都放在debugtalk.py中,定义好之后,在Step中调用即可。如果需要复杂的断言也在debugtalk.py中定义相应的辅助函数,在Step中调用即可。
-
teststeps = [
-
Step(
-
RunRequest("登录接口")
-
.post("/v1/user/login")
-
.with_params(
-
**{"t": "${gz_timestamp()}", "uuid": "${gz_uuid()}"}
-
)
-
.with_headers(
-
**gz_headers()
-
)
-
.with_data(
-
{
-
"countryAbbr": "$countryAbbr",
-
"countryCode": "$countryCode",
-
"email": "$email",
-
"pwd": "${gz_md5($pwd)}",
-
"region": "$region",
-
"type": "$type",
-
}
-
)
-
.extract()
-
.with_jmespath("body.data.sid", "sid") # 获取sid
-
.with_jmespath("body.data.uid", "uid") # 获取uid
-
.validate()
-
.assert_equal("status_code", 200, "断言http状态code")
-
.assert_equal(
-
'headers."Content-Type"',
-
"application/json; charset=utf-8",
-
"断言返回头的Content-Type"
-
)
-
.assert_equal("body.errmsg", "成功", "断言errmsg")
-
.assert_equal("body.errno", 0, "断言errno")
-
),
-
]
.post(),请求地址的相对路径;
.with_params(),请求地址中的query部分,即?后面的部分,一般是时间戳或唯一标识等;
.with_headers(),我把header放在debugtalk.py中,作为公共头使用,如有调整,只需要修改一处即可;
.with_data(),body部分
.wctract()he .with_jmspath()成对出现,可以多次提取,但记住引用顺序
【注意点】
1、hrp中对变量的引用有两种形式,分别是$abc和${abc},看官方文档的描述,这两种引用基本没有去比,只有在特殊情况下,使用${abc}即可,但实际使用过程中这两种形式是有区别的,不是通用的,例如:gz_md5是debugtalk.py中的函数,如果写成以下的形式是不能执行的:
"pwd": "${gz_md5(${pwd})}",
会将其解析为:"pwd": "${gz_md5(xxxx)}",
正确的写法是:"pwd": "${gz_md5($pwd)}",不带{}的,
所以后续对变量的调用我统一使用$abc的形式。
2、我把header放到了debugtalk.py中做成辅助函数,在Step中调用时不能按照${gz_headers()}的方式调用,只能写成.with_headers(**gz_headers())。
【其他】
httprunner学习:
1、官方文档:🚀 快速上手 | HttpRunner。
2、使用实践:HttpRunner V3.x 从入门到精通 - 尘世风 - 博客园 (基于hrp3.x,有些地方不适用4.x,具体参考官文档,例如hrp convert)。
--------------------------------------------------------------------------------------------------------------------------------
后面持续更新,在使用过程中遇到的问题都会整理并记录下来
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggbhab
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01