HttpRunner使用中的一些问题记录

2023-11-04

背景:在了解接口自动化框架的过程中,看到有介绍说HttpRunner是一款不错的开源框架。所以,简单试用了一下。虽然有中文使用手册的帮助,但在结合自己项目接口的使用中还是遇到一些问题。在解决这些问题之后,也对这一框架的使用有了更深的了解。

环境:Python3.6 + HttpRunner1.5.13 + har2case 0.1.10

问题:

1. 录制脚本时,保存成 HAR 格式的文件。

1)使用Fiddler4抓包,并接口的请求和响应结果保存为 .har 格式的文件。选中接口,然后点击 Decode。

2)选择菜单栏中,File-》Export Sessions-》Selected Sessions,选择HTTPArchive v1.1类型。

3)保存文件类型如图所示。

2. 文件格式的转换

上述步骤中保存的.har文件,需要转换成yaml或json文件。在文件所在目录,使用cmd,执行命令: har2case xx.har xx.json

3. 认识JSON文件。引用中文手册中的例子

[
  {
    "config": {
      "name": "testset description",
      "variables": [],
      "request": {
        "base_url": "",
        "headers": {
          "User-Agent": "python-requests/2.18.4"
        }
      }
    }
  },
  {
    "test": {
      "name": "/api/get-token",
      "request": {
        "url": "http://127.0.0.1:5000/api/get-token",
        "headers": {
          "device_sn": "FwgRiO7CNA50DSU",
          "user_agent": "iOS/10.3",
          "os_platform": "ios",
          "app_version": "2.8.6",
          "Content-Type": "application/json"
        },
        "method": "POST",
        "json": {"sign": "958a05393efef0ac7c0fb80a7eac45e24fd40c27"}
      },
      "validate": [
        {"eq": ["status_code", 200]},
        {"eq": ["headers.Content-Type", "application/json"]},
        {"eq": ["content.success", true]},
        {"eq": ["content.token", "baNLX1zhFYP11Seb"]}
      ]
    }
  }

]

  • test: 即一个用例
  • name:在report中显示的名称
  • request:包含请求的url,headers,method,body
  • validate:期望值,也就是要验证的值。根据这里的key,取出响应中的值与期望做比较。如,{"eq": ["status_code", 200]}。会取出响应中"status_code"的值,与200比较。

4.响应体中有数组,如何提取值。

1)首先,在validate之前,request之后,添加提取响应体的代码格式如:"extract": [{"变量名": "变量的取值路径"}]。如,"extract": [{"token": "content.token"}]

2)项目中接口返回的层级结构是这样的:响应体-》res-》token(列表)。因此这里,需要这样写:"extract": [{"token": "content.res.token.0"}]

  • content:响应体
  • res:响应体第一层
  • token:响应体第二层。且为一个列表
  • 0:表示取该列表的第一元素

5.全局变量。请求中有一些值是每个接口都要用到的,例如,ip,port,headers。因此可以提取出来作为全局变量,放在"config"中。

{
    "config": {
      "name": "testset description",
      "variables": [],
      "request": {
        "base_url": "",
        "headers": {
          "User-Agent": "python-requests/2.18.4"
        }
      }
    }
 }
  • base_url:存放ip,port等信息。
  • headers:存放共有的headers信息。

修改如下:

{
    "config": {
      "name": "testset description",
      "variables": [],
      "request": {
        "base_url": "http://127.0.0.1:5000/api",
        "headers": {
          "User-Agent": "python-requests/2.18.4",   # 注意这里的 ,
          "Content-Type": "application/json;charset=UTF-8"
        }
      }
    }
 }

去掉用例中的相同部分。变为:"request": { "url": "/get-token"...  , headers中的“Content-Type”去掉。

6.关联变量。

1)登录接口返回的token,在后面其他接口中都需要使用。除了在登录接口中提取外,还需要在其他接口中添加。这里token需要放到其他请求的headers中。因此在其他请求的request中添加如下公式:

"request": {
        "url": "http://127.0.0.1:5000/api/get-token",
        "headers": {
          "x-auth-token": "$token"   #这里$为引用变量的意思,"token"即在登录接口中extract里定义的变量名
        }

2)从前面的请求中提取响应体中的值,作为下一个请求的输入。

      a)提取值的部分与前面提取token相同。例如这里需要提取的变量为:"extract":[{"regionIds": "content.res"}]。这里的res是一个列表,在下一个接口中,只需要该列表中的某一个元素。因此,需要格外增加判断。regionIds后面的接口会引用该变量。

      b)HttpRunner中,支持“debugtalk.py”这样的热插拔。

            i. 在用例,即JSON文件同级目录下,新建 debugtalk.py。

            ii. 根据业务逻辑增加代码。如

            SECRET_KEY = "DebugTalk"

            def get_region_id(args):

                   for i in range(len(args)):

                        if "myRegion" == args[i]["regionName"]:    # 找到指定的regionName,然后获取其id

                            regionId = args[i]["id"]

                            return regionId

       c)在下一个请求中使用。这里是在uri中引用的regionId。

"request": {
        "url": "/${get_region_id($regionIds)}" #格式:${fun($var)}。fun为.py中的函数名,var为前一接口提取的变量名
        "headers": {
          "x-auth-token": "$token"
        },

参考资料:

http://cn.httprunner.org/quickstart/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpRunner使用中的一些问题记录 的相关文章

  • Typecho博客搭建 实现公网访问内网站点

    文章目录 前言 1 环境安装 2 安装Typecho 3 安装cpolar内网穿透 4 固定公网地址 5 配置Typecho 前言 Typecho是一款PHP语言编写的开源博客程序 它是一个轻量级的内容管理系统 专注于博客领域 支持多用户

随机推荐

  • crontab命令详解,慎用crontab -r命令

    crontab命令详解 慎用crontab r命令 常用命令 常用命令 crontab e是编辑 crontab r 是删除 crontab l是查看 crontab r命令万恶 且不可恢复 切记勿用
  • Android 系统开发系列(1):Android 12 源代码下载、编译和刷机

    Android 12 正式版 已经发布 https mp weixin qq com s OiFSWEnc 0N2z7JYWTJluw 本文就带大家下载和编译最新的 Android 12 代码 本地编译的代码有下面几个好处 可以刷真机 方便
  • LeetCode 349. 两个数组的交集

    题目链接 https leetcode cn problems intersection of two arrays 思路如下 由题目可知 nums1 数组和 nums2 数组中的元素的大小都在 0 1000 0 1000
  • 《画解数据结构》(2 - 4)- AVL 树

    画解数据结构 2 4 AVL 树
  • ChatGPT的未来:研究和开发的领域,渴望带来哪些变革?

    ChatGPT作为一种基于自然语言处理 NLP 技术的人工智能机器人 其未来研究和开发的领域包括但不限于以下几个方面 1 对话质量的提高 ChatGPT目前仍然存在一些语义理解和生成上的问题 未来的研究和开发将会着重于解决这些问题 提高Ch
  • 网站信息收集及nmap的下载使用

    本专栏是笔者的网络安全学习笔记 一面分享 同时作为笔记 前文链接 WAMP DVWA sqli labs 搭建 burpsuite工具抓包及Intruder暴力破解的使用 目录扫描 请求重发 漏洞扫描等工具的使用 信息收集 我们在对一个网站
  • Flash Player 8 中的安全性更改

    要求 用户级别 中级 Macromedia 已更改了 Flash Player 8 中应用于本地 Flash 内容的安全模型 默认情况下 从用户本地文件系统而不是通过 HTTP 运行的 Flash 应用程序在 Flash Player 8
  • petalinux添加AD9361驱动

    文章目录 一 准备工具 二 步骤 需要 petalinux2016 2 包含AD9361驱动的Linux内核 xcomm zynq 4 4 一 准备工具 ADI提供的AD9361Linux驱动 https wiki analog com r
  • tomcat高并发下优化详解及连接数和线程池

    高并发环境下 我知道优化配置tomcat 对连接数和线程池作修改 最重要的是connector的协议Http Connector使用NIO 而不是默认的AJP Connector 当时也没有仔细研究其原理 现在来为以上这些设置做一下剖析 要
  • Java private类构造函数笔记

    前言 最近在看Android源码的时候遇到了private类构造函数 于是写了一个测试小程序 帮助理解 代码 class TestPrivate private TestPrivate System out println TestPriv
  • PAT题解——Basic Level——1094 谷歌的招聘

    题目链接 https pintia cn problem sets 994805260223102976 problems 1071785997033074688 题面 本题要求你编程解决一个更通用的问题 从任一给定的长度为 L 的数字中
  • 设计模式(十五)中介者模式

    版权声明 转载必须注明本文转自晓 晨的博客 http blog csdn net niunai112 目录 目录 导航 前言 例子 总结 优点 缺点 Git地址 导航 设计模式之六大设计原则 设计模式 一 单例模式 设计模式 二 工厂模式
  • appuploader不是开发者账号

    Appuploader是一款可以帮助开发者上传iOS应用到Apple App Store的工具 很多开发者都知道 在上传应用到App Store之前 需要创建开发者账号并获得苹果官方的认证才能进行上传 但是 有些开发者可能并不想去注册开发者
  • JS生成uuid的四种方法

    在开发过程中 有时候需要js生成全局唯一标识符 在java中可以使用uuid 但是JS中没有现成的函数 总结了一下 JS生成唯一标识符的几种方法 第一种 function guid return xxxxxxxx xxxx 4xxx yxx
  • 阈值分割方法总结

    阈值是界限的意思 阈值分割就是以一个合适的像素值作为界限将图像处理成高对比度 容易识别的图像的一种方法 threshold double cv threshold cv InputArray src 输入图像 cv OutputArray
  • 网易实况足球获取服务器信息,网易实况足球国际服和国服数据互通吗_游戏评价介绍...

    网易实况足球国际服和国服数据互通吗 游戏评价介绍 2018 03 14 17 34 11 网易实况足球在3月13日正式命名为实况王者集结 其实这款手游在国际服已经上线了 很多喜欢足球的小伙伴也玩过了这款游戏 很多小伙伴因为外国服务器不稳定想
  • Flask入门学习教程

    Flask学习 文章目录 Flask学习 1 简介 2 安装 3 最小的应用 4 路由 5 变量规则 6 URL构建 7 HTTP方法 8 文件存放 9 渲染模板 10 Request对象 11 Cookie 12 会话Session 实例
  • Java 多线程 --- 线程同步 内部锁synchronized

    Java 多线程 线程同步 内部锁synchronized Intrinsic Lock Monitor synchronized 关键字 synchronized 修饰实例方法 synchronized 修饰代码块 synchronize
  • Vmware 常用命令

    一 VMware ESX Command 看你的esx版本 vmware v 查看显示ESX硬件 内核 存储 网络等信息 esxcfg info a 显示所有相关的信息 esxcfg info w 显示esx上硬件信息 列出esx里知道的服
  • HttpRunner使用中的一些问题记录

    背景 在了解接口自动化框架的过程中 看到有介绍说HttpRunner是一款不错的开源框架 所以 简单试用了一下 虽然有中文使用手册的帮助 但在结合自己项目接口的使用中还是遇到一些问题 在解决这些问题之后 也对这一框架的使用有了更深的了解 环