我正在使用grinder测试我的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')
答案 0 :(得分:2)
我只是在学习Python(不到一周),但我认为这可能是\t
的一个问题。
Python正在读这个:
\tlog('Arvind Purohit')
但是,它不是一个标签,而是期望4个空格,如下所示:
log('Arvind Purohit')
这就是复制/粘贴它时必须正常工作的原因。确保您使用的编辑器显示所有字符以避免这种情况,并使用垂直线缩进,因此您还可以避免“(无代码对象)第0行”错误。