HttpRunner 概念

HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

相关操作

  1. 参数提取(extract)和参数引用($var)
  1. # 第一个接口/api/get-token的响应结果为:
  2. {"success": true, "token":"ZQkYhbaQ6q8UFFNE"}
  3. # 提取 token,采用 content.token
  4. 'extract':[
  5. {'token':'content.token'}
  6. ]
  7. # token 作为提取后的参数名称,可以在后续使用 $token 进行引用
  8. 'headers':{
  9. 'token':'$token',
  10. "Content-Type": "application/json",
  11. "device_sn": "FwgRiO7CNA50DSU",
  12. }
  1. 公共配置全局化
  1. {
  2. "config": {
  3. "name": "testcase description",
  4. "variables": [],
  5. "request": {
  6. "base_url":"http://127.0.0.1:5000",
  7. "headers": {
  8. "User-Agent":"python-requests/2.18.4",
  9. "device_sn": "FwgRiO7CNA50DSU",
  10. "Content-Type":"application/json"
  11. }
  12. }
  13. }
  14. }
  15. # 其中 name 为测试用例的名称,在测试报告中将作为标题
  1. debugtalk.py 文件中定义相关变量和函数
  1. import hashlib
  2. import hmac
  3. import random
  4. import string
  5. SECRET_KEY = "DebugTalk"
  6. def gen_random_string(str_len):
  7. random_char_list = []
  8. for _ in range(str_len):
  9. random_char = random.choice(string.ascii_letters + string.digits)
  10. random_char_list.append(random_char)
  11. random_string = ''.join(random_char_list)
  12. return random_string
  13. def get_sign(*args):
  14. content = ''.join(args).encode('ascii')
  15. sign_key = SECRET_KEY.encode('ascii')
  16. sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest()
  17. return sign
  1. 变量的申明(variables)、引用($var)和调用函数(${func($var)})
  1. # 申明变量:生成 15 位长度的随机字符串并赋值给 device_sn 的代码为:
  2. "variables": [
  3. {"device_sn": "${gen_random_string(15)}"}
  4. ]
  5. # 引用变量:使用 $user_agent、$device_sn、$os_platform、$app_version 根据签名算法生成 sign 值的代码
  6. "json": {
  7. "sign": "${get_sign($user_agent, $device_sn, $os_platform, $app_version)}"
  8. }
  1. 数据驱动
  1. # 创建用户的接口中对 user_id 进行参数化,参数化列表为 1001~1004,并且取值方式为顺序取值
  2. "config": {
  3. "parameters": [
  4. {"user_id": [1001, 1002, 1003, 1004]}
  5. ]
  6. }
  1. 测试运行
  1. # 运行单个测试用例( hrun 命令外加单个测试用例文件的路径)
  2. $ hrun filepath/testcase.yml
  3. # 运行多个测试用例使用 (hrun 命令外加多个测试用例文件的路径)
  4. $ hrun filepath1/testcase1.yml filepath2/testcase2.yml
  5. # 运行指定文件夹下所有的测试用例(使用 hrun 命令外加文件夹的路径):
  6. $ hrun testcases_folder_path
  7. # 测试用例在运行过程中,遇到失败时不再继续运行后续用例
  8. $ hrun filepath/testcase.yml --failfast
  9. # 显示指定日志级别以上的日志
  10. $ hrun tests/data/demo_parameters.yml --log-level debug
  1. 测试报告生成
  1. # 指定报告名称
  2. $ hrun docs/data/demo-quickstart-2.yml --html-report-name demo
  1. hook 机制,hook 函数定义在 debugtalk.py 里

    • 用例层,config 新增关键字 setup_hooks 和 teardown_hooks,为全局的,setup_hooks 在所有测试前执行,teardown_hooks 所有用例执行后执行一次。
    1. - config:
    2. name: basic test with httpbin
    3. request:
    4. base_url: http://127.0.0.1:3458/
    5. setup_hooks:
    6. - ${hook_print(setup)}
    7. teardown_hooks:
    8. - ${hook_print(teardown)}
    • 测试步骤层,test 中新增关键字 setup_hooks 和 teardown_hooks,为局部变量,当前测试用例测试前后执行
  1. "test": {
  2. "name": "get token with $user_agent, $os_platform, $app_version",
  3. "request": {
  4. "url": "/api/get-token",
  5. "method": "POST",
  6. "headers": {
  7. "app_version": "$app_version",
  8. "os_platform": "$os_platform",
  9. "user_agent": "$user_agent"
  10. },
  11. "json": {
  12. "sign": "${get_sign($user_agent, $device_sn, $os_platform, $app_version)}"
  13. }
  14. },
  15. "validate": [
  16. {"eq": ["status_code", 200]}
  17. ],
  18. "setup_hooks": [
  19. "${setup_hook_prepare_kwargs($request)}",
  20. "${setup_hook_httpntlmauth($request)}"
  21. ],
  22. "teardown_hooks": [
  23. "${teardown_hook_sleep_N_secs($response, 2)}"
  24. ]
  25. }
  26. # test 中 name 为测试步骤的名称,在测试报告中将作为测试步骤的名称
  1. 参数定义和数据源指定

    1. 参数名称的定义分为两种情况:

      • 独立参数单独进行定义;
      • 多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)进行连接。
    2. 数据源指定支持三种方式:
      • 在 YAML/JSON 中直接指定参数列表
      • 通过内置的 parameterize(可简写为P)函数引用 CSV 文件
      • 调用 debugtalk.py 中自定义的函数生成参数列表
  1. # user_id 通过引用 csv 文件
  2. - config:
  3. name: "demo"
  4. parameters:
  5. - user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
  6. - user_id: ${P(user_id.csv)}
  7. - username-password: ${get_account(10)}
  8. # 关联性的多个参数
  9. - config:
  10. parameters:
  11. - username-password:
  12. - ["user1", "111111"]
  13. - ["user2", "222222"]
  14. - ["user3", "333333"]

