The Grinder试用记录一-脚本录制

The Grinder试用记录一-脚本录制

The Grinder是开源性能测试工具,用Java编写,其脚本语言用Jython编写,脚本编辑的界面不友好,但是脚本编写比较灵活,可以支持参数化和关联操作。跟openSTA一样,其脚本录制功能也可以录制dwr请求。支持分布式负载,测试过程中没有提供对服务器的监控方式。可以运行在window和liunx环境。脚本采用Jython,所以需要测试员有Jython经验,上手比较难。
从http://grinder.sourceforge.net 网站下载The Grinder 3,解压后放到C盘下面,文件夹改名为grinder。该文件夹下面可以看到contrib,etc,example,lib文件夹,新建一个bin文件夹,用于存放生成的cmd可执行文件。
The Grinder的脚本采用专用工具TCPProxy录制。具体步骤如下:
1、编写一个setGrinderEnv.cmd文件,放在bin文件夹下面,用于设置环境变量,内容如下:
    set GRINDERPATH=C:\grinder
           set GRINDERPROPERTIES=C:\grinder\etc\grinder.properties
2、编写一个startProxy.cmd文件,放在bin文件夹下面,用于启动TCPProxy,内容如下:
    call C:\grinder\bin\setGrinderEnv.cmd
           java net.grinder.TCPProxy -console -http > %GRINDERPATH%\grinder.py
           pause
    功能是录制http请求,把录制得到的脚本存储在grinder.py文件中。
3、双击startProxy.cmd文件后,录制启动,出现一个java程序窗口 TCPProxy Console。在这个窗口,你可以控制停止录制,也可以随时给脚本加评论。打开浏览器,设置代理服务器的地址为127.0.0.1,端口8001,然后 地址栏输入被测试服务的url,进行录制,录制过程中,可以随时用“Insert comment”按钮在脚本中插入评论。录制完成后,点击窗口中的“Stop”按钮,录制停止。
4、录制停止后,进入C:\grinder,找到文件 grinder.py,该文件就是录制得到的测试脚本。
 

The Grinder试用记录二-分布式测试
    The Grinder的分布式测试操作很简单,步骤如下:
    1、客户端(192.168.0.101)建立一个C:\grinder\etc\grinder.properties配置文件,该文件是一个配置文 件,指定运行的测试脚本,运行的进程,线程数,循环次数,并指定分布式测试的控制服务器地址和端口(默认为6372,端口值可以通过 文件-选项 修改)。例如:
         grinder.processes=2
         grinder.threads=3
         grinder.runs=4
         grinder.logDirectory=log
         grinder.numberOfOldLogs=2
         grinder.consoleHost=192.168.0.100
         grinder.consolePort=6372
         grinder.useConsole=true
         grinder.script=grinder.py
    2、控制端(192.168.0.100)建立一个startConsole.cmd文件并启动,启动后会出现一个“The Grinder控制台”窗口。文件内容如下:
         call C:\grinder\bin\setGrinderEnv.cmd
         java net.grinder.Console
         pause
    3、客户端(192.168.0.101)建立一个startAgent.cmd文件并启动,文件内容如下:
         call C:\grinder\bin\setGrinderEnv.cmd
         java net.grinder.Grinder %GRINDERPROPERTIES%
         pause
        把测试脚本 grinder.py拷贝到和startAgent.cmd同一个文件夹下面。
   4、客户端启动后,会根据grinder.properties文件的配置连接控制端,连接上以后,控制端的 动作-启动进程 选项变成可选,点击该选项,客户端的测试进程启动,开始测试。测试过程中,控制端能看到各个测试项运行的状态。
   5、测试结束后,查看bin文件夹下面的log文件夹,可以看到各个测试进程,各个测试项的统计指标。
   如果不想用分布式测试,把控制端和客户端都放到一个机器下运行就可以。

字号: 大  中  小
The Grinder试用记录三-脚本编辑
    如果懂Jython语法,那么操作脚本(包括参数化和关联)是非常简单的事情,下面这个脚本向blog.163.com发送一个dwr请求,并把response内容保存到文件。
from net.grinder.script import Test
from net.grinder.script.Grinder import grinder
from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest
from HTTPClient import NVPair
connectionDefaults = HTTPPluginControl.getConnectionDefaults()
httpUtilities = HTTPPluginControl.getHTTPUtilities()
# To use a proxy server, uncomment the next line and set the host and port.
# connectionDefaults.setProxyServer("localhost", 8001)
# These definitions at the top level of the file are evaluated once,
# when the worker process is started.
connectionDefaults.defaultHeaders = \
  ( NVPair('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)'), )

