在实际工作中,当我们使用python+requests进行接口测试时,模拟post请求时,经常会遇到参数为中文的情况,如果不进行处理,就会导致编码格式不一样而出错。
举例:
当我们使用微信公众开发文档进行标签创建,创建一个中文标签,并进行断言时:
url_params={
"access_token":token
}
tag_info={"tag":{"name":"定时"}}
tag_str=json.dumps(tag_info,ensure_ascii=False)
#将json格式转换为字符串格式
response=self.session.post(url='https://api.weixin.qq.com/cgi-bin/tags/create',
params=url_params,
data=tag_str.encode('utf-8'))
actual_result=jsonpath.jsonpath(response.json(),'$.tag.name')[0]
#因为jsonpath返回的数据格式为列表,要取出数字需要在后面加上[0]
self.assertEqual(actual_result,'定时')
解决编码格式:
1、将json格式的内容使用json.dumps()转换为字符串格式,并设置参数ensure_ascii=False
(因为json.dumps()会自动将中文转为Unicode编码,所以将ensure_ascii设置为False)
2、在请求中设置编码格式为utf-8(data=字符串格式数据.encode('utf-8'))
这样,就可以模拟请求是传参为中文而出现编码错误的情况了