分享一款Web压力测试工具Pylot

时间:2021-07-12 01:39:29

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&amp;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&amp;query=foo</url>
</case>
<case>
<url>http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&amp;query=bar</url>
</case>
<case>
<url>http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&amp;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文本文件,因此你可以导入到您最喜爱的电子表格处理数字,生成统计数据,并创建图表。