1

我正在使用磨床测试我的 webapp。我使用 tcp 代理生成了脚本。它工作得很好,但是当我向它添加记录器时,会产生以下错误:

Error running worker process
    net.grinder.scriptengine.jython.JaythonScriptExceutionException: 
    SyntaxError ('invalid syntax', ('c:\\........ \\script_name.py', 79, 9,
     "\tlog('Arvind Purohit')"))
    (no code object) at line 0

这是我的脚本:

# The Grinder 3.9.1
# HTTP script recorded by TCPProxy at 9 Jul, 2012 3:08:10 PM

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
log = grinder.logger.info
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('Accept-Encoding', 'gzip, deflate'),
    NVPair('User-Agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)'), ]

headers0= \
  [ NVPair('Accept', '*/*'),
    NVPair('Referer', 'http://192.168.1.53:8081/JSP-LOGIN/login.jsp'),
    NVPair('Accept-Language', 'en-IN'), ]

headers1= \
  [ NVPair('Accept', 'image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'),
    NVPair('Referer', 'http://192.168.1.53:8081/JSP-LOGIN/login.jsp'),
    NVPair('Accept-Language', 'en-IN'), ]

headers2= \
  [ NVPair('Accept', 'image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'),
    NVPair('Referer', 'http://192.168.1.53:8081/JSP-LOGIN/welcome.jsp'),
    NVPair('Accept-Language', 'en-IN'), ]

url0 = 'http://192.168.1.53:8081'

# 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__.
# ========= START -================
request101 = HTTPRequest(url=url0)
request101 = Test(101, 'GET login.jsp').wrap(request101)

request102 = HTTPRequest(url=url0, headers=headers0)
request102 = Test(102, 'GET valid.js').wrap(request102)

request103 = HTTPRequest(url=url0)
request103 = Test(103, 'GET favicon.ico').wrap(request103)

# ====== login=============
request201 = HTTPRequest(url=url0, headers=headers1)
request201 = Test(201, 'POST loginmid.jsp').wrap(request201)

request202 = HTTPRequest(url=url0, headers=headers1)
request202 = Test(202, 'GET welcome.jsp').wrap(request202)

# ==========LOGOUT============
request301 = HTTPRequest(url=url0, headers=headers2)
request301 = Test(301, 'GET logout.jsp').wrap(request301)

request302 = HTTPRequest(url=url0, headers=headers2)
request302 = Test(302, 'GET login.jsp').wrap(request302)

request303 = HTTPRequest(url=url0, headers=headers0)
request303 = Test(303, 'GET valid.js').wrap(request303)


class TestRunner:
  """A TestRunner instance is created for each worker thread."""

  # A method for each recorded page.
  def page1(self):
    """GET login.jsp (requests 101-103)."""
    result = request101.GET('/JSP-LOGIN/login.jsp', None,
      ( NVPair('Accept', 'image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'),
        NVPair('Accept-Language', 'en-IN'), ))
    log('ARVIND PUROHIT')
    grinder.sleep(13)
    request102.GET('/JSP-LOGIN/valid.js')

    grinder.sleep(62)
    request103.GET('/favicon.ico', None,
      ( NVPair('Accept', '*/*'), ))

    return result

  def page2(self):
    """POST loginmid.jsp (requests 201-202)."""

    # Expecting 302 'Moved Temporarily'
    result = request201.POST('/JSP-LOGIN/loginmid.jsp',
      ( NVPair('userName', 'A'),
        NVPair('password', 'A'),
        NVPair('Submit', 'Login'), ),
      ( NVPair('Content-Type', 'application/x-www-form-urlencoded'), ))

    grinder.sleep(15)
    request202.GET('/JSP-LOGIN/welcome.jsp')
    self.token_flag = \
      httpUtilities.valueFromBodyURI('flag') # 'edit'

    return result

  def page3(self):
    """GET logout.jsp (requests 301-303)."""

    # Expecting 302 'Moved Temporarily'
    result = request301.GET('/JSP-LOGIN/logout.jsp')

    request302.GET('/JSP-LOGIN/login.jsp')

    request303.GET('/JSP-LOGIN/valid.js', None,
      ( NVPair('If-Modified-Since', 'Tue, 03 Jul 2012 10:18:40 GMT'),
        NVPair('If-None-Match', 'W/\"4436-1341310720000\"'), ))

    return result

  def __call__(self):
    """Called for every run performed by the worker thread."""
    self.page1()      # GET login.jsp (requests 101-103)

    grinder.sleep(12893)
    self.page2()      # POST loginmid.jsp (requests 201-202)

    grinder.sleep(16403)
    self.page3()      # GET logout.jsp (requests 301-303)

def instrumentMethod(test, method_name, c=TestRunner):
  """Instrument a method with the given Test."""
  unadorned = getattr(c, method_name)
  import new
  method = new.instancemethod(test.wrap(unadorned), None, c)
  setattr(c, method_name, method)

# Replace each method with an instrumented version.
# You can call the unadorned method using self.page1.__target__().
instrumentMethod(Test(100, 'Page 1'), 'page1')
instrumentMethod(Test(200, 'Page 2'), 'page2')
instrumentMethod(Test(300, 'Page 3'), 'page3')
4

1 回答 1

2

我只是在学习 Python(不到一周),但我认为这可能是\t.

Python 正在阅读:

\tlog('Arvind Purohit')

但是,它需要 4 个空格,而不是制表符,如下所示:

    log('Arvind Purohit')

这就是为什么当你复制/粘贴它时它必须工作。确保您使用的编辑器显示所有字符以避免这种情况和垂直线缩进,因此您还可以避免“(第 0 行无代码对象)”错误。

于 2012-07-09T22:07:16.387 回答