Skip to content

Rough Book

random musings

Menu
  • About Me
  • Contact
  • Projects
    • bAdkOde
    • CherryBlossom
    • FXCalendar
    • Sulekha
Menu

Writing Performance Tests in Grinder using a Framework

Posted on September 16, 2009June 10, 2012 by vivin

LoginTask

LoginTask is a relatively simple task. All it does is log into the application. It looks like this:

LoginTask.py
[sourcecode language="python"]
# Converted from XML to Jython by xmlToJython.pl on 19:33:46, Thu Jun 25, 2009
# The Grinder 3.2
# HTTP script recorded by TCPProxy at 2009-06-25T14:17:56.771-07:00

from torqueo.test.framework.Task import Task
from HTTPClient import NVPair
from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest
from net.grinder.script import Test
from net.grinder.script.Grinder import grinder

class LoginTask(Task):

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 of the class are Class Variables (as opposed to
# Instance Variables) and are shared between all instances of this class.

connectionDefaults.defaultHeaders = \
(
NVPair('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009060308 Ubuntu/9.04 (jaunty) Firefox/3.0.11'),
NVPair('Accept-Encoding', 'gzip,deflate'),
NVPair('Accept-Language', 'en-us,en;q=0.5'),
NVPair('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'),
)

headers0 = \
(
NVPair('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
)

headers1 = \
(
NVPair('Accept', 'image/png,image/*;q=0.8,*/*;q=0.5'),
NVPair('Referer', 'https://local.sitetotest.com:8443/'),
)

headers2 = \
(
NVPair('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
NVPair('Referer', 'https://local.sitetotest.com:8443/'),
)

headers3 = \
(
NVPair('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
NVPair('Referer', 'https://local.sitetotest.com:8443/Admin/home.jsp'),
)

headers4 = \
(
NVPair('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
NVPair('Referer', 'https://local.sitetotest.com:8443/Admin/home.jsp'),
NVPair('Cache-Control', 'no-cache'),
)

headers5 = \
(
NVPair('Accept', 'text/css,*/*;q=0.1'),
NVPair('Referer', 'https://local.sitetotest.com:8443/Admin/home.jsp'),
)

def __init__(self):
"""Initialize properties of class"""
Task.__init__(self)
self.description = "Log into the app"
self.urlDict = {}
self.taskId = Task.numberOfTasks

def initializeTask(self):
"""Initializes Instance Variables for this class. This method will be called by the Scenario object that this task belongs to."""
if(not self.urlDict.has_key("url0")):
raise Exception(self.__class__.__name__ + ".urlDict is missing values for one or more of the following keys: [url0]. Please define them in the constructor for the parent Scenario.")
else:
self.request101 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers0)
self.request101 = Test(int(str(self.taskId) + str(101)), "Log into the app: GET /").wrap(self.request101)

self.request102 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers1)
self.request102 = Test(int(str(self.taskId) + str(102)), "Log into the app: GET torqueo-crm.gif").wrap(self.request102)

self.request103 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers2)
self.request103 = Test(int(str(self.taskId) + str(103)), "Log into the app: GET defaultLogin.jsp").wrap(self.request103)

self.request104 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers2)
self.request104 = Test(int(str(self.taskId) + str(104)), "Log into the app: GET index.jsp").wrap(self.request104)

self.request201 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers2)
self.request201 = Test(int(str(self.taskId) + str(201)), "Log into the app: POST processLogin.jsp").wrap(self.request201)

self.request202 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers2)
self.request202 = Test(int(str(self.taskId) + str(202)), "Log into the app: GET home.jsp").wrap(self.request202)

self.request301 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers3)
self.request301 = Test(int(str(self.taskId) + str(301)), "Log into the app: GET popUpTask.jsp").wrap(self.request301)

self.request401 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers4)
self.request401 = Test(int(str(self.taskId) + str(401)), "Log into the app: POST contextSensitiveHelpProxy").wrap(self.request401)

self.request402 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers5)
self.request402 = Test(int(str(self.taskId) + str(402)), "Log into the app: GET contextSensitiveHelpProxy").wrap(self.request402)

self.request501 = HTTPRequest(url=self.urlDict["url0"], headers=LoginTask.headers4)
self.request501 = Test(int(str(self.taskId) + str(501)), "Log into the app: POST calendarBackend.jsp").wrap(self.request501)

