前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >httprunner 4.x学习 - 10.参数化(parameters)引用外部 csv 数据文件 和函数

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

作者头像
上海-悠悠
发布2023-08-22 11:19:43
3180
发布2023-08-22 11:19:43
举报
文章被收录于专栏:从零开始学自动化测试

前言

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

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

独立参数

对于已有参数列表,并且数据量比较大的情况,比较适合的方式是将参数列表值存储在 CSV 数据文件中。 对于 CSV 数据文件,需要遵循如下几项约定的规则:

  • CSV 文件中的第一行必须为参数名称,从第二行开始为参数值,每个(组)值占一行;
  • 若同一个 CSV 文件中具有多个参数,则参数名称和数值的间隔符需实用英文逗号;
  • 在 YAML/JSON 文件引用 CSV 文件时,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。

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

代码语言:javascript
复制
user
test1
test2
test3
test4

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

代码语言:javascript
复制
config:
    name: login case
    parameters:
        user: ${P(data/user.csv)}

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

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

使用命令行执行

代码语言:javascript
复制
hrp run test_csv.yml --gen-html-report

会自动生成4个测试用例

csv 存放 user 和 password 数据

data/user_password.csv 文件测试数据

代码语言:javascript
复制
# 作者-上海悠悠 wx:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
    name: login case
    parameters:
        user-password: ${P(data/user_password.csv)}

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

测试数据读取外部函数

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

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

代码语言:javascript
复制
# 作者-上海悠悠 wx:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/

def get_user_id():
    return [
        {"user_id": 1001},
        {"user_id": 1002},
        {"user_id": 1003},
        {"user_id": 1004}
    ]

然后,在 YAML/JSON 的 parameters 中就可以通过调用自定义函数的形式来指定数据源。

代码语言:javascript
复制
config:
    name: "demo"
    parameters:
        user_id: ${get_user_id()}

另外,通过函数的传参机制,还可以实现更灵活的参数生成功能,在调用函数时指定需要生成的参数个数。

对于具有关联性的多个参数,实现方式也类似。

例如,在 debugtalk.py 中定义函数 get_account,生成指定数量的账号密码参数列表。

代码语言:javascript
复制
# 作者-上海悠悠 wx:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/

def get_account(num):
    accounts = []
    for index in range(1, num+1):
        accounts.append(
            {"user": "test%s" % index, "password": "123456"},
        )

    return accounts

那么在 YAML/JSON 的 parameters 中就可以调用自定义函数生成指定数量的参数列表。

代码语言:javascript
复制
config:
    name: "demo"
    parameters:
        username-password: ${get_account(4)}

在 debugtalk.py 中定义 get_user_password 函数,返回 4 个用户名和密码数据。

代码语言:javascript
复制
def get_account(num):
    accounts = []
    for index in range(1, num+1):
        accounts.append(
            {"user": "test%s" % index, "password": "123456"},
        )
    return accounts

if __name__ == '__main__':
    print(get_account(4))

生成 list of dict 数据格式

代码语言:javascript
复制
[
{'user': 'test1', 'password': '123456'}, 
{'user': 'test2', 'password': '123456'}, 
{'user': 'test3', 'password': '123456'}, 
{'user': 'test4', 'password': '123456'}
]

params_func.yml 文件内容

代码语言:javascript
复制
# 作者-上海悠悠 wx:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    parameters:
      user-password: ${get_account(4)}

teststeps:
-
  name: post
  request:
    method: GET
    url: http://www.example.com/
    params:
      username: ${user}
      password: ${password}
  validate:
  - eq: [status_code, 200]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 独立参数
  • csv 存放 user 和 password 数据
  • 测试数据读取外部函数
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档