开始规模研究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里处处可见这样的代码,学习下
分享到:
相关推荐
MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用
压力测试 压力测试 tsung linux
tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等
tsung里面测试websocket的插件含 websocket.xml 等
Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟
Tsung安装使用的详细解说,主要针对xmpp的服务端(比如openfire的测试),编写测试场景的脚本配置详细说明。本人使用的是ubuntu操作系统、Tsung1.4.1
tsung+erlang测试工具,初学者应用必备,内部放置tsung源程序文件和erlang文件
tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...
tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的
tsung是一个非常好用的压力测试软件,基于erlang语言,支持多种...在Ubuntu上装好tsung之后,首先要用ulimit修改系统支持的最大fd数量(ulimit-n 20480),否则tsung最多只能创建不到1024个连接,测试脚本是一个xml文件
tsung 测试 java erlang
关于tsung工具的安装步骤以及使用过程中会遇到的常见问题解答
tsung为一个开源的多协议分布式负载测试工具,使用erlang语言开发的。具体安装使用可以参考URL:http://www.51ste.com/share/det-222.html
tsung最新用户手册,包含HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, and Jabber/XMPP servers压力测试模版,错误说明等。
tsung安装使用,参数说明,模拟openfire注册用户,模拟用户openfire登录、状态更改、发送消息,对openfire长时间压力测试
—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 —...
包括tigase的安装运行,tsung的安装运行,压测结果的信息解析等;
tsung-react-stats 从 json 报告中显示 tsung 统计信息
tsung安装包,linux下进行压力测试的工具
这个MySQL服务器压测的需求是:Tsung用于压测MySQL服务器的脚本环境:LinuxRHEL5U4X86-64,24G内存,16核.MySQL服务器在10.232.36.100上。 这个MySQL服务器压测的需求是: 环境:LinuxRHEL5U4X86-64,24G内存,16核....