51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 7157|回复: 22

[讨论] LoadRunner发json请求,总是有这个错误,在线等高人回答

[复制链接]

该用户从未签到

发表于 2013-7-18 14:29:47 | 显示全部楼层 |阅读模式
本帖最后由 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的错误,如附件所示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-7-19 13:25:07 | 显示全部楼层
哦,我试下先
回复 支持 0 反对 1

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-7-18 14:34:55 | 显示全部楼层
有什么好的方法,请大家说说
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2017-7-9 10:38
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    发表于 2013-7-19 08:00:39 | 显示全部楼层
    我之前也是用LR测试接口的性能,但是那个application/x-www-form-urlencoded charset=utf-8"
    提交的是文本文件是二进制传输的,LR没有把提交的数据转换成二进制,所以提交到服务器内容为空。

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

    使用道具 举报

    该用户从未签到

    发表于 2013-7-19 15:20:56 | 显示全部楼层
    "RecContentType=application/json",   
                    "EncType=application/json",   
    试一试
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-7-19 15:30:27 | 显示全部楼层
    我总觉得你其实只要再抓一次包看看LR发出去的和你之前录制应用的,就知道问题是啥了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2013-7-19 16:39:43 | 显示全部楼层
    回复 6# 云层


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

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

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

    使用道具 举报

    该用户从未签到

    发表于 2013-7-19 16:39:48 | 显示全部楼层
    同意云层的说法,再不行就问下开发人员
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-7-19 16:44:54 | 显示全部楼层
    你把发出去的东西先编码了再发出去试试,服务器不一定接受你这种带编码说明的头的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 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\"}"]}

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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2013-7-19 17:02:19 | 显示全部楼层
    回复 8# lujian2036


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

    怕后面要测试安卓服务器性能的话
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-7-19 17:09:57 | 显示全部楼层
    你先编码了再发给服务器
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-7-9 10:38
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    发表于 2013-7-19 17:16:00 | 显示全部楼层
    安卓模拟器 听说可以用wireshark抓取数据。你可以试试看。 关键问题就是提交的数据格式和类型。让人很蛋疼啊!我问开发他也不知道哈哈。 我推荐用jmeter,相当简单。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2013-7-19 17:24:36 | 显示全部楼层
    回复 13# 张亚洲


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

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-7-9 10:38
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    发表于 2013-7-22 08:40:18 | 显示全部楼层
    jmeter添加http请求啊,有那个选项,就是针对提交文本格式的数据。
    只需要往里面添加参数就行了。
    截图发你邮箱了,自己看看吧!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2013-7-22 11:30:16 | 显示全部楼层
    回复 5# fanjinchang


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

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

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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2013-7-22 14:04:07 | 显示全部楼层
    回复 12# 云层


       

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

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

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

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

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 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 | 显示全部楼层
    应该还是你抛过去的编码不对,其实最简单的方法就是你发给包给服务器,让开发在服务器上看看收到的是什么,调试一下你就知道你该发什么编码的包了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-7-23 08:16:02 | 显示全部楼层
    云层的解决方法 果然实用猥琐 哈哈哈
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-3-28 17:45 , Processed in 0.088721 second(s), 30 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表