51Testing软件测试论坛

标题: LoadRunner发json请求,总是有这个错误,在线等高人回答 [打印本页]

作者: new_lio    时间: 2013-7-18 14:29
标题: 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 [cn.org.coral.biz.complain.service.jsonif.impl.ComplainJsonServiceImpl.saveComplain]>>>
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 [/AIO/VisitorService.json._jspService]>>> No content to map due to end-of-input
at [Source: com.googlecode.jsonrpc4j.NoCloseInputStream@2a402b0e; line: 1, column: 1]
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: com.googlecode.jsonrpc4j.NoCloseInputStream@2a402b0e; line: 1, column: 1]
        at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) [jackson-databind-2.1.1.jar:2.1.1]
        at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2839) [jackson-databind-2.1.1.jar:2.1.1]
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2781) [jackson-databind-2.1.1.jar:2.1.1]
        at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:1627) [jackson-databind-2.1.1.jar:2.1.1]
        at com.googlecode.jsonrpc4j.JsonRpcServer.handle(JsonRpcServer.java:220) [jsonrpc4j-0.26.jar:na]

如果加上这个后"EncType=utf-8",后台又会报这个utf-8的错误,如附件所示
作者: new_lio    时间: 2013-7-18 14:34
有什么好的方法,请大家说说
作者: 张亚洲    时间: 2013-7-19 08:00
我之前也是用LR测试接口的性能,但是那个application/x-www-form-urlencoded charset=utf-8"
提交的是文本文件是二进制传输的,LR没有把提交的数据转换成二进制,所以提交到服务器内容为空。

你可以用jmeter测试接口,很简单的。   如果用上面问题解决告诉我一下。
作者: new_lio    时间: 2013-7-19 13:25
哦,我试下先
作者: fanjinchang    时间: 2013-7-19 15:20
"RecContentType=application/json",   
                "EncType=application/json",   
试一试
作者: 云层    时间: 2013-7-19 15:30
我总觉得你其实只要再抓一次包看看LR发出去的和你之前录制应用的,就知道问题是啥了。
作者: new_lio    时间: 2013-7-19 16:39
回复 6# 云层


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

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

另外服务器会自动打印json请求日志,那个日志和抓包的json串,有点小区别,这个也不知道如果用lr发送,到底用那个json串,反正目前这2个我都试过,错误都一样
作者: lujian2036    时间: 2013-7-19 16:39
同意云层的说法,再不行就问下开发人员
作者: 云层    时间: 2013-7-19 16:44
你把发出去的东西先编码了再发出去试试,服务器不一定接受你这种带编码说明的头的
作者: new_lio    时间: 2013-7-19 16:46
回复 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
回复 8# lujian2036


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

怕后面要测试安卓服务器性能的话
作者: 云层    时间: 2013-7-19 17:09
你先编码了再发给服务器
作者: 张亚洲    时间: 2013-7-19 17:16
安卓模拟器 听说可以用wireshark抓取数据。你可以试试看。 关键问题就是提交的数据格式和类型。让人很蛋疼啊!我问开发他也不知道哈哈。 我推荐用jmeter,相当简单。
作者: new_lio    时间: 2013-7-19 17:24
回复 13# 张亚洲


    jmeter怎么个简单法啊,我都还没搞懂,官网下了几个软件,都感觉是linux上面的包
然后搜的文档是windows的。我Q305871547,要不一起讨论下啊
作者: 张亚洲    时间: 2013-7-22 08:40
jmeter添加http请求啊,有那个选项,就是针对提交文本格式的数据。
只需要往里面添加参数就行了。
截图发你邮箱了,自己看看吧!
作者: new_lio    时间: 2013-7-22 11:30
回复 5# fanjinchang


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

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

云层转码问题还在看,具体不知道不知道转成什么编码
作者: new_lio    时间: 2013-7-22 14:04
回复 12# 云层


    [attach]86450[/attach]

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

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

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

有没什么方法控制这个type格式啊,使其变为application/json-rpc,也许可以解决或验证是不是这里出问题了
作者: new_lio    时间: 2013-7-22 17:09
那个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
应该还是你抛过去的编码不对,其实最简单的方法就是你发给包给服务器,让开发在服务器上看看收到的是什么,调试一下你就知道你该发什么编码的包了
作者: makinstall    时间: 2013-7-23 08:16
云层的解决方法 果然实用猥琐 哈哈哈
作者: fanjinchang    时间: 2013-7-23 08:23
回复 19# 云层

同意观点,在开发工具设断点,访问发到开发工具(例如Eclipse),查看断点,就可以知道原因了
作者: ttbelieve    时间: 2013-7-23 13:21
我觉得是协议选错了,看看要不然选web service协议,或者移动协议
作者: new_lio    时间: 2013-7-23 22:46
回复 22# ttbelieve


    移动协议是什么协议?

   协议没错啊,就是http协议的,不过你说的,我明天去试一下




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2