基于AMF协议的Flex性能测试

flexJava通过amf传输协议传输数据 服务端:IntelliJIDEA 部署Tomcat及创建一个web工程,详见博客如下 https://www.cnblogs.com/wql025/p/5011868.html(切记,此步骤必须操作,idea与eclipse不一样,如果不操作此步骤,会报错,缺所有用到tomcat的的类,导致发布到tomcat失败,程序运行失败) 客户端:必备软件与环境Flush Builder、火狐浏览器、fla... 阅读详情
       接触过Flex应用的,基本上对于其表现层的视觉效果都是非常赞赏的,也正是由于其华丽的外表掩盖了其诸多内在的缺陷,比如说响应速度、内存泄漏等等性能问题,对于大部分的Flex开发程序员或者是测试人员都是非常头痛的事情。本人最近就碰到基于Flex应用程序的性能测试,由于它本身的特殊性,通信组建、协议基本上都是Adobe自己开发的,所以基本上通用的测试工具对他支持都是不太理想的。通过一系列的摸索,最终还是得把注意力转移到Flex本身上来,全面去解析AMF协议,其实AMF协议还是走HTTP协议的,但从执行效率上来说,我们不能单纯通过HTTP协议来模拟其执行过程,因为中间必须要走AMF协议,虽然LoadRunner也有支持AMF协议,但AMF本身是需要Flash Player来支持,录制得到的脚本,不易于理解和分析,我们无法很好分析其执行过程,而且它封包和解包都是二进制格式,如果以这种方案去执行,我们就需要解析它每一次封包和解包过程,相当于要去深入到AMF协议包解析过程,这样就把简单的问题复杂化。本身对于C/S应用程序的性能测试,最大的问题就是数据包解析,通过LoadRunner去压测,就可能要面临丢包的情况。所以通常情况下,我们为了保证协议数据包传输的完整性,尽量去避开直接去与协议数据包打交道,而且是通过上层的封装方式进行请求,而不去干预内在的复杂过程,这样就既能保证数据传输的完整性,同时也保证与业务逻辑实现方式的一致性,达到真实环境的压测方案。

  下面我们将具体了解哈AMF协议,并通过模拟Client与Server实现AMF协议通信的连接方式来完成大并发的压力测试。

  AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash 播放器与Flash Remoting网关通信提供了一种轻量级的、高效能的通信方式。

  模拟AMF请求与Server端建立通信,Adobe官方提供了一个Server端的通信服务就是BlazeDS,Flex将数据通过AMF协议转换成二进制格式进行传输给Server端的BlazeDS服务,然后BlazeDS再将数据解析成Java需要的格式,完成Flex客户端与Server端的通信过程。因此通过进一步分析发现,我们的目的就是要模拟AMF与BlazeDS建立连接,就解决了问题了。这里,就是利用Java来模拟AMF请求,通过AMFConnection连接Blazeds接口,具体Demo代码如下:  

package org.test.service.TestLogin;

import flex.messaging.io.amf.client.AMFConnection;
import flex.messaging.io.amf.client.exceptions.ClientStatusException;
import flex.messaging.io.amf.client.exceptions.ServerStatusException;

public class AMFDemo {

    public static void main(String[] args) {
        // 创建AMF连接
        AMFConnection amfCon = new AMFConnection();
        
        //连接 remote URL
        String url = "http://localhost:8080/TestLogin/messagebroker/amf" ;
         try{
            amfCon.connect(url);
        }catch(ClientStatusException cse){
            System.out.println(cse);
            return ;
        }
        
        TestLogin result ;    
        try{
            result = (TestLogin)amfCon.call("TestLogin.login","username","passwd");//传输对象的参数,登录用户、密码
        }catch(ClientStatusException ce){
            System.out.println(ce);
        }catch(ServerStatusException se){
            System.out.println(se);
        }
        amfCon.close();        
        System.out.println("Sucessfull!!!");
    }
}

如果以上连接测试成功之后,那么接下来的问题就好解决了,那就是模拟并发,对于Java来说,那就是多线程的事儿了,通过多线程来控制实现并发用户量,完成BlaseDS接口的压力测试。多线程代码实现如下:
package org.test.service.TestLogin;