self.parameters = \
{
"appLogin1":
{
"104":
{
"msg":"Whoa,+easy+there+tiger.+You're+gonna+need+to+login+before+you+can+view+this+page."
}
},
"appLogin2":
{
"201":
{
"password":"[email protected]",
"Login":"Login",
"username":"vivin"
}
},
"appLogin4":
{
"401":
{
"url":"/home.html"
},
"402":
{
"url":"/data/skins/techjunkie/css/TechJunkieStripped.css"
}
},
"appLogin5":
{
"501":
{
"calDate":"25",
"userId":"1",
"weekEndDate":"-1",
"weekEndMonth":"-1",
"weekStartDate":"-1",
"weekEndYear":"-1",
"weekStartYear":"-1",
"weekStartMonth":"-1",
"calMonth":"5",
"calType":"Day",
"calYear":"2009"
}
}
}

self.instrumentMethod(Test(int(str(self.taskId) + str(100)), 'Log into the app'), 'appLogin1')
self.instrumentMethod(Test(int(str(self.taskId) + str(200)), 'Log into the app'), 'appLogin2')
self.instrumentMethod(Test(int(str(self.taskId) + str(300)), 'Log into the app'), 'appLogin3')
self.instrumentMethod(Test(int(str(self.taskId) + str(400)), 'Log into the app'), 'appLogin4')
self.instrumentMethod(Test(int(str(self.taskId) + str(500)), 'Log into the app'), 'appLogin5')

def appLogin1(self):
"""Log into the app GET index.jsp (requests 101-104)."""
result = self.request101.GET('/')

self.request102.GET('/slices/torqueo-crm.gif')
# Expecting 302'Moved Temporarily'
grinder.sleep(219)

self.request103.GET('/login/defaultLogin.jsp')
# Expecting 302'Moved Temporarily'
self.token_msg = LoginTask.httpUtilities.valueFromLocationURI('msg') # Whoa,+easy+there+tiger.+You're+gonna+need+to+login+before+you+can+view+this+page.

grinder.sleep(14)

self.request104.GET('/index.jsp'+
'?msg=' + self.parameters["appLogin1"]["104"]["msg"]
)

grinder.sleep(13)

return result

def appLogin2(self):
"""Log into the app GET home.jsp (requests 201-202)."""
result = self.request201.POST('/login/processLogin.jsp',
(
NVPair('password', self.parameters["appLogin2"]["201"]["password"]),
NVPair('Login', self.parameters["appLogin2"]["201"]["Login"]),
NVPair('username', self.parameters["appLogin2"]["201"]["username"]),
),
( NVPair('Content-Type', 'application/x-www-form-urlencoded'), )
)
# Expecting 302'Moved Temporarily'
self.request202.GET('/Admin/home.jsp')

grinder.sleep(27)

return result

def appLogin3(self):
"""Log into the app GET popUpTask.jsp (request 301)."""
result = self.request301.GET('/files/popUpTask.jsp' + '?0.5711548512452386')

return result

def appLogin4(self):
"""Log into the app GET contextSensitiveHelpProxy (requests 401-402)."""
result = self.request401.POST('/contextSensitiveHelpProxy',
(
NVPair('url', self.parameters["appLogin4"]["401"]["url"]),
),
( NVPair('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'), )
)

self.request402.GET('/contextSensitiveHelpProxy'+
'?url=' + self.parameters["appLogin4"]["402"]["url"]
)

grinder.sleep(224)

return result

def appLogin5(self):
"""Log into the app POST calendarBackend.jsp (request 501)."""
result = self.request501.POST('/Calendar/calendarBackend.jsp',
(
NVPair('calDate', self.parameters["appLogin5"]["501"]["calDate"]),
NVPair('userId', self.parameters["appLogin5"]["501"]["userId"]),
NVPair('weekEndDate', self.parameters["appLogin5"]["501"]["weekEndDate"]),
NVPair('weekEndMonth', self.parameters["appLogin5"]["501"]["weekEndMonth"]),
NVPair('weekStartDate', self.parameters["appLogin5"]["501"]["weekStartDate"]),
NVPair('weekEndYear', self.parameters["appLogin5"]["501"]["weekEndYear"]),
NVPair('weekStartYear', self.parameters["appLogin5"]["501"]["weekStartYear"]),
NVPair('weekStartMonth', self.parameters["appLogin5"]["501"]["weekStartMonth"]),
NVPair('calMonth', self.parameters["appLogin5"]["501"]["calMonth"]),
NVPair('calType', self.parameters["appLogin5"]["501"]["calType"]),
NVPair('calYear', self.parameters["appLogin5"]["501"]["calYear"]),
),
( NVPair('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'), )
)

