Synthesizing SVT Data
Revision as of 10:22, 16 April 2008 by PeterHarding (talk | contribs)
Overview
Preparing data for performance tests is a very important part of the preparation phase for a load test exercise. The following scripts provide simple examples of approaches to synthesize parameter data for use by the test scripts.
User Login IDs
#!/usr/bin/env python print 'UserId' for i in range(200): print "svt%03d" % i
Unquoting URL Data
#!/usr/bin/env python
import urllib
encoded_data = """
%3CPromptEngineRuntimeContext%20xmlns%3D%22http%3A%2F%2Fwww.crystaldecisions.com%2Freport%22%20xmlns%3Axsi%3D%22http%3A%2F%2F
www.w3.org%2F2001%2FXMLSchema-instance%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%20xsi%3Atype%3D%22
PromptEngineRuntimeContext%22%20version%3D%222%22%3E%3CID%3E{MachineXID}%3C%2FID%3E%3CRenderOption%20xsi%3Atype%3D%22
BOwner%26gt%3B%26lt%3B%2FOwner%26gt%3B%26lt%3BDefinition%20xsi%3Atype%3D%22Parameter%22%20id%3D%225%22%26gt%3B%26lt%3B",
"""
data = urllib.unquote(encoded_data)
print data
Generating Synthetic Credit Card Numbers
#!/usr/bin/env python
#
#
#
#-------------------------------------------------------------------------------
"""
Generate a abitrary collection of pseudo Credit card numbers which
satisfy the validation test
"""
import sys
import random
#-------------------------------------------------------------------------------
prefix = '1234'
max_digits = 16
max_numbers = 1000
#-------------------------------------------------------------------------------
def gen(prefix):
no = prefix
l = list(no)
i = len(prefix)
while (i < (max_digits - 1)):
x = random.randint(0, 9)
l.append(str(x))
# print i, l, x
i += 1
no = ''.join(l)
chk_digit = encode(no)
delta = 10 - chk_digit
if delta == 10:
delta = 0
# print chk_digit, delta
l.append(str(delta))
no = ''.join(l)
return no
#-------------------------------------------------------------------------------
def encode(no):
n = 0
tot = 0
for i in range(len(no)):
v = int(no[i])
if i % 2 == 0:
inc = v * 2
if v > 4:
n += 1
else:
inc = v
tot += inc
tot += n
chk = tot % 10
return chk
#-------------------------------------------------------------------------------
def validate(ccnumber):
cnt = 0
tot = 0
for i in range(len(ccnumber)):
val = int(ccnumber[i])
if i % 2 == 0:
inc = val * 2
if val > 4:
cnt += 1
else:
inc = val
tot += inc
tot += cnt
if ((tot % 10) == 0):
return True
else:
return False
#-------------------------------------------------------------------------------
def test():
for no in nos:
print no
if validate(no):
print "Card number VALID"
else:
print "Card number INVALID"
#-------------------------------------------------------------------------------
def main():
i = 0
while i < max_numbers:
cc_no = gen(prefix)
if validate(cc_no):
print cc_no
else:
print "Card number %s - INVALID" % cc_no
cc_no = None
if cc_no:
i += 1
else:
pass
#-------------------------------------------------------------------------------
if __name__ == "__main__":
main(sys.argv[1:])
#-------------------------------------------------------------------------------
Generating User Profiles
#!/usr/bin/env python
#
# $Id:$
#
#-------------------------------------------------------------------------------
"""
Generate an abitrary collection of pseudo Credit Card numbers which
satisfy the validation test
"""
import sys
import random
import getopt
#-------------------------------------------------------------------------------
prefix = '1234'
max_digits = 16
max_numbers = 1000
#-------------------------------------------------------------------------------
cost_centers = [
["XX100000-X", "XXX DIVISION XX100000"],
["XX100001-X", "XXX DIVISION XX100001"],
...
]
#-------------------------------------------------------------------------------
def gen(prefix):
no = prefix
l = list(no)
i = len(prefix)
while (i < (max_digits - 1)):
x = random.randint(0, 9)
l.append(str(x))
# print i, l, x
i += 1
no = ''.join(l)
chk_digit = encode(no)
delta = 10 - chk_digit
if delta == 10:
delta = 0
# print chk_digit, delta
l.append(str(delta))
no = ''.join(l)
return no
#-------------------------------------------------------------------------------
def encode(no):
n = 0
tot = 0
for i in range(len(no)):
v = int(no[i])
if i % 2 == 0:
inc = v * 2
if v > 4:
n += 1
else:
inc = v
tot += inc
tot += n
chk = tot % 10
return chk
#-------------------------------------------------------------------------------
def validate(ccnumber):
cnt = 0
tot = 0
for i in range(len(ccnumber)):
val = int(ccnumber[i])
if i % 2 == 0:
inc = val * 2
if val > 4:
cnt += 1
else:
inc = val
tot += inc
tot += cnt
if ((tot % 10) == 0):
return True
else:
return False
#-------------------------------------------------------------------------------
def test():
for no in nos:
print no
if validate(no):
print "Card number VALID"
else:
print "Card number INVALID"
#-------------------------------------------------------------------------------
def gen_user_data():
out = open('Users.dat','w')
out.write("AGS_Number,FirstName,Username,Password,CostCenter,CreditCardNumber\r\n")
i = 0
no_centers = len(cost_centers)
while i < max_numbers:
center_idx = random.randint(0, no_centers - 1)
cost_center = cost_centers[center_idx][0]
cc_no = gen(prefix)
if validate(cc_no):
out.write("test_%03d,%03d,test%03d,test%03d,%s,%s\r\n" % \
(i, i, i, i, cost_center, cc_no))
else:
print "Card number %s - INVALID" % cc_no
cc_no = None
if cc_no:
i += 1
else:
pass
#-------------------------------------------------------------------------------
USAGE = """\
Usage:
$ ./gen_user_data.py [-d] [-v] [-f <filename>]
"""
def usage():
sys.stderr.write(USAGE)
#-------------------------------------------------------------------------------
def main(argv):
global debug_flg
global verbose_flg
global file
#----- Process command line arguments ----------------------------
try:
opts, args = getopt.getopt(argv, "df:hv", ["debug", "file=", "help", "verbose"])
except getopt.GetoptError:
usage()
sys.exit(2)
else:
for opt, arg in opts:
if opt in ("-d", "--debug"):
debug_flg = True
elif opt in ("-h", "--help"):
usage()
sys.exit(0)
elif opt in ("-f", "--file"):
logfile = arg
elif opt in ("-v", "--verbose"):
verbose_flg = True
gen_user_data()
#-------------------------------------------------------------------------------
if __name__ == "__main__":
main(sys.argv[1:])
#-------------------------------------------------------------------------------