ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

httprunner 3.x学习10 - parameters 参数化

2021-06-19 20:05:53  阅读:212  来源: 互联网

标签:10 password httprunner parameters 参数 user login 123456


前言

httprunner 3.x可以在yaml文件中参数化,在 config 中使用 parameters 关键字
环境:httprunner==3.1.4

参数配置

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

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

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

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

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

单个参数时参数化

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

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

config:
    name: login case
    base_url: ${ENV(base_url)}
    variables:
        user: test
        password: 123456
    parameters:
        user: [test1, test2, test3, test4]

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

config:
    name: login case
    base_url: ${ENV(base_url)}
    variables:
        user: test
        password: 123456
    parameters:
        user: [test1, test2, test3, test4]
        password: 123456

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

config:
    name: login case
    base_url: ${ENV(base_url)}
    variables:
        user: test
        password: 123456
    parameters:
        user: [test1, test2, test3, test4]

teststeps:
-
    name: step login
    variables:
            password: 123456
    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]

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

# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\login_params.yml


import pytest
from httprunner import Parameters


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


class TestCaseLoginParams(HttpRunner):
    @pytest.mark.parametrize(
        "param", Parameters({"user": ["test1", "test2", "test3", "test4"]})
    )
    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")
            .with_variables(**{"password": 123456})
            .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__":
    TestCaseLoginParams().test_start()


关联性的参数化

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

# 上海-悠悠,httprunner QQ交流群:717225969
config:
    name: "test userinfo"

testcases:
   login-参数化:
        testcase: case/test_login.yml
        parameters:
            user-password:
            -  ["test1", "123456"]
            -  ["test2", "123456"]
            -  ["test3", "123456"]
            -  ["test4", "123456"]

笛卡尔积组合

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

# 上海-悠悠,httprunner QQ交流群:717225969
config:
    name: "test userinfo"

testcases:
-       
    name: login-参数化
    testcase: case/test_login.yml
    parameters:
        user: ["test1", "test2", "test3", "test4"]
        password: ["123456", "123456", "123456", "123456"]

这样运行会生成16组用例,很显然,这种不适用与登录-密码一对一的情况。可以用在其它的测试场景


httprunner 2.x实战教程点我 ->立即报名

标签:10,password,httprunner,parameters,参数,user,login,123456
来源: https://www.cnblogs.com/yoyoketang/p/14904674.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有