1. 程式人生 > 其它 >HttpRunner-03:生成測試用例

HttpRunner-03:生成測試用例

1.前言

在編寫測試用例之前,我們應該瞭解API的詳細資訊,使用一些抓包工具,比如:Charles Proxy、Fiddler、Chrome DevTools等捕獲網路會話流量。
例如,以postman-echo.com提供的API為例說明,我們利用網路抓包工具,捕獲HTTP請求,匯出HAR格式檔案,使用har2case生成pytest、JSON、YAML格式的測試用例,我簡單畫了流程圖來理解生成測試用例此過程。

2.捕獲HTTP請求和響應

本例中,我以谷歌瀏覽器的DevTools作為抓包工具,Chrome的DevTools可以捕獲所有流量並將其儲存到HAR檔案中。

谷歌瀏覽器發起請求:https://postman-echo.com/get?foo1=bar1&foo2=bar2

按下 F12右鍵檢查,出現一個DevTools面板(如果你找不到任何請求連結,通過ctrl+R快捷鍵重新請求一遍URL即可)

3.匯出HAR檔案har目錄

從前面的操作步驟,我們拿到har檔案,並匯出到本地,我把har檔案匯出到demo專案下的har目錄,名為postman-echo.com.har

4.生成測試用例(pytest)

由於 HttpRunner 3.0.7,har2case預設情況下會將 HAR 檔案轉換為 pytest,並且非常建議以 pytest 格式而不是以前的YAML/JSON格式編寫和維護測試用例。
執行har2case har/postman-echo.com.har

,生成pytest格式的測試用例,操作如下:

  • 檢視生成的測試用例postman_echo_com_test.py檔案
# NOTE: Generated By HttpRunner v3.1.6
# FROM: har/postman-echo.com.har


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


class TestCasePostmanEchoCom(HttpRunner):

    config = Config("testcase description").verify(False)

    teststeps = [
        Step(
            RunRequest("/get")
            .get("https://postman-echo.com/get")
            .with_params(**{"foo1": "bar1", "foo2": "bar2"})
            .with_headers(
                **{
                    "pragma": "no-cache",
                    "cache-control": "no-cache",
                    "sec-ch-ua": '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
                    "sec-ch-ua-mobile": "?0",
                    "sec-ch-ua-platform": '"Windows"',
                    "dnt": "1",
                    "upgrade-insecure-requests": "1",
                    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36",
                    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
                    "sec-fetch-site": "none",
                    "sec-fetch-mode": "navigate",
                    "sec-fetch-user": "?1",
                    "sec-fetch-dest": "document",
                    "accept-encoding": "gzip, deflate, br",
                    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
                }
            )
            .with_cookies(
                **{
                    "sails.sid": "s%3AEFVfR_Ur7l24-eh6qebBWjlkxIgh0PNS.Yb0onNxWZuRdZ%2BNs%2BzfkO%2BgKA08zxh2Lary5oaRlZbE"
                }
            )
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal(
                "body.url", "https://postman-echo.com/get?foo1=bar1&foo2=bar2"
            )
        ),
    ]


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


5.生成測試用例(JSON)

執行har2case -2j har/postman-echo.com.har,生成JSON格式的測試用例

6.生成測試用例(YAML)

執行har2case -2y har/postman-echo.com.har,生成YAML格式測試用例