参数定义详见:

https://cn.httprunner.org/advanced/parameters/

httprunner 使用总结的更多相关文章

  1. HttpRunner Manager接口自动化测试平台实践(Windows)

    1. 源码下载 github: https://github.com/HttpRunner/HttpRunnerManager 下载后放入项目目录,结构如下: 2.依赖环境  根据根目录require ...

  2. HttpRunner框架(一)

    HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 中文使用文档地址:h ...

  3. Httprunner学习

    一.简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求. 核心特性: 继 ...

  4. HttpRunner接口自动化测试框架

    简介 2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试 ...

  5. HttpRunner安装笔记(1)安装环境准备:pyenv安装

    HttpRunner建议在Python 3.4 及以上版本,但是centos有其他功能模块基于python2.7,所以使用pyenv安装多版本pyhon版本. pyenv 是一款特别好用的Python ...

  6. 接口自动化测试框架HttpRunner

    接口自动化测试框架 https://github.com/HttpRunner/HttpRunner http://debugtalk.com/post/ApiTestEngine-api-test- ...

  7. HttpRunner 参数化数据驱动

    HttpRunner 2.0 参数化数据驱动案例,废话不说,直接上干货. 1.测试用例目录结构      api:接口集 testcases:测试用例    testsuites:测试套件 data: ...

  8. 基于HttpRunner的接口自动化测试平台HttpRunnerManager(二)

    https://github.com/HttpRunner/HttpRunnerManager HttpRunnerManager Design Philosophy 基于HttpRunner的接口自 ...

  9. 接口自动化 Windows + HttpRunner 初探(一)

    运行环境 HttpRunner 是一个基于 Python 开发的测试框架,可以运行在 macOS.Linux.Windows 系统平台上. HttpRunner 的开发环境为 macOS + Pyth ...

随机推荐

  1. 手机端图片预览和缩放js

    转至:http://blog.sina.com.cn/s/blog_c342e3090102vcxu.html 1.手机端的图片选择和预览 <input type="file" ...

  2. TPshop学习

    笔记大纲: tpshop目录结构 功能模块 函数库 重要配置 助手函数 插件 模板 1.TPshop目录结构 目录结构(来自官方视频截图) 看这个图,目录结构一目了然.下面要讲的内容也是根据这个图展开 ...

  3. 抓取访客ip

    $realip = $_SERVER['REMOTE_ADDR'] $proxy_ip = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);//有用到代理 ...

  4. servlet填充Response时,数据转换之content-type

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值. 1. ...

  5. iOS与PHP/Android AES128 ECB NoPadding加密

    前言 谈谈AES加密,网上有很多的版本,当我没有真正在加密安全问题前,总以为百度出来某个AES加密算法就可以直接使用,实际上当我真正要做加密时,遇到了很多的坑,原来不是拿过来就能用的.写下本篇文章,记 ...

  6. 2018.10.12 NOIP模拟 棋盘问题(切比雪夫距离)

    传送门 貌似是防ak题? 考试的时候想到了做四次cdqcdqcdq于是给自己多套了一个lognlognlogn结果还MLEMLEMLE 0分.(记得最后5分钟调出来的时候是那么的欣喜 下来发现并不需要 ...

  7. 2018.09.17 bzoj1260: [CQOI2007]涂色paint(区间dp)

    传送门 区间dp简单题啊. 很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价. 这样可以O(n)O(n)O(n)枚举断点转移了啊. 显然如果断 ...

  8. DevExpress TextEdit Focus问题

    在标签切换时设置第一个TextEdit获取输入焦点无效,需要采用消息Post方式设置 //标签切换事件 xtraTabControl1.Selected += (s, e) => { if (e ...

  9. spring boot入门与进阶

    视频课程包含: SpringBoot入门.SpringBoot进阶.Spring Cloud微服务.Spring Ecosystem 微服务相关.Spring Boot 入门 IDEA 版本.Spri ...

  10. b2_trsd_EDSD_new

    # -*- coding:utf-8 -*- import re ss="./data/" year = '17A' filename = ss+'EDSD%s.txt'%year ...