headers3= \
  ( NVPair('Accept', '*/*'),
    NVPair('Referer', 'http://blog.163.com/'),
    NVPair('Accept-Language', 'zh-c'), )
url7 = 'http://blog.163.com:80'
# Create an HTTPRequest for each request, then replace the
# reference to the HTTPRequest with an instrumented version.
# You can access the unadorned instance using request101.__target__.
request1001 = HTTPRequest(url=url7, headers=headers3)
request1001 = Test(1001, 'POST UserBean.getProvinceAndCity.dwr').wrap(request1001)
class TestRunner:
  """A TestRunner instance is created for each worker thread."""
  def page10(self):
    """POST UserBean.getProvinceAndCity.dwr (request 1001)."""
    result = request1001.POST('/dwr/call/plaincall/UserBean.getProvinceAndCity.dwr',
      '''callCount=1\n\
page=/\n\
httpSessionId=\n\
scriptSessionId=4FC528EBDD341FE22046F074D587F3733\n\
c0-scriptName=UserBean\n\
c0-methodName=getProvinceAndCity\n\
c0-id=0\n\
c0-param0=boolean:false\n\
c0-param1=boolean:false\n\
batchId=0\n\
''',
      ( NVPair('Content-Type', 'text/plain'), ))
    return result

  def __call__(self):
    """This method is called for every run performed by the worker thread."""
    result1=self.page10()     # POST UserBean.getProvinceAndCity.dwr (request 1001)
    writeToFile(result1.getText())
   
   
def writeToFile(text):
filename = grinder.getFilenameFactory().createFilename(
  "page", "-%d.html" % grinder.runNumber)
file = open(filename, "w")
print >> file, text
file.close()
   
   
参考资料:
1、官方介绍资料:http://grinder.sourceforge.net/g3/scripts.html
2、Script API :http://grinder.sourceforge.net/g3/script-javadoc/index.html
3、官方例子:http://grinder.sourceforge.net/g3/script-gallery.html
4、Jython学习资料:https://www6.software.ibm.com/developerworks/cn/education/java/j-jython2/tutorial/


* grinder.properties 参数设置详解    http://grinder.sourceforge.net/g3/properties.html


*****小整理
一.脚本录制
1.设置代理HTTP和SSL选择localhost 端口8001
2.脚本录制java net.grinder.TCPProxy -console -http>xx.py
3.执行USECASE 点击STOP完成脚本录制
二.执行脚本
1.打开CONSOLE,java net.grinder.console
2.CMD到脚本目录,java net.grinder.Grinder

grinder.properties

grinder.processes=50//进程数
grinder.threads=1//线程数
grinder.runs=6000//循环执行的次数

grinder.useConsole=true

grinder.logDirectory=log
grinder.numberOfOldLogs=1

#grinder.consoleHost=10.0.0.66 //CONSOLE在66上
#grinder.consolePort=6372

//每30秒增加2个进程
grinder.processIncrement=2
grinder.processIncrementInterval=30000
grinder.initialProcesses=6//起初运行的进程数
grinder.duration=600000//脚本执行10分钟


grinder.reportTimesToConsole=false

#grinder.initialSleepTime=500
#grinder.sleepTimeFactor=0.01
#grinder.sleepTimeVariation=0.005
grinder.jvm.arguments=-mx512m

#grinder.script=dmryrz.py
#grinder.script=pingzhengdaochu.py
#grinder.script=xinzidaochu.py
grinder.script=jiaoyi3.py

三.根据生成的LOG文件分析系统
1.条件
需要工具grinderAnalyzer(下载地址),jython_installer-2.2.1.jar 可以到相应网站下载
2.把grinder生成的data.log文件放到E:\grinderAnalyzer.V2.b9目录下,同时选择一其中一个out.log文件(out.log只需要一个且不限定哪个,只要是同个测试的log)
3.CMD到E:\grinderAnalyzer.V2.b9目录 执行命令jython analyzer.py E:\grinderAnalyzer.V2.b9\data_0.log E:\grinderAnalyzer.V2.b9\data_1.log E:\grinderAnalyzer.V2.b9\data_2.log E:\grinderAnalyzer.V2.b9\out_0.log 1 其中1代表agent的数量
4.在grinderReport下有生成的结果repot.html

你可能感兴趣的:(c,.net,脚本,DWR,jython)