LoadRunner发json请求,总是有这个错误,在线等高人回答
本帖最后由 new_lio 于 2013-7-18 15:30 编辑首先介绍下,我这边项目是安卓APK,然后我想用loadrunner模拟安卓apk向服务器发送json请求
然后我分别抓取了apk一个动作的请求包
电脑上面,sdk模拟器里面的apk(pc上面http抓包)
http://192.168.1.183:8080/AIO/VisitorService.json
{"id":-1046118514,"method":"signIn","params":["{\"data\":\"{\\\"phoneNo\\\":\\\"321\\\",\\\"visitorName\\\":\\\"??\\\",\\\"email\\\":\\\"mct@mct\\\",\\\"visitorId\\\":\\\"412326198503153952\\\"}\"}"]}
http://192.168.1.183:8080/AIO/ComplainService.json
{"id":976873371,"method":"saveComplain","params":["{\"data\":\"%7B%5C%22content%5C%22%3A%5C%22xx%5C%22%2C%5C%22title%5C%22%3A%5C%22xx%5C%22%2C%5C%22addresseeName%5C%22%3A%5C%22%E5%85%AC%E5%AE%89%E5%B1%80%5C%22%2C%5C%22addresserName%5C%22%3A%5C%22%E9%87%91%E6%B0%B8%5C%22%2C%5C%22sendTime%5C%22%3A%5C%222013-06-14+03%3A35%3A13%5C%22%2C%5C%22addressee%5C%22%3A%5C%22ff8080813e8b1861013e8b1c51bc0003%5C%22%2C%5C%22contentType%5C%22%3A%5C%221%5C%22%2C%5C%22addresser%5C%22%3A%5C%22ff8080813e866bd6013e8a9d52b90007%5C%22%7D\"}"]}
真正平板上面的apk启动真实操作后,服务器后台日志
signIn: {"data":"{\"phoneNo\":\"321\",\"visitorName\":\"??\",\"email\":\"mct@mct\",\"visitorId\":\"412326198503153952\"}"}
2013-07-17 23:18:12,669 DEBUG >>>
saveComplain: {"data":"{\"content\":\"test\",\"title\":\"test\",\"addresseeName\":\"公安局\",\"addresserName\":\"金永\",\"sendTime\":\"2010-01-01 09:12:08\",\"addressee\":\"ff8080813e8b1861013e8b1c51bc0003\",\"contentType\":\"1\",\"addresser\":\"ff8080813e866bd6013e8a9d52b90007\"}"}
然后对这个json请求用lr来模拟,lr代码
Action()
{
web_reg_save_param("json",
"LB=",
"RB=",
LAST);
web_custom_request("web_custom_request",
"URL=http://192.168.1.183:8080/AIO/VisitorService.json",
"Method=POST",
"TargetFrame=",
"Resource=0",
"RecContentType=application/x-www-form-urlencoded charset=utf-8",
//application/x-www-form-urlencoded charset=utf-8
"Referer=",
"Body=[\"{\"data\":\"{\\\"phoneNo\\\":\\\"321\\\",\\\"visitorName\\\":\\\"??\\\",\\\"email\\\":\\\"mct@mct\\\",\\\"visitorId\\\":\\\"412326198503153952\\\"}\"}\"]",
LAST);
web_custom_request("web_custom_request",
"URL=http://192.168.1.183:8080/AIO/ComplainService.json",
"Method=POST",
"TargetFrame=",
"Resource=0",
"RecContentType=application/x-www-form-urlencoded charset=union",
//application/x-www-form-urlencoded charset=utf-8
"Referer=",
"Body=[\"{\"data\":\"%7B%5C%22content%5C%22%3A%5C%22xx%5C%22%2C%5C%22title%5C%22%3A%5C%22xx%5C%22%2C%5C%22addresseeName%5C%22%3A%5C%22%E5%85%AC%E5%AE%89%E5%B1%80%5C%22%2C%5C%22addresserName%5C%22%3A%5C%22%E9%87%91%E6%B0%B8%5C%22%2C%5C%22sendTime%5C%22%3A%5C%222013-06-14+03%3A35%3A13%5C%22%2C%5C%22addressee%5C%22%3A%5C%22ff8080813e8b1861013e8b1c51bc0003%5C%22%2C%5C%22contentType%5C%22%3A%5C%221%5C%22%2C%5C%22addresser%5C%22%3A%5C%22ff8080813e866bd6013e8a9d52b90007%5C%22%7D\"}\"]",
LAST);
lr_output_message("返回捕获:%s",lr_eval_string("{json}"));
return 0;
}
问题:
1.通过这2个方式的抓包,我发现json请求代码不一样,这个没关系,2个json串我都试了,都是同样的错误
错误如下,截取部分错误,如附件图片所示
2013-07-17 23:26:19,551 ERROR >>> No content to map due to end-of-input
at
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2839)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2781)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:1627)
at com.googlecode.jsonrpc4j.JsonRpcServer.handle(JsonRpcServer.java:220)
如果加上这个后"EncType=utf-8",后台又会报这个utf-8的错误,如附件所示 哦,我试下先 有什么好的方法,请大家说说 我之前也是用LR测试接口的性能,但是那个application/x-www-form-urlencoded charset=utf-8"
提交的是文本文件是二进制传输的,LR没有把提交的数据转换成二进制,所以提交到服务器内容为空。
你可以用jmeter测试接口,很简单的。 如果用上面问题解决告诉我一下。 "RecContentType=application/json",
"EncType=application/json",
试一试 我总觉得你其实只要再抓一次包看看LR发出去的和你之前录制应用的,就知道问题是啥了。 回复 6# 云层
这个没有录制啊,抓包,是pc上面安装的sdk模拟器,每次抓的都是一样的,就是在代码上面
然后我想用lr发出去,就是服务器不接受
另外服务器会自动打印json请求日志,那个日志和抓包的json串,有点小区别,这个也不知道如果用lr发送,到底用那个json串,反正目前这2个我都试过,错误都一样 同意云层的说法,再不行就问下开发人员 你把发出去的东西先编码了再发出去试试,服务器不一定接受你这种带编码说明的头的 回复 6# 云层
lr发请求抓包,抓出来了,不过带中文的已经显示为乱码了,不知道这个有没影响
那个安卓sdk环境有点问题,暂时启动不起来,不过之前抓包是这样的,感觉中文的地方转码了
http://192.168.1.183:8080/AIO/VisitorService.json
{"id":-1046118514,"method":"signIn","params":["{\"data\":\"{\\\"phoneNo\\\":\\\"321\\\",\\\"visitorName\\\":\\\"??\\\",\\\"email\\\":\\\"mct@mct\\\",\\\"visitorId\\\":\\\"412326198503153952\\\"}\"}"]}
http://192.168.1.183:8080/AIO/ComplainService.json
{"id":976873371,"method":"saveComplain","params":["{\"data\":\"%7B%5C%22content%5C%22%3A%5C%22xx%5C%22%2C%5C%22title%5C%22%3A%5C%22xx%5C%22%2C%5C%22addresseeName%5C%22%3A%5C%22%E5%85%AC%E5%AE%89%E5%B1%80%5C%22%2C%5C%22addresserName%5C%22%3A%5C%22%E9%87%91%E6%B0%B8%5C%22%2C%5C%22sendTime%5C%22%3A%5C%222013-06-14+03%3A35%3A13%5C%22%2C%5C%22addressee%5C%22%3A%5C%22ff8080813e8b1861013e8b1c51bc0003%5C%22%2C%5C%22contentType%5C%22%3A%5C%221%5C%22%2C%5C%22addresser%5C%22%3A%5C%22ff8080813e866bd6013e8a9d52b90007%5C%22%7D\"}"]}
真正安卓平台上面的没法抓包 回复 8# lujian2036
项目开发初期,开发都很忙,没时间帮我解决这些问题
这个是我自己提前研究下
怕后面要测试安卓服务器性能的话 你先编码了再发给服务器 安卓模拟器 听说可以用wireshark抓取数据。你可以试试看。 关键问题就是提交的数据格式和类型。让人很蛋疼啊!我问开发他也不知道哈哈。 我推荐用jmeter,相当简单。 回复 13# 张亚洲
jmeter怎么个简单法啊,我都还没搞懂,官网下了几个软件,都感觉是linux上面的包
然后搜的文档是windows的。我Q305871547,要不一起讨论下啊 jmeter添加http请求啊,有那个选项,就是针对提交文本格式的数据。
只需要往里面添加参数就行了。
截图发你邮箱了,自己看看吧! 回复 5# fanjinchang
看图片,抓包显示type还是不对
如果写成application/json-rpc,效果也是一样的
但是我抓skd里面的动作,这里显示的 type 类型是application/json-rpc
云层转码问题还在看,具体不知道不知道转成什么编码 回复 12# 云层
转了2次编码
图片是用这样的格式,转为utf-8编码发出去,后台服务报错
另外试了下stringInUnicode,转了也是差不多类似的错误
这个lr用这种方法发出去的body参数,我用抓包工具查看,是text/html格式的,但是抓包工具抓的这个程序发出去的消息格式是application/json-rpc这样的
有没什么方法控制这个type格式啊,使其变为application/json-rpc,也许可以解决或验证是不是这里出问题了 那个application/json-rpc格式的数据,能发送出去了,
如果body里面写这样的
{\"phoneNo\":\"321\",\"visitorName\":\"??\",\"email\":\"mct@mct\",\"visitorId\":\"412326198503153952\"}
之前是下面这样的
signIn: {"data":"{\"phoneNo\":\"321\",\"visitorName\":\"??\",\"email\":\"mct@mct\",\"visitorId\":\"412326198503153952\"}"}
然后lr跑的时候关联抓到的内容是这样的
{"jsonrpc":"2.0","id":"null","error":{"code":-32600,"message":"Invalid Request"}}
抓包的stream内容是下面这样的
51
{"jsonrpc":"2.0","id":"null","error":{"code":-32600,"message":"Invalid Request"}}
0 应该还是你抛过去的编码不对,其实最简单的方法就是你发给包给服务器,让开发在服务器上看看收到的是什么,调试一下你就知道你该发什么编码的包了 云层的解决方法 果然实用猥琐 哈哈哈
页:
[1]
2