httprunner 4.x学习 -9.parameters 参数化

发布时间 2023-05-09 22:28:13作者: 上海-悠悠

前言

httprunner 4.x 实现参数化使用parameters 关键字,数据源有三种方式

  • 1.在yaml 文件中直接写测试数据源
  • 2.测试数据源写到csv文件
  • 3.自定义函数,函数返回列表形式数据

参数配置

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

  • 独立参数单独进行定义;
  • 多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)进行连接。

数据源指定支持三种方式:

  • 在 YAML/JSON 中直接指定参数列表:该种方式最为简单易用,适合参数列表比较小的情况
  • 通过内置的 parameterize(可简写为P)函数引用 CSV 文件:该种方式需要准备 CSV 数据文件,适合数据量比较大的情况
  • 调用 debugtalk.py 中自定义的函数生成参数列表:该种方式最为灵活,可通过自定义 Python 函数实现任意场景的数据驱动机制,当需要动态生成参数列表时也需要选择该种方式

三种方式可根据实际项目需求进行灵活选择,同时支持多种方式的组合使用。
假如测试用例中定义了多个参数,那么测试用例在运行时会对参数进行笛卡尔积组合,覆盖所有参数组合情况。

单个参数时参数化

先准备测试数据,准备四组登录用的账号和密码,账号为test1,test2,test3,test4,密码统一设置为123456。

参数user账号数据,设置对应的值 ["test1", "test2", "test3", "test4"],定义单个参数用variables,定义参数化用parameters

# 作者-上海悠悠 wx:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    parameters:
        user: [test1, test2, test3, test4]

teststeps:
-
  name: post
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${user}
      password: "123456"
  validate:
    - eq: [status_code, 200]

如果参数化里面的数据只有一个,比如psw对应的值只有一个,parameters 也可以设置 password的值

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    parameters:
        user: [test1, test2, test3, test4]
        password: 123456

variables 和 parameters 设置相同名称变量时,parameters 优先级大于variables
完整的 login_params.yml 脚本如下

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    variables:
        user: test
        password: 123456
    parameters:
        user: [test1, test2, test3, test4]


teststeps:
-
  name: post
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${user}
      password: ${password}
  validate:
    - eq: [status_code, 200]

运行用例,会自动生成四个测试用例

hrp run test_p2.yml --gen-html-report

关联性的参数化

上面的案例多个账号,密码都是一样的,如果密码不一样呢?上面的就行不通了,所以针对于一个账号对应一个密码,这种一一对应的关系,可以用关联性的参数化

# 作者-上海悠悠 wx:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    parameters:
        user-password:
        - [test1, "123456"]
        - [test2, "123456"]
        - [test3, "123456"]
        - [test4, "123456"]

teststeps:
-
  name: post
  request:
    method: POST
    url: http://httpbin.org/post
    json:
      username: ${user}
      password: ${password}
  validate:
  - eq: [status_code, 200]

笛卡尔积组合

比如测试账号有四种["test1", "test2", "test3", "test4"],密码也有四种 ["123456", "123456", "123456", "123456"]
用笛卡尔积组合的话,就是4*4=16种组合

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    parameters:
        user: [test1, test2, test3, test4]
        password: ["123456", "123456", "123456", "123456"]

teststeps:
-
  name: post
  request:
    method: POST
    url: http://www.example.com/
    params:
      username: ${user}
      password: ${password}
  validate:
  - eq: [status_code, 200]

这样运行会生成16组用例