import flex.messaging.io.amf.client.AMFConnection;
import flex.messaging.io.amf.client.exceptions.ClientStatusException;
import flex.messaging.io.amf.client.exceptions.ServerStatusException;

public class AMFDemo implements Runnable{

        public void run(){
        // 创建AMF连接
        AMFConnection amfCon = new AMFConnection();
        
        //连接 remote URL
        String url = "http://localhost:8080/TestLogin/messagebroker/amf" ;
        try{
            amfCon.connect(url);
        }catch(ClientStatusException cse){
            System.out.println(cse);
            return ;
        }
        //循环100次
        for(int i=0; i<100; i++){
            TestLogin result ;    
            try{
                Thread.sleep(1000L);
                long TestStart = System.currentTimeMillis();
                result = (TestLogin)amfCon.call("TestLogin.login","username","passwd");//传输对象的参数,登录用户、密码
                System.out.println("login:" + (System.currentTimeMillis() - TestStart));//打印出登录的响应时间
            }catch(ClientStatusException ce){
                System.out.println(ce);
            }catch(ServerStatusException se){
                System.out.println(se);
            }catch (final InterruptedException e) {
                e.printStackTrace();
            }
        }
        amfCon.close();        
        System.out.println("Sucessfull!!!");
    }
}    
    
public class AMFDemoTest {
    //创建100个线程
    public static void main(String[] args) throws Exception {
        for (int i = 0; i < 100; i++) {
            Runnable runnable = new AMFDemo();
            new Thread(runnable).start();
        }
    }

}

  通过Java模拟AMF请求与BlazeDS建立通信连接,完成基于AMF协议的Flex应用程序的压力测试,抛弃传统的工具压测方式,从而寻找最适合FLex本身的性能测试方案。当然,这个只是一种纯代码方式来实现,我们也可以借助通用工具来完成,至少在完成以上的代码实现过程,之后可以通过LoadRunner或者是JMeter来调用Java代码完成,不过似乎JMeter对于Java支持更方便。使用工具的目的其实为了采样压力测试的数据方便分析,而真正实现压力测试,其实不管是工具还是脚本,其实都是通过模拟底层的交互方式来达到同样的目的。

  作为一名测试人员,对于Java与Flex的通信方式的理解远不如开发人员,所以可能以上对于BlazeDS的通信机制描述难免有误。但这里并不只是记录如何实现一种压力测试,而是表达一种个人对于性能测试思想的理解,很多时候不要一味地去追求自动化工具的强大,而忽略了其性能测试本身的思想。希望能通过不断总结,来逐步提高自己!

告别偏移地址!用C# S7PLUS驱动读写西门子S7-1500符号地址(TIA Portal V17+环境配置) 本文详细介绍了如何在TIA Portal V17+环境中使用C# S7PLUS驱动读写西门子S7-1500 PLC的符号地址,告别传统的偏移地址方式。通过配置OpenSSL、集成S7PLUS驱动库,以及实战案例展示符号地址的读写方法,显著提升代码可读性和维护效率。文章还涵盖了环境准备、高级配置及常见问题解决方案,助力工业自动化开发者实现更高效的PLC通讯。 阅读详情

相关推荐

RK3588之内存带宽计算及达成率

本章来和大家介绍一下内存带宽的计算与达成率

文艺小少年的博客 1772

AMF抓取flex页面数据

抓取AMF协议flex页面,支持模拟登录和页面抓取。

flexamf

flexjava通信

flex java amf_flex /messagebroker/amf问题的解决(转载)

这个问题,我也遇到过了,不过,最后都解决了。感觉太普遍了,所以想写篇文章,分享一下我的解决办法。根据我的经历,目前发现此问题出现的原因有如下三点:1.相关路径设置错误。比如,flex build path,flex server等。首先要检查这些。我有一次就是flex build path设置错误。比如,编译成swf文件放在a文件夹,结果去b文件夹访问。不要笑。后来,查明原因是因为我直接把别人的项...

weixin_29521135的博客 470

flex java amf_Flex AMF3+JAVA的调用范例

