一、前言
前面講了怎么搭建框架環境,怎么運行,以及直接就講到了怎么生成allure測試報告,說白了就是闡述了一個大的框架,但具體運用到工作中時,測試用例怎么編寫呢?且看下面的嘮叨,哈哈哈。
二、用例分層
- 測試用例(testcase)應該是完整且獨立的,每條測試用例應該是都可以獨立運行的
- 測試用例是測試步驟(teststep)的有序集合
- 測試用例集(testsuite)是測試用例的無序集合,集合中的測試用例應該都是相互獨立,不存在先后依賴關系的;如果確實存在先后依賴關系,那就需要在測試用例中完成依賴的處理
三、測試用例結構
每個測試用例都是 的子類HttpRunner,並且必須具有兩個類屬性:config和teststeps。
- config:配置測試用例級別的設置,包括
base_url、verify、variables、export。 - teststeps:teststep(
List[Step])列表,每一步對應一個API請求或者另一個testcase引用調用。此外,variables/extract/validate/hooks機制支持,可制作十分復雜的測試方案。
# NOTE: Generated By HttpRunner v3.1.5
# FROM: har\login.har
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
class TestCaseLogin(HttpRunner):
config = Config("登錄")\
.verify(False)\
.base_url("https://XXX.com")\
.variables(
**{"username":"李白","psw":"123456"}
)\
.export(*["userId","userNo","userName"])
teststeps = [
Step(
RunRequest("登錄接口")
.post("/auth/login_by_password")
.with_headers(
**{
"accept": "application/json, text/plain, */*",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"current-user-id": "",
"content-type": "application/json;charset=UTF-8",
"accept-language": "zh-CN,zh;q=0.9",
}
)
.with_json(
{
"employeeName": "$username",
"loginType": "PASSWORD",
"password": "$psw",
"currentUserId": "",
"workerId": "",
"currentUserName": "",
"currentUserCode": "",
}
)
.extract()
.with_jmespath("body.data.userId","userId")
.with_jmespath("body.data.userNo","userNo")
.with_jmespath("body.data.userName","userName")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.successful", True)
.assert_equal("body.code", "200")
.assert_equal("body.message", "請求成功")
),
]
if __name__ == "__main__":
TestCaseLogin().test_start()
1、config
每個測試用例應該有一個config部分,您可以在其中配置測試用例級別設置。
- 姓名(必填):指定測試用例名稱。這將顯示在執行日志和測試報告中。
- base_url(可選):指定 SUT 的通用架構和主機部分,例如
https://postman-echo.com. 如果base_url指定,則 teststep 中的 url 只能設置相對路徑部分。如果您想在不同的 SUT 環境之間切換,這尤其有用。 - 變量(可選):指定測試用例的公共變量。每個測試步驟都可以引用未在步驟變量中設置的配置變量。換句話說,步驟變量比配置變量具有更高的優先級。
- 驗證(可選):指定是否驗證服務器的 TLS 證書。如果我們想記錄測試用例執行的 HTTP 流量,這尤其有用,因為如果 verify 未設置或設置為 True,則會發生 SSLError。SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 證書驗證失敗:證書鏈中的自簽名證書 (_ssl.c:1076)'))
- 導出(可選):指定測試用例的導出會話變量。將每個測試用例視為一個黑盒,config
variables是輸入部分,configexport是輸出部分。特別是,當一個測試用例在另一個測試用例的步驟中被引用,並且會提取一些會話變量以供后續測試步驟使用時,則應在配置export部分配置提取的會話變量。
2、teststeps
每個測試用例應該有一個或多個有序的測試步驟 ( List[Step]),每個步驟對應一個 API 請求或另一個測試用例引用調用。

RunRequest(name)
RunRequest 用於向 API 發出請求並對響應進行一些提取或驗證的步驟。
nameRunRequest的參數用於指定測試步驟名稱,該名稱將顯示在執行日志和測試報告中。
.with_variables
指定測試步驟變量。每個步驟的變量都是獨立的,因此如果要在多個步驟中共享變量,則應在配置變量中定義變量。此外,步驟變量將覆蓋配置變量中具有相同名稱的變量。
.method(url)
指定 HTTP 方法和 SUT 的 url。這些對應於method和 的url參數requests.request。
如果base_url在config中設置,url只能設置相對路徑部分。
.with_params
為請求 url 指定查詢字符串。這對應於 的params參數requests.request。
.with_headers
為請求指定 HTTP 標頭。這對應於 的headers參數requests.request。
.with_cookies
指定 HTTP 請求 cookie。這對應於 的cookies參數requests.request。
.with_data
指定 HTTP 請求正文。這對應於 的data參數requests.request。
.with_json
在 json 中指定 HTTP 請求正文。這對應於 的json參數requests.request。
extract
.WITH_JMESPATH
使用jmespath提取 JSON 響應正文。
with_jmespath(jmes_path:文本,var_name:文本)
- jmes_path:jmespath 表達式,更多細節參考JMESPath 教程
- var_name:存儲提取值的變量名,可供后續測試步驟引用
validate
.ASSERT_XXX
使用jmespath提取 JSON 響應正文並使用預期值進行驗證。
assert_XXX(jmes_path: Text, expected_value: Any, message: Text = "")
- jmes_path:jmespath 表達式,更多細節參考JMESPath 教程
- 預期值:這里也可以使用指定的預期值、變量或函數引用
- 消息(可選):用於指示斷言錯誤原因
RunTestCase(name)
RunTestCase 在一個步驟中用於引用另一個測試用例調用。
nameRunTestCase的參數用於指定測試步驟名稱,該名稱將顯示在執行日志和測試報告中。
.with_variables
與 RunRequest 的.with_variables.
.call
指定引用的測試用例類。
.export
指定要從引用的測試用例導出的會話變量名稱。導出的變量可以被后續的測試步驟引用

