在 HttpRunner 中,測試用例組織主要基於三個概念:
今天將使用 day28 的 Code 來說明 HttpRunner 的測試用例分層機制。
HttpRunner 的測試用例分層,共有 3 層,以下是各階層的相依
.env 環境變數設定
base_url=https://www.google.com
首先來看看,最小單位的 api 層
,一個 yml 檔裡定義一隻 api,例如 google_search.yml
官方建議定義 API 的 url
method
headers
params
request body
等。validate
通常只定義預期的 status_code
name: google search
base_url: ${ENV(base_url)}
variables:
keyword: httprunner in api
request:
url: /search
method: GET
params:
q: $keyword
validate:
- eq: ["status_code", 200]
定義完的 API 可以單獨運行,
cd day28
hrun api/google_search.yml
執行成功,而且請注意這時候使用的變數 keyword: httprunner in api
再來看看 testcase 層
,一個 yml 檔裡可以定義多個 teststep
in teststeps
,例如 validate_title.yml
官方建議,將 validate 盡量都寫在 testcase 層
,處理跟測試邏輯和測試流程相關的設定。testcase 層
的 variables, validate 可覆蓋 api 層
的設定
config:
name: testcase validate search result
base_url: ${ENV(base_url)}
variables:
keyword: httprunner in testcase # testcase 層 的 variables 可覆蓋 api 層
teststeps:
- name: validate title
api: api/google_search.yml # 引用 api 層
extract:
- title: "<title>(.*)</title>"
validate:
- startswith: ["$title", "$keyword"] # validate 邏輯判斷盡量在 testcase 層
定義完的 TestCase 可以單獨運行,
cd day28
hrun testcases/validate_title.yml
執行成功,而且請注意這時候使用的變數 keyword: httprunner in testcase
最後來看看 testsuite 層
,一個 yml 檔裡可以定義多個 testcase
in testcases
,例如 google_search.yml
官方建議,將 testcase 的組織
和 test data 的組織
放在 testsuite 層
,
也就是說 testsuite 層
不應該有邏輯,而是為了把 測試案例和測試資料結合。
PS. day29 講參數化資料驅動測試,會更能看出
testsuite 層
的作用
config:
name: "testsuite google search"
base_url: ${ENV(base_url)}
variables:
keyword: httprunner in testsuite # 應該由 testsuite 控制 test data 的組織
testcases: # 應該由 testsuite 控制 testcase 的組織
- name: call validate_title
testcase: testcases/validate_title.yml
- name: call validate_title2
testcase: testcases/validate_title.yml
定義完的 TestSuite 可以單獨運行,
cd day28
hrun testsuites/google_search.yml
執行成功,而且請注意這時候使用的變數 keyword: httprunner in testsuite