Fork me on GitHub

httprunner 4.x学习 - 10参数化(parameters)引用csv数据文件、函数

前言

实现参数化使用parameters 关键字,数据源有三种方式:

  1.在yaml 文件中直接写测试数据源(适合数据量比较小的情况)

  2.使用csv文件作为测试数据源(适合数据量比较大的情况)

  3.自定义函数,函数返回列表形式数据(适合处理较复杂数据源的情况)

参数化-数据源csv文件

对于 CSV 数据源文件,需要遵循如下几项约定的规则:

  1.CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;

  2.若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号;

  3.在 YAML/JSON 文件引用 CSV 文件时,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。

例如,username的参数取值范围为admin1,admin2,admin3, admin4,那么我们就可以创建 user.csv,放到项目根目录下的data目录下,并且在文件中按照如下形式进行描述。
data/ user.csv

username
admin1
admin2
admin3
admin4

然后在 YAML/JSON 测试用例文件中,就可以通过内置的 parameterize(可简写为 P)函数引用 CSV 文件。
test_csv.yml

config:
  name: csv参数化
  parameters:
    username: ${P(data/user.csv)}

teststeps:
-
  name: post
  request:
    method: POST
    url: ${ENV(base_url)}/login
    json:
      username: ${username}
      password: "quxue2023"

  validate:
    - eq: [status_code, 200]
    - eq: [headers."Content-Type", "application/json"]

即 P 函数的参数(CSV 文件路径)是相对于项目根目录的相对路径。
当然,这里也可以使用 CSV 文件在系统中的绝对路径,不过这样的话在项目路径变动时就会出现问题,因此推荐使用相对路径的形式。

使用命令行执行 hrp run testcases\login_imos_csv.yml --gen-html-report 会自动生成4个测试用例

参数化-csv 几组数据源

data/username_password.csv 文件测试数据

username,password
admin1,123456
admin2,123456
admin3,123456
admin4,123456

测试用例

config:
  name: csv参数化
  parameters:
    username-password: ${P(data/username_password.csv)}

teststeps:
-
  name: post
  request:
    method: POST
    url: ${ENV(base_url)}/login
    json:
      username: ${username}
      password: ${password}

  validate:
    - eq: [status_code, 200]
    - eq: [headers."Content-Type", "application/json"]

执行:hrp run testcases\login_imos_csv.yml --gen-html-report

参数化-外部函数

用 debugtalk.py 中自定义的函数生成参数列表,生成的参数列表必须为 list of dict 的数据结构。

需对 user_id 进行参数化数据驱动,那么就可以在 debugtalk.py 中定义一个函数,返回参数列表。

def get_username_password():
    return [
        {"username": "admin1", "password": "123456"},
        {"username": "admin2", "password": "123456"},
        {"username": "admin3", "password": "123456"},
        {"username": "admin4", "password": "123456"}
    ]
config:
  name: 外部函数参数化
  parameters:
    username-password: ${get_username_password()}

teststeps:
-
  name: post
  request:
    method: POST
    url: ${ENV(base_url)}/login
    json:
      username: ${username}
      password: ${password}

  validate:
    - eq: [status_code, 200]
    - eq: [headers."Content-Type", "application/json"]

 

 

 


 

posted @ 2024-04-24 14:18  测栈云  阅读(144)  评论(0)    收藏  举报