Tsung HTTP脚本开发

Tsung HTTP脚本开发

个人笔记,仅供参考

1.     Tsung简介

Tsung是基于elang语言开发的分布式压力测试工具,它支持多种协议,能对HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP和Jabber/XMPP 服务器进行负载测试。Tsung的强大之处在于其可以在单台机器上模拟生成大量用户。相比Apache Jmeter,Tsung可以轻松模拟40,000请求/秒,而且没有让人困惑的GUI页面,只需要在xml文件里面配置即可。若单个客户机无法满足压力测试需求,还可以使用多客户机集群对服务器进行压测。

2.     安装

部署环境:linux操作系统

安装Tsung之前需要准备一些必需模块,安装elang,Tsung以及报告生成模块等。

参考:http://www.cnblogs.com/tsbc/p/4272974.html

3.     Tsung.xml

安装完成后,所有的模拟生成用户,请求的配置都在Tsung.xml文件中进行定义:Tsung通过执行Tsung.xml对目标服务器进行负载测试。脚本的所有内容封装在<Tsung></Tsung>标签对中,如图所示:

<?xml version="1.0"?>

<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd" [] >

<tsung loglevel="info">

...

</tsung>

1.1     Client&Server

脚本编写从定义客户端和服务器开始。客户端,即对服务器施加负载压力。对于普通的负载测试而言,客户端与服务器的定义一般如下:

<clients>

<client host="localhost" use_controller_vm="true"/>

</clients>

<servers>

<server host="192.168.1.1" port="80" type="tcp"></server>

</servers>

在整个负载测试过程中,脚本都是使用一个客户端对唯一的服务器进行测试。

l  use_controller_vm: 属性为true 意指使用Erlang虚拟机作为控制器;

l  port:表示应用服务的端口为80;

l  type:tcp表示客户机与服务器进行tcp连接;

port,type项可在PC端使用WireShark获取应用服务的通讯报文得出。

要对服务器进行大负载测试时,仅使用一个客户端明显无法对服务器模拟大量请求,此时可使用多个虚拟的IP来模拟更多的机器。

默认设置下,负载是平均分配到所有cpu上(默认是一个client拥有一个cpu)。weight参数是考虑到每个客户机处理的能力不同设置,假如只有两个client,weight值为

1,和2,那么weight为1的client会承担1/3的负载,同理weight值为2的client会承担2/3的负载。

maxusers参数默认值为800,不同操作系统单个进程建立socket链接数量有限制,一般不超过1024。因此如果用户数超过限制的,需要开启一个新的erlang虚拟机增加用户数。

<clients>

<client host="loadnode2" weight="1" maxusers="40000" cpu="1">

<ip value="192.168.122.3"/>

</client>

<client host="loadnode3" weight="1" maxusers="40000" cpu="1">

<ip value="192.168.122.21"/>

</client>

<client host="loadnode4" weight="1" maxusers="40000" cpu="1">

<ip value="192.168.122.11"/>

</client>

</clients>

<servers>

<server host="10.9.195.1" port="8080" type="tcp"></server>

</servers>

1.1     定义负载load

通过使用多个arrival phases标签实现客户端对服务器施加负载:

<load>

<arrivalphase phase="1" duration="10" unit="minute">

<users interarrival="2" unit="second"></users>

</arrivalphase>

<arrivalphase phase="2" duration="10" unit="minute">

<users interarrival="1" unit="second"></users>

</arrivalphase>

<arrivalphase phase="3" duration="10" unit="minute">

<users interarrival="0.1" unit="second"></users>

</arrivalphase>

</load>

上述xml代码表示:在测试开始的10分钟,每一秒生成2个用户;在第二个10分钟,每秒生成1个用户;第三个十分钟,每秒生成10个用户。

另外可以使用arrivalrate取代interarrival标签,但是含义不同:

<arrivalphase phase="1" duration="10" unit="minute">

<users arrivalrate="10" unit="second"></users>

</arrivalphase>

表示在测试开始的第一个十分钟内,每秒生成10个新用户。标签内还可以maxuser限制生成用户数量,或者使用loop循环标签生成更多用户。

负载测试的时长通常比arrivalphase定义的时间要长,原因是Tsung会等待所有的session完成后才结束负载测试。

3.3     <option>

在Tsung.xml中使用option标签可设置全局变量。例如http request之间的thinktime、SSL密码、TCP/UDP缓存大小。只要标签option内的值正确,option标签内的属性值会重写session标签内同一属性的值。对HTTP而言,通常使用option标签设置UserAgent值。

<option type="ts_http" name="user_agent">

<user_agent probability="80">

Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21

</user_agent>

<user_agent probability="20">

Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4

</user_agent>

</option>

