httprunner學習7-extract提取content返回對象


前言

提取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": "283340479@qq.com",
		"name": "yoyo",
		"sex": "M"
	},
	{
		"age": 21,
		"create_time": "2019-09-16",
		"id": 2,
		"mail": "123445@qq.com",
		"name": "yoyo111",
		"sex": "M"
	}
]

上面這種轉化成python里面的list對象,可以用content.int 方法取出對應下標的數據,對應的extract提取方法

  • content.0 取出list里面的第一組數據{"age": 20, "create_time": "2019-09-15", "id": 1, "mail": "283340479@qq.com", "name": "yoyo", "sex": "M"}
  • content.1 取出list里面的第二組數據{"age": 21, "create_time": "2019-09-16", "id": 2, "mail": "123445@qq.com", "name": "yoyo111", "sex": "M"}
  • content.0.name 取出第一組數據的name對應值"yoyo"
  • content.1.name 取出第二組數據的name對應的值"yoyo111"
  • content.0.mail 取出第一組數據的mail對應值"283340479@qq.com"

通過content.int的方法也可以取出字符串里面的值,比如我要取出第一組數據,name對應值"yoyo"里面的第三個字符,就可以用content.0.name.2,這種取字符串的一般很少用

實踐案例

總的來說,content對象的取值就2種方式:content.keycontent.int,按層級一層的去查找就可以了

這里有個demo案例,使用httpie請求后的響應結果如下

C:\Users\dell>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": "283340479@qq.com",
            "name": "yoyo",
            "sex": "M"
        },
        {
            "age": 21,
            "create_time": "2019-09-16",
            "id": 2,
            "mail": "123445@qq.com",
            "name": "yoyo111",
            "sex": "M"
        }
    ],
    "msg": "success!"
}

目標:從響應的結果里面取除datas數據里面的一組數據mail對應的值283340479@qq.com,並斷言。

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, 283340479@qq.com]

運行結果

D:\soft\untitled>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:\soft\untitled\reports\1569147460.html

運行成功!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM