• httprunner 3.x--参数化parameters(参数和值多对一,多对多,一对一等),csv文件


    上一篇里写的httprunner 3.x--variables变量和声明(变量和值一一对应) 中的variables是对  “一对一”的参数有用,

    但对于变量需要多个数值,比如登录账号需要多个账号密码的,总不能一个账号密码写一个测试用例,这时候就需要用到关键字parameters

    参数化:多对多(多对一)
        直接指定参数
        csv导入(相对路径,绝对路径)
            yml格式可用相对路径,也可用绝对路径
            pytest只能用绝对路径(用相对路径会报错,还没找到解决办法)
    
    参数化:一多一

    【参数化:多对多(多对一是一样的)】

    一 . 直接指定参数列表:

    该种方式最为简单易用,适合参数列表比较小的情况

    【yml格式的测试用例】

    config:
        name: "hz测试"
        parameters:
          uid: [1**97,1245]
          choujiang_id: [***,33]
          username: [**,mm]
        base_url: "https://lottery.hz.z****in.com"
        verify: False
    
    teststeps:
    -
        name: "接口test /lotteryTest.php"
        request:
            method: GET
            url: /lotteryTest.php
            params:
              uid: $uid
              choujiang_id: $choujiang_id
              username: $username
        validate:
            - eq : ["status_code", 200]
            - eq : ["body.status", 1]

    其中打**的参数是正确,username是任意都行,所以上面的参数有8种组合

    [1**97,***,**]    [1**97,***,mm]   [1**97,33,**]   [1**97,33,mm]

    [1245,***,**]   [1234,***,mm]   [1245,33,**]   [1245,33,mm]

    运行结果如下:

      

    【pytest格式测试用例】

    # NOTE: Generated By HttpRunner v3.1.3
    # FROM: testcases/hetest_re.yml
    
    
    import pytest
    from httprunner import Parameters
    
    
    from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
    
    
    class TestCaseHetestRe(HttpRunner):
        @pytest.mark.parametrize(
            "param",
            Parameters(
                {"uid": [1**7, 1245], "choujiang_id": [***, 33], "username": ["**", "mm"]}
            ),
        )
        def test_start(self, param):
            super().test_start(param)
    
        config = (
            Config("hz测试").base_url("https://lottery.hz.z*****in.com").verify(False)
        )
    
        teststeps = [
            Step(
                RunRequest("接口test /lotteryTest.php")
                .get("/lotteryTest.php")
                .with_params(
                    **{
                        "uid": "$uid",
                        "choujiang_id": "$choujiang_id",
                        "username": "$username",
                    }
                )
                .validate()
                .assert_equal("status_code", 200)
                .assert_equal("body.status", 1)
            ),
        ]
    
    
    if __name__ == "__main__":
        TestCaseHetestRe().test_start()

    然后用pytest方法运行

    运行结果如下:

    二 . csv导入

    1.引用外部的csv文件,文件位置和debugtalk.py同一级别,即项目的根目录(也可以在该目录下指定相对路径,比如data/*.csv)
    
    2.一个csv只存放一个字段

    3.csv文件里的字段名要和实际的一致

    1)csv文件位置和debugtalk.py同一级别

    同时在pycharm中能看到该csv文件

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

    引用csv文件语法${P(user_name.csv)}

    【yml格式】

    config:
        name: "hz测试"
        parameters:
          uid: ${parameterize(hzuid.csv)}
          choujiang_id: ${parameterize(hzcjid.csv)}
          username: [**,mm]
        base_url: "https://lottery.hz.z****n.com"
        verify: False

    【pytest格式】

    pytest格式运用csv文件时,csv要存放在和测试用例同一目录下,要不然会报错(或者用绝对路径,下面会有介绍)

    @pytest.mark.parametrize(
            "param",
            Parameters(
                {
                    "uid": "${parameterize(hzuid.csv)}",
                    "choujiang_id": "${parameterize(hzcjid.csv)}",
                    "username": ["**", "mm"],
                }
            ),
        )

     

    2)csv文件如果是相对路径,情况如下:

     【yml格式】

       引用如下:

    config:
        name: "hz测试"
        parameters:
          uid: ${parameterize(data/hzuid.csv)}
          choujiang_id: ${parameterize(data/hzcjid.csv)}
          username: [**,mm]
        base_url: "https://lottery.hz.z****in.com"
        verify: False

    运行结果同样正常!!!

    【pytest格式】

    pytest格式要用绝对路径:

    @pytest.mark.parametrize(
            "param",
            Parameters(
                {
                    "uid": "${parameterize(/Users/may/Documents/automatortest/httprunner/testHttprunner/mayhttprunner/data/hzuid.csv)}",
                    "choujiang_id": [***,125],
                    "username": ["**", "mm"],
                }
            ),
        )
        def test_start(self, param):
            super().test_start(param)

    运行结果:

    --------------------------------------------------------------------------

    --------------------------------------------------------------------------

    【参数化:一对一】

    csv文件如下

     

     要的目标是两组参数

    [1**7,***,**]    [4353,33,mm]

    把参数关联起来,用 “- ”关联

    uid-choujiang_id-username: ${parameterize(data/hz1t1.csv)}

    【yml格式】
    config:
        name: "hz测试"
        parameters:
          uid-choujiang_id-username: ${parameterize(data/hz1t1.csv)}
    
        base_url: "https://lottery.hz.z****n.com"
        verify: False
    
    teststeps:
    -
        name: "接口test /lotteryTest.php"
        request:
            method: GET
            url: /lotteryTest.php
            params:
              uid: $uid
              choujiang_id: $choujiang_id
              username: $username
        validate:
            - eq : ["status_code", 200]
            - eq : ["body.status", 1]

    运行结果:

    两组参数即两个用例

    【pytest格式】如下:(用绝对路径)

    # NOTE: Generated By HttpRunner v3.1.3
    # FROM: testcases/hzoto.yml
    
    
    import pytest
    from httprunner import Parameters
    
    
    from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
    
    
    class TestCaseHzoto(HttpRunner):
        @pytest.mark.parametrize(
            "param",
            Parameters({"uid-choujiang_id-username": 

    "${parameterize(/Users/may/Documents/automatortest/httprunner/testHttprunner/mayhttprunner/data/hz1t1.csv)}"}),
    )
    def test_start(self, param): super().test_start(param) config = ( Config("hz测试").base_url("https://lottery.hz.z****n.com").verify(False) ) teststeps = [ Step( RunRequest("接口test /lotteryTest.php") .get("/lotteryTest.php") .with_params( **{ "uid": "$uid", "choujiang_id": "$choujiang_id", "username": "$username", } ) .validate() .assert_equal("status_code", 200) .assert_equal("body.status", 1) ), ] if __name__ == "__main__": TestCaseHzoto().test_start()

    运行结果如下:

     

  • 相关阅读:
    oracelp---随意 记录(nvl)
    delphi小知识 点(if条件符,to_date)
    截取字符(pos,copy,Leftstr,MidStr,RightStr)以逗号为准把字符串拆分,判断字符串是否有数字、字母(大小写), 去掉字符串空格
    js HTML DOM TableRow 对象(innerHTML)
    mysql 安装相关
    初识JAVAScript
    css
    css深入
    css的学习
    前端 html
  • 原文地址:https://www.cnblogs.com/may18/p/13377901.html
Copyright © 2020-2023  润新知