httprunner學習7-extract提取content返回對象
- 2019 年 10 月 8 日
- 筆記
前言
提取response返回的對象數據,用extract關鍵字。前面有關於token的取值,通過content.token取值。 本篇詳細講解如何從返回的json數據提取出想要的各種數據
content對象
httprunner裏面的content實際上就是request裏面的r.content,返回的是一個byte類型。
比如返回的json數據如下
{ "code": 0, "msg": "login success!", "username": "test", "token": "b3f7e8e12d23591ea671374dee818c63b1599d4d" }
上面的json數據,可以轉成python裏面對應的dict類型,extract提取方法
- content.code 取出code後面對應的值0
- content.msg 取出msg後面的對應值」login success!」
- content.username 取出username後面的值」test」
- content.token 取出token後面的值」b3f7e8e12d23591ea671374dee818c63b1599d4d」
list類型取值
如果返回的json數據,轉化成python裏面的list對象,如下結構
[{ "age": 20, "create_time": "2019-09-15", "id": 1, "mail": "[email protected]", "name": "yoyo", "sex": "M" }, { "age": 21, "create_time": "2019-09-16", "id": 2, "mail": "[email protected]", "name": "yoyo111", "sex": "M" } ]
上面這種轉化成python裏面的list對象,可以用content.int 方法取出對應下標的數據,對應的extract提取方法
- content.0 取出list裏面的第一組數據{「age」: 20, 「create_time」: 「2019-09-15」, 「id」: 1, 「mail」: 「[email protected]」, 「name」: 「yoyo」, 「sex」: 「M」}
- content.1 取出list裏面的第二組數據{「age」: 21, 「create_time」: 「2019-09-16」, 「id」: 2, 「mail」: 「[email protected]」, 「name」: 「yoyo111」, 「sex」: 「M」}
- content.0.name 取出第一組數據的name對應值」yoyo」
- content.1.name 取出第二組數據的name對應的值」yoyo111」
- content.0.mail 取出第一組數據的mail對應值」[email protected]」
通過content.int的方法也可以取出字符串裏面的值,比如我要取出第一組數據,name對應值」yoyo」裏面的第三個字符,就可以用content.0.name.2,這種取字符串的一般很少用
實踐案例
總的來說,content對象的取值就2種方式:content.key和content.int,按層級一層的去查找就可以了
這裡有個demo案例,使用httpie請求後的響應結果如下
C:Usersdell>http http://127.0.0.1:8000/api/test/demo HTTP/1.1 200 OK Content-Length: 255 Content-Type: application/json Date: Sun, 22 Sep 2019 10:11:07 GMT Server: WSGIServer/0.2 CPython/3.6.0 X-Frame-Options: SAMEORIGIN { "code": 0, "datas": [ { "age": 20, "create_time": "2019-09-15", "id": 1, "mail": "[email protected]", "name": "yoyo", "sex": "M" }, { "age": 21, "create_time": "2019-09-16", "id": 2, "mail": "[email protected]", "name": "yoyo111", "sex": "M" } ], "msg": "success!" }
目標:從響應的結果裏面取除datas數據裏面的一組數據mail對應的值[email protected],並斷言。
test_demo.yml腳本內容
# 上海悠悠,QQ交流群:750815713 - config: name: test_demo variables: {} - test: name: test_demo case1 request: url: http://127.0.0.1:8000/api/test/demo method: GET headers: Content-Type: application/json User-Agent: python-requests/2.18.4 json: username: test password: 123456 extract: - mail: content.datas.0.mail # 提取mail validate: - eq: [status_code, 200] - eq: [content.msg, success!] - eq: [$mail, [email protected]]
運行結果
D:softuntitled>hrun test_demo.yml test_demo case1 INFO GET http://127.0.0.1:8000/api/test/demo INFO status_code: 200, response_time(ms): 4.99 ms, response_length: 255 bytes INFO start to extract from response object. INFO start to validate. . ---------------------------------------------------------------------- Ran 1 test in 0.012s OK INFO Start to render Html report ... INFO Generated Html report: D:softuntitledreports1569147460.html
運行成功!
