51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2931|回复: 2
打印 上一主题 下一主题

[原创] rmi协议 c/s 脚本录制

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-12-14 11:24:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前接触的都是b/s结构的性能测试,这次的c/s结构的可让我损失了不少脑细胞,开发中用到了spring,所以加大了难度。还好解决了一些问题,不过还有些没解决,特来与大家分享,也希望高人能指点一下。

        _remotewrapperremote7 = _remotewrapperremotehome33.create();
        // Returns: ($Proxy120)
        
        _string7 = "com.star.sms.j2ee.support.RemoteInvokerArg __CURRENT_OBJECT = {" +
              "java.lang.Object arguments[] = {" +
                    "java.lang.Object arguments[0] = #ifUseRWCard#" +
              "}" +
              "java.lang.String beanName = #parameterService#" +
              "java.lang.Class interfaceCls = {}" +
              "java.lang.String methodName = #findSysParameter#" +
              "java.lang.Class parameterTypes[] = {" +
                    "java.lang.Class parameterTypes[0] = {}" +
              "}" +
              "java.lang.String sessionId = #97ff5e2d-e420-4356-a3ad-e55eaa6686cc#" +
        "}";
        _remoteinvokerarg7 = (com.aa.sms.j2ee.support.RemoteInvokerArg)lr.deserialize(_string7,6);  // RMIComponent
      
       for(Object object : _remoteinvokerarg7.getArguments())
            System.out.println("_remoteinvokerarg7:"+object.getClass());

       _remoteinvokerresult7 = _remotewrapperremote7.invoke((com.star.sms.j2ee.support.RemoteInvokerArg)_remoteinvokerarg7);
        // Returns: (com.star.sms.j2ee.support.RemoteInvokerResult)
        
        _remotewrapperremote7.remove();                 
        _remotewrapperremote8 = _remotewrapperremotehome90.create();
              
        _remoteinvokerarg8 = (com.aa.sms.j2ee.support.RemoteInvokerArg)lr.deserialize(7,false);  // RMIComponent
         
      SavingPayInfo spinfo = (SavingPayInfo)_remoteinvokerarg8.getArguments()[0];               
      Account account = spinfo.getAccount();
      account.setId(373L);
      Customer cust = account.getCustomer();
      cust.setId(63L);

     _remoteinvokerresult8 = _remotewrapperremote8.invoke((com.aa.sms.j2ee.support.RemoteInvokerArg)_remoteinvokerarg8);
      // Returns: (com.aa.sms.j2ee.support.RemoteInvokerResult)
        
     _remotewrapperremote8.remove();

     解释:
     1〉从录制的脚本可以看出,action就是一个java类,可以直接进行java编程。

     2〉从以上代码中可以看到 _remoteinvokerarg7 = (com.aa.sms.j2ee.support.RemoteInvokerArg)lr.deserialize(_string7,6); 这样的代码,从字面看也知道 这是返回了一个com.aa.sms.j2ee.support.RemoteInvokerArg 对象即_remoteinvokerarg7,再注意一点 deserialize 方法这个方法是反序列化的,即还原序列化的对象。经过查询API中RemoteInvokerArg该对象,我们可以找到它的方法,以上代码中用到了getArguments()方法,又通过结果对象的getClass()来确定得到类,以上结果中的通过 _remoteinvokerarg8 得到了SavingPayInfo 类,该类是我们可以直接操作的,这样就可以修改参数了。接下来的事情就是与开发人员沟通了解编码逻辑,通过修改代码来参数化数据。其中account.setId(373L);cust.setId(63L);就是修改参数的部分。
     
     如果不懂代码,可以求助开发人员,但测试人员还是需要知道参数化哪部分。

     3〉录制的脚本前后部分的连续性不好,只是捕获了客户端和服务端的传输数据。而且将这些数据固定化了。如:做一个先查询然后选择一个客户缴费,录下来的脚本虽然录制了查询和缴费过程。但是修改查询条件,再次执行脚本的时候会发现这次选择的客户并没有变化,应为脚本种已经将录制时的用户固化了,因此必须修改脚本种客户信息,而不能通过查询来选择。

     
     问题
     1〉哪一个登录来说吧,参数化了登录名和密码,即使密码设置错误运行脚本提示依然是成功。不知道该如何设置检测条件
     2〉有些步骤不通过,但是捕获不到异常
     这两个问题依然困扰着我,:(
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-12-14 12:29:47 | 只看该作者
说实话,没有具体做,那我也解决不了你的问题,但我可以提供一些我以前做的测试经验跟你分享一下。
我们在做SOAP压力测试时,也想过怎么才能获得SOAP调用的返回结果。跟开发人员了解后发现返回数据是一串XML格式的字符串。后来我们就通过调用SOAP得到它的返回并保存了该字符串,通过XML函数将属性MESSAGE获得,从而来判断调用结果是否成功;
对于你的脚本来说,其实登录也是一个调用,错误的用户名和密码作为参数发送出去,后台同样进行了处理,并返回了统一格式的结果,只是这次成功调用的结果里表示了登录失败,所以脚本运行是成功的,如果要加检测条件,唯一的办法就是将你的调用返回结果获取到。
至于第二点,怎么不通过法,有没有LOG可查,有没有加TRY和EXCEPTION?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-12-15 11:40:56 | 只看该作者
首先,多谢jackloo 的回复。

我做过soap的,通过sniffer可以完全截获到传输的xml数据。可是这次截获到的是乱码。
try,catch 派不上用场,很多程序对loadrunner层是屏蔽的,只有后台才会报出异常,lr捕获不到。

我在想是不是数据库有些项影响到了。可惜现在对该系统的数据库还不太清楚。

真是路漫漫其修远兮!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-17 02:27 , Processed in 0.069114 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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