new_lio 发表于 2013-7-18 14:29:47

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的错误,如附件所示

new_lio 发表于 2013-7-19 13:25:07

哦,我试下先

new_lio 发表于 2013-7-18 14:34:55

有什么好的方法,请大家说说

张亚洲 发表于 2013-7-19 08:00:39

我之前也是用LR测试接口的性能,但是那个application/x-www-form-urlencoded charset=utf-8"
提交的是文本文件是二进制传输的,LR没有把提交的数据转换成二进制,所以提交到服务器内容为空。

你可以用jmeter测试接口,很简单的。   如果用上面问题解决告诉我一下。

fanjinchang 发表于 2013-7-19 15:20:56

"RecContentType=application/json",   
                "EncType=application/json",   
试一试

云层 发表于 2013-7-19 15:30:27

我总觉得你其实只要再抓一次包看看LR发出去的和你之前录制应用的,就知道问题是啥了。

new_lio 发表于 2013-7-19 16:39:43

回复 6# 云层


    这个没有录制啊,抓包,是pc上面安装的sdk模拟器,每次抓的都是一样的,就是在代码上面

然后我想用lr发出去,就是服务器不接受

另外服务器会自动打印json请求日志,那个日志和抓包的json串,有点小区别,这个也不知道如果用lr发送,到底用那个json串,反正目前这2个我都试过,错误都一样

lujian2036 发表于 2013-7-19 16:39:48

同意云层的说法,再不行就问下开发人员

云层 发表于 2013-7-19 16:44:54

你把发出去的东西先编码了再发出去试试,服务器不一定接受你这种带编码说明的头的

new_lio 发表于 2013-7-19 16:46:34

回复 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\"}"]}

真正安卓平台上面的没法抓包

new_lio 发表于 2013-7-19 17:02:19

回复 8# lujian2036


    项目开发初期,开发都很忙,没时间帮我解决这些问题
这个是我自己提前研究下

怕后面要测试安卓服务器性能的话

云层 发表于 2013-7-19 17:09:57

你先编码了再发给服务器

张亚洲 发表于 2013-7-19 17:16:00

安卓模拟器 听说可以用wireshark抓取数据。你可以试试看。 关键问题就是提交的数据格式和类型。让人很蛋疼啊!我问开发他也不知道哈哈。 我推荐用jmeter,相当简单。

new_lio 发表于 2013-7-19 17:24:36

回复 13# 张亚洲


    jmeter怎么个简单法啊,我都还没搞懂,官网下了几个软件,都感觉是linux上面的包
然后搜的文档是windows的。我Q305871547,要不一起讨论下啊

张亚洲 发表于 2013-7-22 08:40:18

jmeter添加http请求啊,有那个选项,就是针对提交文本格式的数据。
只需要往里面添加参数就行了。
截图发你邮箱了,自己看看吧!

new_lio 发表于 2013-7-22 11:30:16

回复 5# fanjinchang


    看图片,抓包显示type还是不对

如果写成application/json-rpc,效果也是一样的
但是我抓skd里面的动作,这里显示的 type 类型是application/json-rpc

云层转码问题还在看,具体不知道不知道转成什么编码

new_lio 发表于 2013-7-22 14:04:07

回复 12# 云层


   

转了2次编码
图片是用这样的格式,转为utf-8编码发出去,后台服务报错

另外试了下stringInUnicode,转了也是差不多类似的错误

这个lr用这种方法发出去的body参数,我用抓包工具查看,是text/html格式的,但是抓包工具抓的这个程序发出去的消息格式是application/json-rpc这样的

有没什么方法控制这个type格式啊,使其变为application/json-rpc,也许可以解决或验证是不是这里出问题了

new_lio 发表于 2013-7-22 17:09:02

那个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

云层 发表于 2013-7-22 17:19:22

应该还是你抛过去的编码不对,其实最简单的方法就是你发给包给服务器,让开发在服务器上看看收到的是什么,调试一下你就知道你该发什么编码的包了

makinstall 发表于 2013-7-23 08:16:02

云层的解决方法 果然实用猥琐 哈哈哈
页: [1] 2
查看完整版本: LoadRunner发json请求,总是有这个错误,在线等高人回答