使用RSS订阅本Blog amfAdobe独家开发的数据封装格式,Flash可以直接访问,由于它是基于二进制的数据传输,所以相对于xml SOAP、json、webService等基于字符串的数据格式,有数据体积小和效率高的特点。amf目前有AMF0和AMF3两种格式,flash8以前版本只支持AMF0,flash9支持两种格式。AMF3比AMF0效率更高。调试环境:1、JDK 1.52、Res...

weixin_39671631的博客 339

flex java amf_java – 使用flex套接字读取AMF对象

我目前正在尝试使用套接字和AMF序列化对象在javaflex之间进行通信.在java方面,我使用BlazeDS的Amf3Input和Amf3Output(flex-messaging-common.jar和flex-messaging-core.jar).连接已正确建立,如果我尝试将对象从flex发送到java,我可以轻松读取对象:FLEX方面:protected function button...

weixin_33380613的博客 353

flex amf的使用

AMFAdobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash 播放器与Flash Remoting网关通信提供了一种轻量级的、高效能的通信方式。如下图所示: [img]http://dl.iteye.com/upload/attachment/177238/a4c46908-53b4-3cb8-8347-6176710cfa9c.gif[/img] ...

yangkd的专栏 581

基于AMF协议Flex应用程序-性能测试

基于AMF协议Flex应用程序-性能测试  接触过Flex应用的,基本上对于其表现层的视觉效果都是非常赞赏的,也正是由于其华丽的外表掩盖了其诸多内在的缺陷,比如说响应速度、内存泄漏等等性能问题,对于大部分的Flex开发程序员或者是测试人员都是非常头痛的事情。本人最近就碰到基于Flex应用程序的性能测试,由于它本身的特殊性,通信组建、协议基本上都是Adobe自己开发的,所以基本上通用的测试工具对他

enchanterblue的专栏 293

基于AMF协议Flex应用程序

接触过Flex应用的,基本上对于其表现层的视觉效果都是非常赞赏的,也正是由于其华丽的外表掩盖了其诸多内在的缺陷,比如说响应速度、内存泄漏等等性能问题,对于大部分的Flex开发程序员或者是测试人员都是非常头痛的事情。本人最近就碰到基于Flex应用程序的性能测试,由于它本身的特殊性,通信组建、协议基本上都是Adobe自己开发的,所以基本上通用的测试工具对他支持都是不太理想的。通过一系列的摸索,最终还是

wan_xie2009的专栏 686

flex性能测试相关资料

LoadRunner提供FlexAMF两个协议AMF:A Macromedia proprietry protocol that allows Flash Remoting binary data to be exchanged between a Flash application and an application server over HTTP.A typical client app

enchanterblue的专栏 200

LoadRunner 9.1录制 Flex

录制过程先参考一下此转帖【http://www.automatedwebtest.info/performance-testing/loadrunner-flex-protocol-recording/】 LoadRunner 9.1 - Flex Protocol Recording LoadRunner 9.1’s Flex protocol includes both AMF3 an...

ruilin215 97

Flex 程序性能测试

Flex 程序性能测试作者:叶晖俊 yehuijun2001@163.com2008年4月11日 注: Flex程序的性能测试, 作者叶晖俊。 本文版权归属作者所有,可以自由转载,但是必须注明出处和作者,否则将追究法律责任。 简介:AdobeFlex 已经越来越流行,但是Flex程序的性能测试却还没有很好的工具。包括著名的性能测试工具LoadRunner都还没有对新版

玉龙(支付宝, 小微金服, 高级产品开发工程师) 3439

Flex程序性能测试

farwang的专栏 661

Flex性能-压力测试(绝对可行版)

关于flex的压力测试方法,网上目前介绍的甚少。之前介绍过一个关于flex性能测试的工具,当时找到很高兴,但用的时候看官方文档才发现,该工具目前还不支持BlazeDS。到网上又狂google一遍,终于找到一点线索:目前很多测试工具尚不支持AMF,只有少数商业测试软件如 WEBload 支持。。。。于是到webload官方下载了一个(官方给了一个lisence),安装...当录制完脚本,开“压”的时

志当存高远 2182

EN 55022-2010

EMC测试标准,信息技术设备辐射测试标准

上一篇: TestLink1.9.3测试用例:Excel转换XML工具<二>实现代码
下一篇: LoadRunner调用Java程序—性能测试
candle806
博客等级 码龄19年 157粉丝 86原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值