probability表示在整个负载测试过程中使用该user-agent进行模拟请求的百分比,若对user_agent使用百分比进行设置,所有user_agent分配百分比加总要等于100%。

3.4     <Session>

Session标签内描述的是需要执行的请求。每一对session标签都有一个给定的百分比。这些百分比决定新生成的用户将执行哪一个session,所有session的百分比之和必须等于百分之百。统计一组请求的响应时间,应将这一组请求使用transaction标签对括起来。例如要知道一个网站登录页面的响应时间,要将访问该页面的所有请求包含进transaction标签内(包括请求html+请求首页picture等)。下面介绍HTTP脚本的例子的结果统计报告中index_request事务将统计出请求index.en.html + header.gif的响应时间。需要注意的是如果transaction中包含thinktime ,结果报告中Responsetime也包含有thinktime时间在内。

thinktime的设置有多种方式:

<thinktime value="20" random="true"></thinktime>

表示thinktime是随机的,但整体的平均值为20s。

设置thinktime的范围:

<thinktime min="2" max="10" random="true"></thinktime>

3.5     HTTP

以下脚本表示Tsung一般支持的HTTP特性,包括GET、POST请求,基础的认证...

http标签中的url使用绝对路径,会重写server里面中定义的url。

<sessions>

<session name="http-example" probability="70" type="ts_http">

<request> <http url="/" method="GET" version="1.1">

</http> </request>

<request> <http url="/images/logo.gif"

method="GET" version="1.1"

if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT">

</http></request>

<thinktime value="20" random="true"></thinktime>

<transaction name="index_request">

<request><http url="/index.en.html"

method="GET" version="1.1" >

</http> </request>

<request><http url="/images/header.gif"

method="GET" version="1.1">

</http> </request>

</transaction>

<thinktime value="60" random="true"></thinktime>

<request>

<http url="/" method="POST" version="1.1"

contents="bla=blu">

</http> </request>

<request>

<http url="/bla" method="POST" version="1.1"

contents="bla=blu&amp;name=glop">

<www_authenticate userid="Aladdin"

passwd="open sesame"/></http>

</request>

</session>

<session name="backoffice" probability="30" ...>

... </session>

</sessions>

Tsung 1.2.2版本之后,提供HTTP请求头添加方式:

<request>

<http url="/bla" method="POST" contents="bla=blu&amp;name=glop">

<www_authenticate userid="Aladdin" passwd="open sesame"/>

<http_header name="Cache-Control" value="no-cache"/>

<http_header name="Referer" value="http://www.w3.org/"/>

</http>

Tsung 1.3.1开始,提供手动添加cookie功能:

<request>

<http url="/bla" method="POST" contents="bla=blu&amp;name=glop">

<www_authenticate userid="Aladdin" passwd="open sesame"/>

<http_header name="Cache-Control" value="no-cache"/>

<http_header name="Referer" value="http://www.w3.org/"/>

</http>

</request>

但所添加的cookie只能作用于当前request,需要在每个request标签中添加cookie信息。

使用POST或者PUT方式时,请求的内容写在contents内,注意的是,要把内容转换成XML编码格式,如<、&、%这些字符是需要使用xml转义字符。

4.     Tsung.xml使用       

4.1        新建目录,拷贝配置脚本

在root文件夹下新建.Tsung目录,用于存放log和xml配置,测试配置文件可参考/usr/local/Tsung/share/doc/Tsung/examples/目录下配置。

[[email protected] local]#mkdir ~/.Tsung

[[email protected] local]#cp /usr/local/Tsung/share/doc/Tsung/examples/http_simple.xml ~/.Tsung/Tsung.xml

cp命令将http_simple.xml拷贝到.Tsung文件夹,并且命名为Tsung.xml,这里的http_simple.xml只是参考例子还需要自己编辑定义的。

实际上可以直接将自己定义好的Tsung.xml上传至创建的.Tsung目录下,执行:

4.2        执行Tsung.xml

[[email protected] local]# Tsung start

Starting Tsung
"Log directory is: /root/.Tsung/log/20150812-1636"
生成报告的在目录/root/.Tsung/log/20150812-1636

4.3        生成图表文件

    进入报告所在目录使用命令/usr/lib64/Tsung/bin/Tsung_stats.pl生成报表。
根据安装目录不同,命令路径有所区别,可以在根目录下使用find -name Tsung_stats.pl查找Tsung_stats.pl所在目录再执行。

[[email protected] 20150812-1636]# /usr/local/Tsung/lib/Tsung/bin/Tsung_stats.pl

creating subdirectory data

creating subdirectory gnuplot_scripts

creating subdirectory images

No data for Session

No data for Perfs

No data for Transactions

No data for Match

No data for Event

No data for Async

No data for Size

size_rcv is equal to 0 !

size_sent is equal to 0 !

