`
bachmozart
  • 浏览: 111337 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tsung源码学习之xmerl

阅读更多
开始规模研究tsung的源代码,代码不多,看起来应该不会太费力,先参考这些资料

老大的2篇博客:
http://mryufeng.iteye.com/blog/355827
http://mryufeng.iteye.com/blog/355716
其中还提到一个writing tsung plugin
http://www.process-one.net/en/wiki/Writing_a_Tsung_plugin/
都看了一遍,然后基本明白怎么用后,就该研究如何编写plugin了

tsung 基本就分3部分,controller,client和recorder,如果不是自己录制http压力测试脚本,基本就不用看recorder的代码了

程序启动时先读取的tsung.xml配置文件,这个配置文件由controller里的ts_config来读取,用的是xmerl库,和ejabbered不同,那个是自己写的driver调用libexpat的c的库

xmerl读取xml文件后,是将xml信息存储在由xmerl.hrl定义的一些record里,主要包括
xmlElement,xmlText,xmlAttribute等

通过xmerl_scan:file("filename",[args])读取后,会生成下面的结构
#xmlElement{name=Name,
            ...
            parents=Parents,
            ...
            attributes=Attrs,
            content=Content,
            ...}   

比如下面一段xml代码
<tsung2 v="2" v2="3"><clients><client host="localhost" use_controller_vm="true"/></clients></tsung2>

对应的
name = tsung2
parents = []
attributes = [#xmlAttribute{name = v,value = "2",...},
              #xmlAttribute{name = v2,value = "3",...}],

content = [#xmlElement{},#xmlElement{},...]

所以tsung的入口parse函数是

parse(Element = #xmlElement{parents = [], attributes=Attrs}, Conf=#config{}) ->

因为根元素的parents肯定是[],然后开始依次遍历这个record

获得attributes的代码
%%%-------------------------------------------------------------------
%%% Function: getAttr/2
%%% Purpose:  search the attribute list for the given one
%%%-------------------------------------------------------------------
getAttr(Attr, Name) -> getAttr(string, Attr, Name, "").
getAttr(Type, Attr, Name) -> getAttr(Type, Attr, Name, "").

getAttr(Type, [Attr = #xmlAttribute{name=Name}|_], Name, _Default) ->
    case { Attr#xmlAttribute.value, Type}  of
        {[], string } -> "" ;
        {[], list } -> [] ;
        {[], float_or_integer } -> 0 ;
        {A,_}  -> getTypeAttr(Type,A)
    end;

getAttr(Type, [_H|T], Name, Default) ->
    getAttr(Type, T, Name, Default);

getAttr(_Type, [], _Name, Default) ->
    Default.


基本结构很清楚的
tsung.xml前面部分的clients,server,load等元素都是通用的,由框架本身处理,但是后面具体的session定义就不同了,根据具体要测试的协议不同,会调用不同的模块,比如tsung已经提供的ts_http,ts_mysql等模块

具体是在tsung 处理session根据type指定的,这个是http_simple的tsung配置样例
<session name="http-example" probability="100" type="ts_http">
...
</session>
模块其实也就是ts_http了,我们可以自定义自己的模块

处理代码可以参考ts_config.erl里的这段
%%% Parsing the request element
parse(Element = #xmlElement{name=request, attributes=Attrs},
      Conf = #config{sessions=[CurSess|_], curid=Id}) ->

    Type  = CurSess#session.type,
    SubstitutionFlag  = getAttr(atom, Attrs, subst, false),

    lists:foldl( fun(A,B) ->Type:parse_config(A,B) end,
                 Conf#config{curid=Id+1, cur_req_id=Id+1,
                             subst=SubstitutionFlag,
                             match=[]
                            },
                 Element#xmlElement.content);

这里的Type就是在读取session的type属性时获得的,然后会有一个Type名字对应的erl文件处理parse_config,就是读取自己模块特定的一些配置,这个没法写在通用的代码里
,在erlang里处处可见这样的代码,学习下












分享到:
评论
2 楼 z416177937 2011-07-01  
话说怎么就写了一篇, 后续呢?
1 楼 crackcell 2009-11-01  
看起不错,不知这玩意儿生成测试结果报表的功能咋样啊?

相关推荐

    MQTT压力测试之Tsung的使用

    MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用

    tsung+erlang包

    另一方面,`tsung-1.6.0` 是 Tsung 的源码版本1.6.0。这个文件包含了 Tsung 的所有源代码,包括配置文件、脚本、测试场景等,你可以根据自己的需求对其进行定制和扩展。Tsung 的配置文件通常以 XML 格式编写,允许...

    Tsung安装使用详细解说

    本文将详细讲解在Ubuntu系统上安装Tsung 1.4.1,并针对Openfire服务端进行压力和性能测试的过程。 ## 1. Tsung安装 ### 1.1 Tsung运行环境安装 在开始安装Tsung之前,确保系统已经安装了Erlang环境。Erlang是...

    tsung里面测试websocket的插件

    1. **安装Tsung**:首先确保系统已经安装了Tsung,如果没有,可以从官方仓库或通过包管理器进行安装。 2. **配置`websocket.xml`**:根据实际的WebSocket服务和测试需求,编辑配置文件。 3. **运行测试**:使用Tsung...

    tsung1.6.0

    **Tsung 1.6.0 - 开源多协议分布式负载测试工具** Tsung是一个功能强大的、基于Erlang编程语言开发的开源负载测试工具。它设计用于模拟大量用户并发访问,以测试网络服务和系统的性能及稳定性。Tsung不仅支持HTTP、...

    tsung测试总结

    ### TSUNG测试总结 #### 一、TSUNG概述 TSUNG是一款开源的负载与压力测试工具,主要用于评估系统的性能及稳定性。它支持多种协议,包括但不限于XMPP、HTTP、MySQL等,并且具备支持集群和高效运行的特点。由于其...

    tsung脚本及说明

    tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等

    Openfire 3.9.3 Load Test Tsung配置xml

    Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟

    Tsung负载测试tigase

    ### Tsung负载测试Tigase知识点详解 #### Tsung概述 Tsung是一款高效的压力测试工具,采用Erlang语言开发,能够支持多种网络协议,包括XMPP、HTTP、MySQL等。其独特的分布式特性使得它能够在单机环境下模拟大量...

    tsung最新用户手册

    Tsung是一款开源的压力测试工具,能够模拟多个用户对各种服务器应用进行压力测试。它使用Erlang语言编写,支持多种协议,如HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP和Jabber/XMPP。在实际使用中,Tsung可以模拟...

    Tsung_测试XMPP_安装使用说明

    tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...

    tsung高并发测试工具搭建(自己亲测,详细的一逼)

    tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的

    tsung安装使用说明

    ### Tsung 安装与使用详解 #### 一、Tsung 概述 Tsung 是一款基于 Erlang 开发的高性能压力测试工具,主要用于评估系统的并发处理能力。它支持多种协议,包括 HTTP、WebDAV、Jabber/XMPP、PostgreSQL、LDAP 和 ...

    tsung安装使用

    关于tsung工具的安装步骤以及使用过程中会遇到的常见问题解答

    tsung-1.3.3

    Tsung通常通过源码编译的方式安装,首先确保系统中已经安装了必要的依赖,如Erlang/OTP(Tsung是用Erlang编写的)。然后,下载Tsung 1.3.3的源码包`tsung-1.3.3`,解压后按照以下步骤操作: - 配置:`./configure`...

    tsung_user_guide

    ### Tsung用户指南知识点概述 #### 一、引言 ##### 1.1 Tsung是什么? Tsung是一款开源的压力测试工具,它能够模拟大量用户并发访问应用系统,并收集详细的性能数据,帮助用户评估系统的可扩展性和性能瓶颈。...

    tsung-1.5.1.tar.gz

    【tsung-1.5.1.tar.gz】是一款开源的压力测试工具,专为评估系统在高负载下的性能和稳定性而设计。它具有广泛的应用场景,特别是在测试分布式系统,如即时通讯服务器Openfire时表现尤为出色。这个压缩包包含了Tsung...

    tsung安装相关文件

    —tsung-1.5.0.tar.gz —libtemplate-perl_2.20.orig.tar.gz —gnuplot-4.4.0.tar.gz —otp_src_R15B.tar.gz —perl-HTML-Tagset-3.10-2.1.1.noarch.rpm —perl-HTML-Parser-3.55-1.fc6.x86_64.rpm —...

    tsung-react-stats:从 json 报告中显示 tsung 统计信息

    `Tsung` 的强大之处在于它的可扩展性和灵活性,允许用户通过自定义脚本进行复杂的负载测试。 在执行完 `Tsung` 的负载测试后,它会生成一份详细的 JSON 格式报告,其中包含了丰富的性能指标,如响应时间、并发用户...

Global site tag (gtag.js) - Google Analytics