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

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文本文件,因此你可以导入到您最喜爱的电子表格处理数字,生成统计数据,并创建图表。

posted @ 2013-02-07 14:41  李蒙强  阅读(9857)  评论(4编辑  收藏  举报