HttpRunner 求助:HttpRunner 中接口请求参数包含中文如何处理???

喝奶茶不加糖呀 · July 19, 2019 · Last by 喝奶茶不加糖呀 replied at July 29, 2019 · 1390 hits

一、请求接口:
api请求的YAML文件类似如下:

###
name: POST接口请求
base_url: http://xxx.com
variables:
name: '张三'
score: 90
request:
headers:
Content-Type: application/json
url: /class/add
method: POST
data: {"name":$name,"score":$score}
validate:

  • eq: ["status_code", 200]
  • eq: ["content.status",true] ###

二、运行错误:
运行此yaml文件,报错:UnicodeEncodeError: 'latin-1' codec can't encode characters in position 230-231: Body ('张三') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

三、解决办法:
根据提示,得知是编码原因,我采取了在debugtalk.py中写了一个转换编码的函数,在yaml文件中去引用,依旧无济于事。

有经验的大佬们能不能帮忙解答解答???

共收到 5 条回复 时间 点赞

首先注意下排版
POST的话不要自己去拼接Json,直接用json字段,如下

name: POST接口请求
base_url: http://xxx.com
variables:
name: '张三'
score: 90
request:
url: /class/add
method: POST
json:
name: $name
score: $score
2Floor has been deleted
arrow 回复

可是我的请求体是usertoken=xxxx&body={"name":"张三","score":90}这样的格式,有多个入参
自己组装可以采用data:usertoken=$usertoken&body={"name":$name,"score":$score}
使用json组装就会组装成{"usertoken":"xxxx","name":"张三","score":90}了

你这种参数明显不符合http规范,通常json应该直接放在Body里面,你现在这种方式是提交表单 (x-www-form-urlencoded),然后里面又混合了json字符串,httprunner目前不支持这种写法,只能自己去拼接。

作者问题解决了吗?我也遇到了同样的问题

晴天 回复

最后自己采取了一个办法,就是在debugtalk.py中写一个函数,返回指定的编码,在测试用例中引用相关的函数,类似于下面这种样子:
name: POST接口请求
base_url: http://xxx.com
variables:
name: '张三'
score: 90
postData:'{"name":$name,"score":$score}'
request:
url: /class/add
method: POST
data: ${func($postData)}

之前采用过debugtalk.py的办法,但是引用的时候,并未将postData变成1个变量,所以一直未生效

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up