• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

httprunner+pytest+allure+Jenkins接口自动化一

武飞扬头像
_可乐无糖
帮助1

在这之前搞了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中调用即可。

  1.  
    teststeps = [
  2.  
    Step(
  3.  
    RunRequest("登录接口")
  4.  
    .post("/v1/user/login")
  5.  
    .with_params(
  6.  
    **{"t": "${gz_timestamp()}", "uuid": "${gz_uuid()}"}
  7.  
    )
  8.  
    .with_headers(
  9.  
    **gz_headers()
  10.  
    )
  11.  
    .with_data(
  12.  
    {
  13.  
    "countryAbbr": "$countryAbbr",
  14.  
    "countryCode": "$countryCode",
  15.  
    "email": "$email",
  16.  
    "pwd": "${gz_md5($pwd)}",
  17.  
    "region": "$region",
  18.  
    "type": "$type",
  19.  
    }
  20.  
    )
  21.  
    .extract()
  22.  
    .with_jmespath("body.data.sid", "sid") # 获取sid
  23.  
    .with_jmespath("body.data.uid", "uid") # 获取uid
  24.  
    .validate()
  25.  
    .assert_equal("status_code", 200, "断言http状态code")
  26.  
    .assert_equal(
  27.  
    'headers."Content-Type"',
  28.  
    "application/json; charset=utf-8",
  29.  
    "断言返回头的Content-Type"
  30.  
    )
  31.  
    .assert_equal("body.errmsg", "成功", "断言errmsg")
  32.  
    .assert_equal("body.errno", 0, "断言errno")
  33.  
    ),
  34.  
    ]
学新通

.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
系列文章
更多 icon
同类精品
更多 icon
继续加载