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

httprunner 3.x学习11 - 参数化(parameters)引用外部 csv 数据文件

作者头像
上海-悠悠
发布2021-06-24 22:44:59
1.1K0
发布2021-06-24 22:44:59
举报

前言

httprunner 3.x参数化(parameters)数据源支持三种方式:

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

独立参数

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

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

例如,user_id 的参数取值范围为 1001~2000,那么我们就可以创建 user_id.csv,并且在文件中按照如下形式进行描述。

代码语言:javascript
复制
user_id
1001
1002
...
1999
2000

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

代码语言:javascript
复制
config:
    name: "demo"
    base_url: ${ENV(base_url)}
    parameters:
        user: ${P(data/user.csv)}

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

csv文件存放user数据

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

data/user.csv文件测试数据

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

testcases/params_csv.yml 文件引用 data/user.csv 文件语法${P(user.csv)}

代码语言:javascript
复制
# testcases/params_csv.yml
# 上海-悠悠,httprunner QQ交流群:717225969

config:
    name: login case
    base_url: ${ENV(base_url)}
    variables:
        user: test
        password: 123456
    parameters:
        user: ${P(data/user.csv)}

teststeps:
-
    name: step login
    request:
        url: /api/v1/login
        method: POST
        json:
            username: $user
            password: $password
    validate:
        - eq: [status_code, 200]
        - eq: [content.code, 0]
        - eq: [content.msg, login success!]
        - len_eq: [content.token, 40]

对应pytest脚本

代码语言:javascript
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\params_csv.yml

import pytest
from httprunner import Parameters

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseParamsCsv(HttpRunner):
    @pytest.mark.parametrize("param", 
                             Parameters({"user": "${P(data/user.csv)}"}))
    def test_start(self, param):
        super().test_start(param)

    config = (
        Config("login case")
        .variables(**{"user": "test", "password": 123456})
        .base_url("${ENV(base_url)}")
    )

    teststeps = [
        Step(
            RunRequest("step login")
            .post("/api/v1/login")
            .with_json({"username": "$user", "password": "$password"})
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", 0)
            .assert_equal("body.msg", "login success!")
            .assert_length_equal("body.token", 40)
        ),
    ]

if __name__ == "__main__":
    TestCaseParamsCsv().test_start()

csv存放user和psw数据

data/user_password.csv 文件测试数据

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

testcases/params_csv2.yml 文件引用 data/user_password.csv 文件

代码语言:javascript
复制
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
    name: login case
    base_url: ${ENV(base_url)}
    parameters:
        user-password: ${P(data/user_password.csv)}

teststeps:
-
    name: step login
    request:
        url: /api/v1/login
        method: POST
        json:
            username: $user
            password: $password
    validate:
        - eq: [status_code, 200]
        - eq: [content.code, 0]
        - eq: [content.msg, login success!]
        - len_eq: [content.token, 40]

对应pytest脚本

代码语言:javascript
复制
# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\params_csv2.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

import pytest
from httprunner import Parameters

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseParamsCsv2(HttpRunner):
    @pytest.mark.parametrize(
        "param", Parameters({"user-password": "${P(data/user_password.csv)}"})
    )
    def test_start(self, param):
        super().test_start(param)

    config = Config("login case").base_url("${ENV(base_url)}")

    teststeps = [
        Step(
            RunRequest("step login")
            .post("/api/v1/login")
            .with_json({"username": "$user", "password": "$password"})
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal("body.code", 0)
            .assert_equal("body.msg", "login success!")
            .assert_length_equal("body.token", 40)
        ),
    ]

if __name__ == "__main__":
    TestCaseParamsCsv2().test_start()

V3.x版本支持相对路径,文件路径为基于项目根目录(debugtalk.py 所在路径)的相对路径。如:data/user_id.csv

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 独立参数
  • csv文件存放user数据
  • csv存放user和psw数据
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档