前言
httprunner 3.x 取值是用 jmespath 表达式,当从头部取值Content-Type时,有特殊字符 -,会报错
jmespath.exceptions.LexerError: Bad jmespath expression: Unknown token '-': headers.Content-Type
使用示例
从返回的headers提取Content-Type内容
from httprunner import HttpRunner, Config, Step, RunRequest
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
class TestLoginV4Case(HttpRunner):
config = Config("登录v4用例").base_url("http://127.0.0.1:80")
teststeps = [
Step(RunRequest("step-login")
.post("/api/v1/login")
.with_json({"username": "test", "password": "123456"})
.validate()
.assert_equal("status_code", 200)
.assert_equal('headers.Content-Type', 'application/json')
)
]
返回的 response 内容
================== response details ==================
status_code : 200
headers : {
"Date": "Tue, 17 Aug 2021 10:54:10 GMT",
"Server": "WSGIServer/0.2 CPython/3.6.8",
"Content-Type": "application/json",
"Vary": "Accept, Cookie",
"Allow": "POST, OPTIONS",
"X-Frame-Options": "SAMEORIGIN",
"Content-Length": "109"
}
cookies : {}
encoding : utf-8
content_type : application/json
body : {
"code": 0,
"msg": "login success!",
"username": "test",
"token": "607d2bea6a652b05f3e3d201e7328e2bb4026173"
}
运行的时候会报错
expression: headers.Content-Type
data: {'status_code': 200,
'headers': {'Date': 'Tue, 17 Aug 2021 10:54:10 GMT', 'Server': 'WSGIServer/0.2 CPython/3.6.8', 'Content-Type': 'application/json', 'Vary': 'Accept, Cookie', 'Allow': 'POST, OPTIONS', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Length': '109'},
'cookies': {},
'body': {'code': 0, 'msg': 'login success!', 'username': 'test', 'token': '607d2bea6a652b05f3e3d201e7328e2bb4026173'}}
exception: Bad jmespath expression: Unknown token '-':
headers.Content-Type
解决办法
因为headers.Content-Type有特殊字符-,jmespath处理特殊字符可以用引号包起来headers."Content-Type"
.validate()
.assert_equal("status_code", 200)
.assert_equal('headers."Content-Type"', 'application/json')