TEST-2 load/soak test utility
[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.set_defaults(duration="60", logfile="")
58         (opts, args) = parser.parse_args(argv)
59
60         if (opts.logfile != ""):
61             logging.basicConfig(filename=opts.logfile, level=logging.DEBUG)
62         else:
63             logging.basicConfig(level=logging.DEBUG)
64         controller = TestController(opts)
65         controller.execute()
66
67     except Exception, e:
68         indent = len(program_name) * " "
69         sys.stderr.write(program_name + ": " + repr(e) + "\n")
70         sys.stderr.write(indent + "  for help use --help")
71         return 2
72
73
74 if __name__ == "__main__":
75     if DEBUG:
76         print "debug"
77     if TESTRUN:
78         import doctest
79         doctest.testmod()
80     if PROFILE:
81         import cProfile
82         import pstats
83         profile_filename = 'loadtest.TestMain_profile.txt'
84         cProfile.run('main()', profile_filename)
85         statsfile = open("profile_stats.txt", "wb")
86         p = pstats.Stats(profile_filename, stream=statsfile)
87         stats = p.strip_dirs().sort_stats('cumulative')
88         stats.print_stats()
89         statsfile.close()
90         sys.exit(0)
91     sys.exit(main())