Externalize soak parameters to a json file
[testsuite/python-testing-utils.git] / loadtest / TestMain.py
1 #!/usr/bin/env python
2 # encoding: utf-8
3 '''
4 loadtest.TestMain -- shortdesc
5
6 loadtest.TestMain is a description
7
8 It defines classes_and_methods
9
10 @author:     user_name
11
12 @copyright:  2017 organization_name. All rights reserved.
13
14 @license:    license
15
16 @contact:    user_email
17 @deffield    updated: Updated
18 '''
19
20 import sys
21 import os
22
23 from optparse import OptionParser, Values
24
25 from loadtest.TestController import TestController
26
27 __all__ = []
28 __version__ = 0.1
29 __date__ = '2017-04-07'
30 __updated__ = '2017-04-07'
31
32 DEBUG = 1
33 TESTRUN = 0
34 PROFILE = 0
35 import time
36 import logging
37
38 def main(argv=None):
39     '''Command line options.'''
40     program_name = os.path.basename(sys.argv[0])
41     program_version = "v0.1"
42     program_build_date = "%s" % __updated__
43
44     program_version_string = '%%prog %s (%s)' % (program_version, program_build_date)
45     #program_usage = '''usage: spam two eggs''' # optional - will be autogenerated by optparse
46     program_longdesc = '''''' # optional - give further explanation about what the program does
47     program_license = "Copyright 2017 user_name (organization_name)                                            \
48                 Licensed under the Apache License 2.0\nhttp://www.apache.org/licenses/LICENSE-2.0"
49
50     if argv is None:
51         argv = sys.argv[1:]
52     try:
53         # setup option parser
54         parser = OptionParser(version=program_version_string, epilog=program_longdesc, description=program_license)
55         parser.add_option("-d", "--duration", dest="duration", help="duration of soak test in seconds [default: %default]", type=int)
56         parser.add_option("-l", "--logfile", dest="logfile", help="Full path soak log file name")
57         parser.add_option("-c", "--cyclelength", dest="cyclelength", help="Length of a single cycle through the config.\nMust be longer than a single iteration", type=int)
58         parser.add_option("-p", "--profile", dest="profile", help="Filename of json profile file")
59         parser.set_defaults(logfile="")
60         (opts, args) = parser.parse_args(argv)
61
62         if (opts.logfile != ""):
63             logging.basicConfig(filename=opts.logfile, level=logging.DEBUG)
64         else:
65             logging.basicConfig(level=logging.DEBUG)
66         controller = TestController(opts)
67         controller.execute()
68
69     except Exception, e:
70         indent = len(program_name) * " "
71         sys.stderr.write(program_name + ": " + repr(e) + "\n")
72         sys.stderr.write(indent + "  for help use --help")
73         return 2
74
75
76 if __name__ == "__main__":
77     if DEBUG:
78         print "debug"
79     if TESTRUN:
80         import doctest
81         doctest.testmod()
82     if PROFILE:
83         import cProfile
84         import pstats
85         profile_filename = 'loadtest.TestMain_profile.txt'
86         cProfile.run('main()', profile_filename)
87         statsfile = open("profile_stats.txt", "wb")
88         p = pstats.Stats(profile_filename, stream=statsfile)
89         stats = p.strip_dirs().sort_stats('cumulative')
90         stats.print_stats()
91         statsfile.close()
92         sys.exit(0)
93     sys.exit(main())