执行之后,将整个20150812-1636拷贝至本地,点击report.html查看负载测试结果。.tsung是隐藏目录,建议将报告拷贝到 /root/tmp临时目录后,使用winscp弄到本地打开。

时间: 2024-10-01 06:13:00

Tsung HTTP脚本开发的相关文章

Sqoop 脚本开发规范(实例手把手带你写sqoop export和sqoop import)

首先,先明确,为什么Sqoop需要规范的脚本开发呢? 答:是因为,Sqoop import HDFS/Hive/HBase这些都是手动.但是在实际生产里,有时候,需要用脚本来完成. 比如,通过shell脚本来操作对Sqoop.Hive.HBase.MapReduce.HDFS.Spark.Storm等各种. Sqoop 脚本开发规范 目录规范 1.目录结构体系 /home/hadoop(开发用户)/app/djt(数据来源.业务)/sh/sqoop 示例:/home/hadoop/app/djt

【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合

[Cocos Creator ](千人群):  432818031 上一篇,介绍了Himi在使用过cc所有组件后的一篇总结,没有具体介绍每个组件的原因在于官方文档很齐全,而且也有视频的介绍. 所以希望童鞋们可以把我这两篇博文当成对组件.脚本两部分开发的整理与总结. 后续的文章,Himi应该主要更新一些官方还未补充或者还没有的教程.避免无用功. 下面直接放出代码,因为不是很难理解.所以不再一一赘述,都是常用的函数.事件监听.动作回调.定时器等开发过程中必接触的. 大致内容如下: cc 属性介绍 获

【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

转载自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括,如果你的项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台,这时候你的上架时候是个不确定的时候,具体什么时候能上架,主要跟平台有关,你再着急,也没有用的. 那么如果你的项目是使用脚本语言进行

Selenium+C#自动化脚本开发学习

Selenium+C#自动化脚本开发知识学习 1:Selenium中对浏览器的操作 首先生成一个Web对象 IWebDriver driver = new FirefoxDriver(); //打开指定的URL地址 driver.Navigate().GoToUrl(@"http://12.99.102.196:9080/corporbank/logon_pro.html"); //关闭浏览器 Driver.quit(); 网银浏览器兼容性测试过程中,关闭浏览器后会有对话框,此问题解决

loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取

转自:http://blog.sina.com.cn/s/blog_13cc013b50102v49c.html(查看原文) 在VuGen中默认使用{}的字符串称为参数 注意:参数必须在双引号中才能用 将字符串保存为参数 lr_save_string("string you want to save", "arg_name"); 举例:用参数来替换需要打开的url链接 Action2() { lr_save_string("http://172.25.75

Loadrunner脚本开发规范

目录 1.一般约定... 3 2.代码注释约定... 4 3.格式化代码... 5 1.一般约定 1.1具体脚本规则,必须在具体代码中加注释,以便脚本开发人员阅读和理解脚本. 1.2脚本的存放规则: 测试脚本应该存储在指定的库中,例如一个共享的驱动盘或测试管理工具中.为节省空间,便于复用,测试脚本的文件夹下的: result,res,date 文件夹,后缀名为:.idx  .log  .txt 文件都可不必保留.    1.3脚本中 auction的命名规则: 录制脚本前有个命名规则非常有必要,

基于lua的网页脚本开发语言cgilua(转)

这里为大家介绍基于lua脚本实现的网页开发语言,cgilua 介绍 cgilua使用Lua是一个用于创建动态网页的服务器端脚本语言.纯LUA脚本和LUA页(LP)的支持,cgilua.Lua脚本是一个Lua程序创建一个网页的全部内容并返回给客户端.Lua页面是一个常规的标记的文本(HTML,XML等)文件中嵌入Lua代码中使用一些特殊的标签.这些标签是由cgilua和结果页返回到客户端的处理. Lua脚本和Lua页同样易于使用,并选择其中的一个主要取决于所产生的网页的特点.当Lua页面逻辑和格式

java脚本开发根据客户IP获取IP的具体地理位置信息

原文:java脚本开发根据客户IP获取IP的具体地理位置信息 源代码下载地址:http://www.zuidaima.com/share/1550463468522496.htm 根据客户IP获取IP的具体地址 运行结果: package com.zuidaima.founder.util.ip; import java.net.InetAddress; import java.net.UnknownHostException; /** * 功能描述:测试 *@author www.zuidai

U3D脚本开发基础

1.MonoBehaviour类,定义了对各种特定事件的脚本响应函数.这些函数均以On做开头. 2.U3D中常用的组件及对应变量名如下: Transform(transform),Rigidbody(rigidbody),Renderer(renderer),Light(light),Camera(camera),Collider(collider),Animation(animation),Audio(audio). 如果游戏对象上不存在某个组件,那么其对应值为null. 若要访问自定义组件,