当前位置: 首页 > 工具软件 > Grinder > 使用案例 >

Grinder测试脚本

姬博瀚
2023-12-01

Jython and Python

Grinder3的脚本引擎是Jython,它是Pythonjava中的完全实现。Python学习参考script galleryand Richard Perks' tutorial。以及以下网站:

推荐阅读《Jython Essentials ,可免费试读 introductory chapter 

Scripting for The Grinder

Script structure

为了符合Grinder框架,脚本必须遵循以下几个约定。

  1. 脚本必须定义一个名为TestRunner的类

当一个worker线程启动后,会立刻运行测试脚本。脚本必须定义一个名为TestRunner的类。然后,Grinder引擎为每个worker线程创建一个TestRunner实例。线程的TestRunner实例可用来存储该线程特有的信息。

Note

尽管强烈建议定义TestRunner类,但是TestRunner不一定必须是类。参考Hello World with Functions

  1. TestRunner实例必须是可调用的

一个Python对象如果定义了__call__方法,则它是可调用的。每个worker线程对测试脚本执行若干次run,依照属性grinder.runs配置。对每次runworker线程调用它的TestRunner,因此,__call__方法可看作对一个run的定义。

  1. 测试脚本可通过grinder对象访问

Engine创建了一个名为grinder的对象,用于脚本对其进行import。它同样可以被脚本调用的任何模块进行import。这是Grinder.ScriptContext类的一个实例,并提供了对上下文环境(如worker线程ID)和服务的(例如日志记录和数据统计)的访问。

Canonical test script structure标准测试脚本架构

下面是一个符合上述规则的脚本示例。该脚本具备简单的功能每次run都记录Hello Worldoutput日志中。

from net.grinder.script.Grinder import grinder

 

# An instance of this class is created for every thread.

class TestRunner:

 

    # This method is called for every run.

    def __call__(self):

        # Per thread scripting goes here.

        grinder.logger.output("Hello World")

Automatically generating scripts自动生成测试脚本

如果要对一个网站或者web应用程序创建脚本,可以使用TCPProxy产生一个适用于GrinderHTTPPlugin测试脚本。

Tests

尽管上例的简单测试脚本可以用于Grinder框架,且可以在多个机器上由多个worker进程执行多次,但是它并不报告任何统计数据。因此,需要创建一些测试。一个Test具有一个唯一的测试号和描述。

下面将一个测试添加到脚本中:

from net.grinder.script import Test

from net.grinder.script.Grinder import grinder

 

# Create a Test with a test number and a description.

test1 = Test(1, "Log method") # test  number description

 

class TestRunner:

    def __call__(self):

        log("Hello World")

上例中创建了一个Test,测试号为“1”,描述为“Log method”。注意,这里对Test类的import方式与Java十分相似。另外,同样明确地import Grinder对象,这样使得我们的脚本能做为一个Python模块被其他脚本调用。

现在,console了解了我们的Test,但是我们并没有使用它记录任何信息。下面记录grinder.logger.output花费了多长时间。为了更好的测量grinder.logger.output方法,使用Test通过协议wrapper对其进行wrapwrapper对象与grinder.logger.output方法相似,可以通过同样的方式调用。

from net.grinder.script import Test

from net.grinder.script.Grinder import grinder

 

test1 = Test(1, "Log method")

 

# Wrap the log() method with our Test and call the result logWrapper.

logWrapper = test1.wrap(grinder.logger.output)

 

class TestRunner:

    def __call__(self):

        logWrapper("Hello World")

这是一个功能完整的测试脚本,可以在Grinder框架中执行,且报告测试结果到console

调用wrap方法的方式不受限制,下面是一个使用Grinder HTTP plug-in的例子。

# A simple example using the HTTP plugin that shows the retrieval of a

# single page via HTTP.

 

from net.grinder.script import Test

from net.grinder.script.Grinder import grinder

from net.grinder.plugin.http import HTTPRequest

 

test1 = Test(1, "Request resource")

request1 = test1.wrap(HTTPRequest())

 

class TestRunner:

    def __call__(self):

        result = request1.GET("http://localhost:7001/")

The Grinder script API

测试脚本几乎可以包含任何Java或者Python代码。

Grinder Script API 可用来访问Grinder提供的服务。Javadoc包含所有packagesclassesinterfaces的所有信息,以及plug-ins添加的一些packages,组成了核心API。参考HTTP plugin documentation


 类似资料: