httprunner學習6-參數化(引用外部csv數據)
- 2019 年 10 月 8 日
- 筆記
前言
上一篇已經實現參數化,但是數據是放在.yml文件裡面,當測試數據非常多的時候,我們希望把測試數據寫到csv文件。 httprunner==1.5.8
獨立參數
對於已有參數列表,並且數據量比較大的情況,比較適合的方式是將參數列表值存儲在 CSV 數據文件中。
對於 CSV 數據文件,需要遵循如下幾項約定的規則:
- 文件需放置在與測試用例文件相同的目錄中;
- CSV 文件中的第一行必須為參數名稱,從第二行開始為參數值,每個(組)值佔一行;
- 若同一個 CSV 文件中具有多個參數,則參數名稱和數值的間隔符需實用英文逗號。
例如,user_id 的參數取值範圍為 1001~2000,那麼我們就可以創建 user_id.csv,並且在文件中按照如下形式進行描述。
user_id 1001 1002 ... 1999 2000
然後在 YAML/JSON 測試用例文件中,就可以通過內置的 parameterize(可簡寫為 P)函數引用 CSV 文件。
- config: parameters: - user_id: ${parameterize(user_id.csv)} - user_id: ${P(user_id.csv)} # 簡寫方式
csv文件存放user數據
先準備測試數據,準備四組登錄用的帳號和密碼,帳號為test1,test2,test3,test4,密碼統一設置為123456。
user_name.csv文件測試數據
user test1 test2 test3 test4
user_name.csv文件和test_param_csv.yml文件放到同一目錄,引用csv文件語法${P(user_name.csv)}
# 上海悠悠,QQ交流群:750815713 - config: name: logincase parameters: - user: ${P(user_name.csv)} # 參數化 variables: psw: 123456 - test: name: login case1 request: url: http://127.0.0.1:8000/api/v1/login/ method: POST headers: Content-Type: application/json User-Agent: python-requests/2.18.4 json: username: $user password: $psw extract: - token: content.token # 提取token validate: - eq: [status_code, 200] - eq: [headers.Content-Type, application/json] - eq: [content.msg, login success!] - eq: [content.code, 0]
csv存放user和psw數據
user_psw.csv文件測試數據
user,psw test1,123456 test2,123456 test3,123456 test4,123456
test_param_csv_psw.yml文件和user_psw.csv測試數據放在同一目錄下
# 上海悠悠,QQ交流群:750815713 - config: name: logincase parameters: - user-psw: ${P(user_psw.csv)} # 參數化 - test: name: login case1 request: url: http://127.0.0.1:8000/api/v1/login/ method: POST headers: Content-Type: application/json User-Agent: python-requests/2.18.4 json: username: $user password: $psw extract: - token: content.token # 提取token validate: - eq: [status_code, 200] - eq: [headers.Content-Type, application/json] - eq: [content.msg, login success!] - eq: [content.code, 0]
運行結果
cmd執行hrun test_param_csv_psw.yml
D:softuntitled>hrun test_param_csv_psw.yml login case1 INFO POST http://127.0.0.1:8000/api/v1/login/ INFO status_code: 200, response_time(ms): 529.26 ms, response_length: 110 bytes INFO start to extract from response object. INFO start to validate. . login case1 INFO POST http://127.0.0.1:8000/api/v1/login/ INFO status_code: 200, response_time(ms): 428.52 ms, response_length: 110 bytes INFO start to extract from response object. INFO start to validate. . login case1 INFO POST http://127.0.0.1:8000/api/v1/login/ INFO status_code: 200, response_time(ms): 438.94 ms, response_length: 110 bytes INFO start to extract from response object. INFO start to validate. . login case1 INFO POST http://127.0.0.1:8000/api/v1/login/ INFO status_code: 200, response_time(ms): 350.67 ms, response_length: 110 bytes INFO start to extract from response object. INFO start to validate. . ---------------------------------------------------------------------- Ran 4 tests in 1.766s OK INFO Start to render Html report ... INFO Generated Html report: D:softuntitledreports1569141027.html
V1.x版本測試數據csv文件只能與測試用例文件放在同一目錄,V2.x版本支援寫對路徑,以文件路徑為基於項目根目錄(debugtalk.py 所在路徑)的相對路徑。如:data/user_id.csv