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

喝奶茶不加糖呀 · 2019年07月19日 · 最后由 喝奶茶不加糖呀 回复于 2019年07月29日 · 2769 次阅读

一、请求接口:
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
2楼 已删除
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 个变量,所以一直未生效

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册