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()

運行結果如下:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM