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.keycontent.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

運行成功!