return result

def run(self):
"""The run() method runs all the tests in this Task"""
self.callParameterizingMethodFor('appLogin1')
self.appLogin1()

self.callParameterizingMethodFor('appLogin2')
self.appLogin2()
grinder.sleep(1584)

self.callParameterizingMethodFor('appLogin3')
self.appLogin3()
grinder.sleep(364)

self.callParameterizingMethodFor('appLogin4')
self.appLogin4()
grinder.sleep(54)

self.callParameterizingMethodFor('appLogin5')
self.appLogin5()
grinder.sleep(155)
[/sourcecode]

Pages: 1 2 3 4 5 6 7 8 9 10

52 thoughts on “Writing Performance Tests in Grinder using a Framework”

Comments navigation

Older comments
  1. Chandu says:
    August 25, 2014 at 7:12 am

    I configured, Grinderstone, PyDev and Jython on Eclipse Mars (version 4.5) with java 1.7, will can I be able to start recording scripts from Eclipse directly ? to do that should I include the startTCPProxy.sh from Eclipse or is there any other way ? Please adivise, which approach will be more productive , appreciate your response.

    Reply
  2. Chandu says:
    September 9, 2014 at 12:45 pm

    how to parameter values in quotes in jython, this is my method :
    BaseSTSSchedulerTask.__init__(self, Test(testId, “Get Service Group by ID”), hostPort, ‘/SchServices/api/servicegroup/9999’, HEADERS)

    I want to replace the value 9999 with a variable which is returned from a method., like id= Data.getID(). I tried doing this ‘/SchServices/api/servicegroup/’+id, it does not help . Any idea how to handle this ?

    Reply

Comments navigation

Older comments

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Archives

  • February 2023
  • April 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • February 2018
  • January 2018
  • December 2017
  • November 2017
  • October 2017
  • June 2017
  • March 2017
  • November 2016
  • August 2016
  • July 2016
  • June 2016
  • February 2016
  • August 2015
  • July 2014
  • June 2014
  • March 2014
  • December 2013
  • November 2013
  • September 2013
  • July 2013
  • June 2013
  • March 2013
  • February 2013
  • January 2013
  • October 2012
  • July 2012
  • June 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • July 2011
  • June 2011
  • May 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • August 2008
  • March 2008
  • February 2008
  • November 2007
  • July 2007
  • June 2007
  • May 2007
  • March 2007
  • December 2006
  • October 2006
  • September 2006
  • August 2006
  • June 2006
  • April 2006
  • March 2006
  • January 2006
  • December 2005
  • November 2005
  • October 2005
  • September 2005
  • August 2005
  • July 2005
  • June 2005
  • May 2005
  • April 2005
  • February 2005
  • October 2004
  • September 2004
  • August 2004
  • July 2004
  • June 2004
  • May 2004
  • April 2004
  • March 2004
  • February 2004
  • January 2004
  • December 2003
  • November 2003
  • October 2003
  • September 2003
  • July 2003
  • June 2003
  • May 2003
  • March 2003
  • February 2003
  • January 2003
  • December 2002
  • November 2002
  • October 2002
  • September 2002
  • August 2002
  • July 2002
  • June 2002
  • May 2002
  • April 2002
  • February 2002
  • September 2001
  • August 2001
  • April 2001
  • March 2001
  • February 2001
  • January 2001
  • December 2000
  • November 2000
  • October 2000
  • August 2000
  • July 2000
  • June 2000
  • May 2000
  • March 2000
  • January 2000
  • December 1999
  • November 1999
  • October 1999
  • September 1999
©2023 Rough Book | Built using WordPress and Responsive Blogily theme by Superb
All original content on these pages is fingerprinted and certified by Digiprove