http://www.cnblogs.com/limengqiang/archive/2013/02/07/Pylot.html
1、什么是Pylot?
Pylot是一个免费的开源工具,用于测试Web服务的性能和可扩展性。它运行HTTP负载测试,这是有用的容量规划,基准,分析和系统调整。
Pylot产生并发负载(HTTP请求),验证服务器的响应,并制作报告的度量。测试套件的执行和监测,从一个GUI或shell /控制台。
Pylot基于Python开发,和著名的Apache压力测试工具ab一样,默认在命令行运行,也可以通过参数触发GUI界面,当然前提是安装了wxPython的。
2、Pylot如何工作?
你开始在一个XML文件(testcases.xml)中定义你的测试用例。测试用例是验证你指定的请求(URL,Method,Body等)。可以验证服务器响应的正则表达式匹配的内容,HTTP状态码。您可以通过调整负载的工作量控制GUI或命令行设置,然后再开始测试运行(数目的代理,请求的时间间隔,上升时间,测试时间)。这些设置,您可以根据不同的负载情况下的模型试验。在运行加载的情况下,并传递到负载产生引擎。代理调度和运行,同时发送HTTP请求到你的web服务。它在执行过程中生成实时的统计和错误报告,通过这个报告可以很方便的进行监控。
3、Pylot应用场景
开发人员,测试人员和性能工程师需要测试和调整他们的Web服务的性能和可扩展性。也可以使Python程序员集成到更大的测试套件。使用这个工具可以使你更加熟悉HTTP,XML和性能测试。
4、产品特点
- HTTP和HTTPS(SSL)支持
- 多线程负载生成器
- 自动cookie处理
- 响应验证与正则表达式
- 执行/监控控制台
- 实时统计
- 结果报告和图形
- 定制的timer
- GUI模式
- 外壳/控制台模式
- 跨平台
5、入门指南
平台:
控制台和阻塞模式
控制台和隔离模式运行在所有平台上的Python 2.5 +可以安装。视窗XP,Vista中,Ubuntu 8.04/8.10,华硕Eee PC,Mac的OS测试。
GUI模式
Pylot,GUI将运行在所有平台上支持Python和wxWidgets。大多被开发的GUI测试在Windows,但Linux和Mac看起来体面。应用程序代码是纯Python和使用一个跨平台的工具包。
安装Pylot
第1步:下载并解压缩最新的Pylot发布
获取最新版本: 下载Pylot
第2步:安装Python 2.5 +
获取安装程序从这里开始:http://www.python.org/download
第3步:安装wxPython(可选 - 用于GUI模式)
从这里获取安装程序:http://www.wxpython.org/download.php
第4步:安装numpy的(可选 - 用于报告以图表)
从这里获取安装程序:http://sourceforge.net/projects/numpy
第5步:安装matplotlib的(可选 - 用于报告以图表)
从这里获取安装程序:http://sourceforge.net/projects/matplotlib
第6步:运行Pylot
GUI模式:
> python run.py -G
控制台和阻塞模式 - 命令行选项:
用法:run.py [选项] ARGS
-A, - 代理= NUM_AGENTS的代理数量
-D, - 持续时间:测试时间以秒为单位
-r时, - 斜坡上升=斜坡上升:斜坡上升在几秒钟内
-I, - 间隔=间隔:间隔时间(以毫秒为单位)
-X - XMLFILE = TEST_CASE_XML:测试的情况下,XML文件
-O, - OUTPUT_DIR = path:输出目录
-N, - = testname代表:姓名测试
-L, - log_msgs:日志消息
-B, - 阻塞:阻塞模式
-G, - GUI:启动GUI
-P, - 端口PORT:XML-RPC监听端口
远程启动Pylot:
,Pylot包含一个XML-RPC服务器,可以启动,这样你就可以开始测试与远程客户端。
配置选项:
“的文件/核心/ config.py的包含了一些全局配置选项。您可以设置某些defauls和改变某些行为。如果在命令行上指定这些选项是覆盖。
AGENTS = 1
DURATION = 60 # secs
RAMPUP = 0 # secs
INTERVAL = 0 # millisecs
TC_XML_FILENAME = 'testcases.xml'
OUTPUT_DIR = None
TEST_NAME = None
LOG_MSGS = False
GENERATE_RESULTS = True
SHUFFLE_TESTCASES = False # randomize order of testcases per agent
WAITFOR_AGENT_FINISH = True # wait for last requests to complete before stopping
SMOOTH_TP_GRAPH = 1 # secs. smooth/dampen throughput graph based on an interval
SOCKET_TIMEOUT = 300 # secs
COOKIES_ENABLED = True
HTTP_DEBUG = False # only useful when combined with blocking mode
BLOCKING = False # stdout blocked until test finishes, then result is returned as XML
GUI = False
使用Pylot
步骤1:创建测试案例
测试案例名为“testcases.xml”的,或在命令行上指定一个不同的XML文件中声明一个XML文件。这是的格式测试引擎可以理解的。
使用下面的语法定义一个测试例。只有URL元素是必需的。
<case>
<url>URL</url>
<method>HTTP METHOD</method>
<body>REQUEST BODY CONTENT</body>
<add_header>ADDITIONAL HTTP HEADER</add_header>
<verify>STRING OR REGULAR EXPRESSION</verify>
<verify_negative>STRING OR REGULAR EXPRESSION</verify_negative>
<timer_group>TIMER GROUP NAME</timer_group>
</case>
下面是一个例子,最简单的可能的测试案例文件。它包含了一个测试案例,试运行期间,将连续执行。的测试用例包含一个URL下测试的服务。由于身体没有一种方法或定义,它会默认发送一个HTTP GET到这个资源。由于没有验证的定义,它会通过/失败测试案例的基础上的HTTP状态代码(通过,如果状态是<400)。
<testcases>
<case>
<url>http://www.example.com/foo</url>
</case>
</testcases>
我们可以添加正面和负面的验证。一个积极的验证是在响应主体必须包含一个字符串或正则表达式。负的验证是一个字符串或正则表达式,必须不包含在响应主体。
<case>
<url>http://www.goldb.org/foo</url>
<verify>Copyright.*Corey Goldberg</verify>
<verify_negative>Error</verify_negative>
<case>
饼干:
Cookies是自动处理的。如果收到一个响应的“设置Cookie”头,cookie将被设置在头的后续请求并传回。
例:雅虎搜索的Web服务(REST API)
雅虎提供各种REST Web服务来访问搜索结果。在这个例子中,我将展示如何创建Pylot的REST API进行交互的测试用例。
下面是一个简单的GET请求对服务:
http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=foo
申请一个Pylot测试案例是这样的:
<case>
<url>http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=foo</url>
</case>
请注意符号(&)的URL逃脱的代码:“&”
这是becasue的某些字符(“<”和“&”)是非法的XML文件。由于我们是在一个XML文档definig测试用例,我们必须避开这些符号代码,或将它们放置在一个CDATA部分。
雅虎还允许POST数据块来传递查询参数。在这种情况下,我们还必须改变“内容类型”HTTP头:“应用程序/ x - www的形式,进行了urlencoded”。(Pylot默认为text / xml“)
下面是一个POST请求对服务:
<case>
<url>http://search.yahooapis.com/WebSearchService/V1/webSearch</url>
<method>POST</method>
<body><![CDATA[appid=YahooDemo&query=webinject]]></body>
<add_header>Content-type: application/x-www-form-urlencoded</add_header>
</case>
现在,我们知道如何创建单独的情况下,我们可以创建一个测试案例文件,其中包含几个这样的。在这个例子中,我们的测试情况下,文件包含Yahoo等搜索查询为:“富”,“酒吧”,“巴兹”
<testcases>
<case>
<url>http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=foo</url>
</case>
<case>
<url>http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=bar</url>
</case>
<case>
<url>http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=baz</url>
</case>
</testcases>
例如:SOAP API
谈任何HTTP API,我们可以模拟我们的测试用例。这个例子展示了如何将请求发送到一个SOAP服务。我们需要发送的SOAP信封将被封装在HTTP POST主体。
<case>
<url>http://www.example.org/StockPrice</url>
<method>POST</method>
<add_header>Content-Type: application/soap+xml; charset=utf-8</add_header>
<body><!
[CDATA[
<!-- This is the SOAP Envelope -->
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
]]>
</body>
</case>
例如:设置静态变量/参数
你可以在你的测试用例文件中定义的全局参数。这是非常有用的,如果你有一个值之间共享一些测试情况下,你经常改变。在下面的例子中,我们定义了一个“http_server”参数,然后使用该令牌在一个测试案例。
<testcases>
<param name="http_server" value="http://www.example.com" />
<case>
<url>${http_server}/foo</url>
</case>
</testcases>
例如:基于文件的HTTP有效载荷
您可能希望,POST数据存储在一个外部文件中,而不是直接宣布它在你的测试用例XML文件。这是非常有用的,如果你有非常大的POST人体的或要发送的二进制数据不能被嵌入到XML。使用下面的语法将数据从一个文件,它张贴在运行。
<case>
<url>http://www.example.com/foo</url>
<method>POST</method>
<body file="./myfile.dat"></body>
</case>
第2步:模型工作负载方案
定义的工作负载使用的用户界面上的控件。使用下面的选项。您可以创建一个的稳态或增加负载测试。
- 代理:代理(虚拟用户)来运行
- 斜坡上升时间跨度代理开始。他们将被均匀地分布在整个这段时间内。(参见下面的注释)
- 每个用户发送请求的时间间隔:间隔。每个用户代理的请求,节奏均匀的时间间隔(,除非反应,分析反应时间比较慢的文天生定义的时间间隔)
- 播放时间:时间跨度的测试
第3步:执行和监控
运行模式
- 控制台模式:在测试过程中,您可以查看实时统计在用户界面(UI)
- 阻塞模式:STDOUT被阻塞,直到测试结束后,返回结果为XML
- GUI模式:管理和运行测试的GUI界面
测试运行结束时,自动生成一个HTML报告,表示测试结果和图表。
第4步:查看结果
当测试完成后,结果目录创建并自动生成一份报告,总结测试结果。它包括各种统计数据和图表,响应时间和吞吐量。结果报告的样本可以在这里看到:
Pylot结果写入到CSV文本文件,因此你可以导入到您最喜爱的电子表格处理数字,生成统计数据,并创建图表。