HttpRunner的基本使用

一:HttpRunner简介及安装

HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等 网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型。简单易用,功能强 大,具有丰富的插件化机制和高度的可扩展能力。

1.HttpRunner 的特征:

  • 支持以yaml和json格式定义测试案例
  • 支持响应验证
  • 支持初始化清除机制
  • 支持套件级别的用例管理
  • 支持pytest命令,hrun底层封装的pytest(v3新特性)
  • 支持allure生成测试报告(v3新特性)
  • 支持性能测试(v4 Golong)

2.安装

 pip install httprunner # 截止到2023年5月,最新版本为4.3.0
  • httprunner :主命令,用于所有功能
  • hrun :指令 httprunner run 的别名,用于运行YAML/JSON/Pytest 测试用例
  • hmake :指令 httprunner make 的别名,将 YAML/JSON用例转换成 pytest 用例
  • httprunner -V :查看版本
  • httprunner -h :查看帮助

二:HttpRunner测试用例编写之ymal

在 httprunner 中,测试用例组织主要基于三个概念:

  • 测试用例集( testsuite ): 对应一个 YAML/JSON/Python 文件,包含单个或多个测试用 例文件
  • 测试用例( testcase ): 对应一个 YAML/JSON/Python 文件,包含单个或多个测试步骤
  • 测试步骤( teststep ): 对应 YAML/JSON/Python 中 teststeps 下的一个节点,描述单次接口测试的全部内容,包括发起接口请求、解析响应结果、检验结果等,对于单个 文件来说,数据存储结构为 的形式,其中可能包含一 个全局配置项( config )和若干个测试步骤
  • config :作为整个测试用例的全局配置项
  • teststeps :对应单个测试步骤( step ),测试步骤存在顺序关系,运行时将从前往 后依次运行各个测试步骤
    testcase 对应的 YAML 格式如下所示:
config:
  name: 案例名称
  base_url: http://#url
  verify: False
  export: [myCookie,courseId] #导出用例变量
  variables: #全局变量 优先级大于parameters
  parameters: #参数化

teststeps:
  -  name: 获取登录cookie #步骤名
     testcase: login-5.yaml #步骤路径

  -  name: 新增课程API
     validate: #断言
       - check: $retcode
         assert: equals
         expect: 0
         msg: assert response retcode
     extract: #响应结果提取
       retcode: body.retcode
       courseId: body.id
     request: #请求
       method: POST
       url: /api/mgr/sq_mgr/
       headers: {
           "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
       }
       cookies:#cookie缓存,#如果是token 就放在headers里
         sessionid: $myCookie
       body: #请求参数
         action: add_course
         data: '{"name":"初中英语99992","desc":"","display_idx":1}'




- 1.全局变量

config:
name: 用户登录
variables: #全局变量
    username: auto
    password: sdfsdfsdf
teststeps:
 - name: 登录
     request:
       data:
         username: $username
         password: $password

2- 步骤变量

 teststeps:
- name: 登录
     variables:#步骤变量
       username: auto
       password: sdfsdfsdf

3.响应结果提取

teststeps:
- name: 登录
     extract: #响应结果提取
       retcode: body.retcode
       cookie: cookies.sessionid

4.导出用例变量
就是把A测试用例执行后产生的结果,供B测试用例使用

config:
name: 用户登录 
export: [cookie] #导出用例变量
teststeps:
 - name: 登录
     extract:
       retcode: body.retcode
       cookie: cookies.sessionid

5.变量的高级应用( debugtalk.py)
在项目的根目录中创建一个 debugtalk.py(每个项目有且只有一个)。存储自定义的 python 函数,在测试用例中调用的函数均在此文件中定义

  • 全局变量:可以通过调用 debugtalk.py 文件的函数来取值。(注:支持返回值为字 典、字符串等类型)
  • 局部变量:也可以通过调用 debugtalk.py 文件的函数来取值。(注:不支持返回值 为字典类型)
  • 使用方法:${函数名()}
#第一步:定义函数
 def login_variables():
    return {'userName': 'auto', 'passWord': 'sdfsdfsdf','retCode': 0}
#第二步:全局变量替换
config:
name: 用户登录
variables: ${login_variables()}

6…env文件
.env 文件用于定义环境变量。在项目根目录下创建 .env 文件(文件名就是 .env 不要忘记点),在自动化测试中,有时需要借助环境变量实现某些 特定的目的,常见的场景包括:

  • 切换测试环境
  • 切换测试配置
  • 存储敏感数据(从信息安全的角度出发)
  • 引用环境变量的语法如下:
    ${ENV(变量名)}
第一步:定义环境变量(.env 中)
url=http://
第二步:使用环境变量
config:
  name: 用户登录-7全局变量
  base_url: ${ENV(url)}

7.初始化与清除楚机制
在hr中,实现数据初始化与清除机制的方式是利用 hook 机制,在请求前和请求后 调用钩子函数。目前HR只支持步骤层面的hook,用例层面的未实现。

teststeps:
 -
name: 用户名密码登录 
setup_hooks:
    - ${hook_setup()}
  teardown_hooks:
    - ${hook_teardown()}

8.参数化
需要 使用 parameters 关键字,定义参数名称并指定数据源取值方式

  • 独立参数:如: host_url , retcode 这些
  • 关联参数:如: username-password ,用户名和密码直接存在关联的,也就是说:在
    通常情况下,用户1不能使用用户2的密码。所以需要关联
    根据参数的来源不同,可分为:
  • 直接指定列表—即直接在 yaml 或 json 文件中,写死参数列表(在参数量少的情况 下)。
config:
name: 用户登录
base_url: http://
parameters: #直接参数
    username: [ sq001,sq002 ]
    password: [ sdfsdfsdf,sdfsdfsdf ]
config:
name: 用户登录
base_url: http://
parameters: #关联参数
    username-password:
      - [ sq001,sdfsdfsdf ]
      - [ sq002,sdfsdfsdf ]
  • 引用自定义函数—即 debugtalk.py 模块,适合没有参数列表的情况 引用
 # debugtalk.py
def get_login_data():
    return [
        {'username': 'sq001', 'password': 'sdfsdfsdf'},
        {'username': 'sq002', 'password': 'sdfsdfsdf'},
        {'username': 'sq003', 'password': 'sdfsdfsdf'},
]

config:
name: 用户登录
base_url: http://124.223.33.41:7081
parameters:
username-password: ${get_login_data()}

  • CSV文件—适合已有参数列表且数据量大的情况
    /data/account.csv 文件中
username,password
sq001,sdfsdfsdf
sq002,sdfsdfsdf


config:
name: 用户登录-1.1 直接指定参数列表、2.1 关联参数的使用、2.2 引用自定义函
数
base_url: http:
verify: False
parameters:
    username-password: ${P(data/account.csv)}

你可能感兴趣的:(自动化)