1、測試用例結構:
(1)一個JSON/YAML文件對應一個測試用例
(2)每個測試用例為一個list of dict
結構,其中可能包含全局配置項(config)和若干個測試步驟(test)
(3)config
為全局配置項,作用域為整個測試用例
(4)test
對應單個測試步驟,作用域僅限於本身
2、在測試步驟中提取參數用extract,參數引用用$var
在測試步驟(test)中,若需要從響應結果中提取參數,則可使用 extract
關鍵字。extract 的列表中可指定一個或多個需要提取的參數。
在提取參數時,當 HTTP 的請求響應結果為 JSON 格式,則可以采用.
運算符的方式,逐級往下獲取到參數值;響應結果的整體內容引用方式為 content 或者 body。
在測試用例中傳遞參數用exctract關鍵字,只能從前往后傳遞
3、變量申明(variables)跟引用($var)。config跟test中均可以用variables定義變量,用$+變量名稱引用,其中config為全局變量,test中為本用例變量
4、httprunner支持熱加載的插件機制debugtalk.py,在測試用例文件的同級或上級目錄中創建debugtalk.py,在其中定義相關變量跟函數,
創建完成后,引用函數的方式為${func($var)}
5、httprunner的主要文件格式:
(1)YAML/JSONL:測試用例文件,存儲接口測試相關信息
(2)debugtalk.py:存儲相關函數
- 該文件存在時,將作為項目根目錄定位標記,其所在目錄即被視為項目工程根目錄
- 該文件不存在時,運行測試的所在路徑(
CWD
)將被視為項目工程根目錄 - 測試用例文件中的相對路徑(例如
.csv
)均需基於項目工程根目錄 - 運行測試后,測試報告文件夾(
reports
)會生成在項目工程根目
(3).env
(可選):存儲項目環境變量,通常用於存儲項目敏感信息
(4).csv
(可選):項目數據文件,用於進行數據驅動
(5)reports
:默認生成測試報告的存儲文件夾
6、測試用例結構:
#對應的json結構,test對應單個測試步驟(teststep) [ { "config": {...} }, { "test": {...} }, { "test": {...} } ]
7、extract:
(1)響應結果為json:采用 . 運算符
(2)響應結果為text/html :采用正則表達式
8、validate:結果的校驗項,支持兩種格式:
{"comparator_name": [check_item, expect_value]}
{"check": check_item, "comparator": comparator_name, "expect": expect_value}
9、谷歌定義的yaml格式的文件都必須在冒號后加空格
10、邏輯關系:
(1)接口定義:API的描述應該盡量全面,方便API的獨立測試
API的組成:name、variables、request、base_url、validate 等,定義完成后用 hrun get_headers.yml對單個接口進行調試
name: get headers base_url: http://httpbin.org variables: expected_status_code: 200 request: url: /headers method: GET validate: - eq: ["status_code", $expected_status_code] - eq: [content.headers.Host, "httpbin.org"]
(2)測試用例
①引用接口定義:在teststep步驟中選用API字段引用接口定義,引用方式為API文件的路徑
②引用測試用例:在teststep中使用testcase引用測試用例
(3)測試用例集:測試用例為無序的集合,不存在依賴關系,若存在,在測試用例中完成
參數化場景使用parameters完成,覆蓋variables 的參數,驅動測試用例的運行
11、httprunner推薦的文件結構
debugtalk.py
放置在項目根目錄下,假設為PRJ_ROOT_DIR
.env
放置在項目根目錄下,路徑為PRJ_ROOT_DIR/.env
- 接口定義(API)放置在
PRJ_ROOT_DIR/api/
目錄下 - 測試用例(testcase)放置在
PRJ_ROOT_DIR/testcases/
目錄下 - 測試用例集(testsuite)文件必須放置在
PRJ_ROOT_DIR/testsuites/
目錄下 - data 文件夾:存儲參數化文件,或者項目依賴的文件,路徑為
PRJ_ROOT_DIR/data/
- reports 文件夾:存儲 HTML 測試報告,生成路徑為
PRJ_ROOT_DIR/reports/
12、快速創建新項目:
hrun --startproject demo
·13、參數機制在 測試用例集中實現
14、數據源的3種方式:
- 在 YAML/JSON 中直接指定參數列表:該種方式最為簡單易用,適合參數列表比較小的情況
- 通過內置的 parameterize(可簡寫為P)函數引用 CSV 文件:該種方式需要准備 CSV 數據文件,適合數據量比較大的情況
- 調用 debugtalk.py 中自定義的函數生成參數列表:該種方式最為靈活,可通過自定義 Python 函數實現任意場景的數據驅動機制,當需要動態生成參數列表時也需要選擇該種方式
- 實現方式
-
config: name: "demo" testcases: testcase1_name: testcase: /path/to/testcase1 parameters: user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"] user_id: ${P(user_id.csv)} username-password: ${get_account(10)}
15、笛卡爾組合的結果數量為各個參數數量的乘積
16、HttpRunner 通過復用 Locust
,可以在無需對 YAML/JSON 進行任何修改的情況下,直接運行性能測試。
17、參數化使用parameters,采用笛卡爾組合結果對variables中定義的參數進行覆蓋
18、通過times重復執行用例
19、對參數的加解密處理在tearsdown_hoook中處理