comparison PerfsDb/Run.py @ 160:6995d5d12d88

filtering tests
author am@osimis.io
date Fri, 17 Aug 2018 16:17:57 +0200
parents df1f9946571c
children 27b3b0df5f90
comparison
equal deleted inserted replaced
159:616da104a996 160:6995d5d12d88
1 import argparse 1 import argparse
2 import fnmatch
3
2 from ConfigFileBuilder import ConfigFileBuilder 4 from ConfigFileBuilder import ConfigFileBuilder
3 from TestConfig import TestConfig 5 from TestConfig import TestConfig
6 from Tests import *
4 from DbServer import DbServer 7 from DbServer import DbServer
5 from DbType import DbType 8 from DbType import DbType
6 from DbSize import DbSize 9 from DbSize import DbSize
7 10
8 testConfigs = {
9 "mysql-small" : TestConfig(label= "mysql-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.MySQL, port=2000)),
10 "pg9-small": TestConfig(label= "pg9-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.PG9, port=2001)),
11 "pg10-small": TestConfig(label= "pg10-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.PG10, port=2002)),
12 "pg11-small": TestConfig(label= "pg11-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.PG11, port=2003)),
13 "mssql-small" : TestConfig(label= "mssql-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.MSSQL, port=2004)),
14 "sqlite-small": TestConfig(label= "sqlite-small", dbSize=DbSize.Small, dbType=DbType.Sqlite),
15 "sqliteplugin-small": TestConfig(label= "sqliteplugin-small", dbSize=DbSize.Small, dbType=DbType.SqlitePlugin),
16 11
17 "mysql-tiny" : TestConfig(label= "mysql-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.MySQL, port=3000)), 12 allTestConfigs = [
18 "pg9-tiny": TestConfig(label= "pg9-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG9, port=3001)), 13 TestConfig(label= "mysql-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.MySQL, port=2000)),
19 "pg10-tiny": TestConfig(label= "pg10-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG10, port=3002)), 14 TestConfig(label= "pg9-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.PG9, port=2001)),
20 "pg11-tiny": TestConfig(label= "pg11-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG11, port=3003)), 15 TestConfig(label= "pg10-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.PG10, port=2002)),
21 "mssql-tiny" : TestConfig(label= "mssql-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.MSSQL, port=3004)), 16 TestConfig(label= "pg11-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.PG11, port=2003)),
22 "sqlite-tiny": TestConfig(label= "sqlite-tiny", dbSize=DbSize.Tiny, dbType=DbType.Sqlite), 17 TestConfig(label= "mssql-small", dbSize=DbSize.Small, dbServer=DbServer(dbType=DbType.MSSQL, port=2004)),
23 "sqliteplugin-tiny": TestConfig(label= "sqliteplugin-tiny", dbSize=DbSize.Tiny, dbType=DbType.SqlitePlugin), 18 TestConfig(label= "sqlite-small", dbSize=DbSize.Small, dbType=DbType.Sqlite),
19 TestConfig(label= "sqliteplugin-small", dbSize=DbSize.Small, dbType=DbType.SqlitePlugin),
24 20
25 "mysql-medium" : TestConfig(label= "mysql-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.MySQL, port=4000)), 21 TestConfig(label= "mysql-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.MySQL, port=3000)),
26 "pg9-medium": TestConfig(label= "pg9-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG9, port=4001)), 22 TestConfig(label= "pg9-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG9, port=3001)),
27 "pg10-medium": TestConfig(label= "pg10-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG10, port=4002)), 23 TestConfig(label= "pg10-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG10, port=3002)),
28 "pg11-medium": TestConfig(label= "pg11-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG11, port=4003)), 24 TestConfig(label= "pg11-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG11, port=3003)),
29 "mssql-medium" : TestConfig(label= "mssql-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.MSSQL, port=4004)), 25 TestConfig(label= "mssql-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.MSSQL, port=3004)),
30 "sqlite-medium": TestConfig(label= "sqlite-medium", dbSize=DbSize.Medium, dbType=DbType.Sqlite), 26 TestConfig(label= "sqlite-tiny", dbSize=DbSize.Tiny, dbType=DbType.Sqlite),
31 "sqliteplugin-medium": TestConfig(label= "sqliteplugin-medium", dbSize=DbSize.Medium, dbType=DbType.SqlitePlugin), 27 TestConfig(label= "sqliteplugin-tiny", dbSize=DbSize.Tiny, dbType=DbType.SqlitePlugin),
32 } 28
29 TestConfig(label= "mysql-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.MySQL, port=4000)),
30 TestConfig(label= "pg9-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG9, port=4001)),
31 TestConfig(label= "pg10-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG10, port=4002)),
32 TestConfig(label= "pg11-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG11, port=4003)),
33 TestConfig(label= "mssql-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.MSSQL, port=4004)),
34 TestConfig(label= "sqlite-medium", dbSize=DbSize.Medium, dbType=DbType.Sqlite),
35 TestConfig(label= "sqliteplugin-medium", dbSize=DbSize.Medium, dbType=DbType.SqlitePlugin),
36 ]
37
38 allTests = [
39 TestStatistics(),
40 TestFindStudyByStudyDescription1Result(),
41 TestFindStudyByPatientId1Result(),
42 TestFindStudyByStudyDescription0Results(),
43 TestFindStudyByPatientId0Results(),
44 TestFindStudyByPatientId5Results(),
45 TestUploadFile(),
46 ]
33 47
34 selectedTestConfigs = [] 48 selectedTestConfigs = []
49 selectedTests = []
35 50
36 parser = argparse.ArgumentParser(description = "Initializes/Runs/Clears PerfsDb setup.") 51 parser = argparse.ArgumentParser(description = "Initializes/Runs/Clears PerfsDb setup.")
37 52
38 # create a cli option for each config 53 # create a cli option for each config
39 for testConfigName in testConfigs.keys(): 54 for testConfig in allTestConfigs:
40 parser.add_argument("--" + testConfigName, action = "store_true") 55 parser.add_argument("--" + testConfig.label, action = "store_true")
41 56
42 parser.add_argument("--init", help = "initializes DBs", action = "store_true") 57 parser.add_argument("--init", help = "initializes DBs", action = "store_true")
43 parser.add_argument("--run", help = "runs tests", action = "store_true") 58 parser.add_argument("--run", help = "runs tests", action = "store_true")
44 parser.add_argument("--clear", help = "clear DBs", action = "store_true") 59 parser.add_argument("--clear", help = "clear DBs", action = "store_true")
45 60
46 parser.add_argument("--orthanc-path", help = "path to the folder containing Orthanc executable", default=".") 61 parser.add_argument("--orthanc-path", help = "path to the folder containing Orthanc executable", default=".")
47 parser.add_argument("--plugins-path", help = "path to the folder containing Orthanc executable", default=".") 62 parser.add_argument("--plugins-path", help = "path to the folder containing Orthanc executable", default=".")
48 parser.add_argument("--repeat", help = "number of times to repeat each test to average timings", type=int, default=50) 63 parser.add_argument("--repeat", help = "number of times to repeat each test to average timings", type=int, default=50)
64 parser.add_argument("--test-filter", help = "filter tests by names (wildcards are allowed)", default="*")
49 65
50 args = parser.parse_args() 66 args = parser.parse_args()
51 67
52 for testConfigName in testConfigs.keys(): 68 for testConfig in allTestConfigs:
53 if args.__dict__[testConfigName.replace("-", "_")]: 69 if args.__dict__[testConfig.label.replace("-", "_")]:
54 selectedTestConfigs.append(testConfigName) 70 selectedTestConfigs.append(testConfig)
55 71
56 # if no test config specified, take them all 72 # if no test config specified, take them all
57 if len(selectedTestConfigs) == 0: 73 if len(selectedTestConfigs) == 0:
58 selectedTestConfigs = testConfigs.keys() 74 selectedTestConfigs = allTestConfigs
59 75
60 selectedTestConfigs = sorted(selectedTestConfigs) 76 selectedTestConfigs.sort(key=lambda x: x.label)
77
78 # filter tests
79 for test in allTests:
80 if fnmatch.fnmatch(test.name, args.test_filter):
81 selectedTests.append(test)
82
83 selectedTests.sort(key=lambda x: x.name)
61 84
62 # if no action specified, it means only run 85 # if no action specified, it means only run
63 if not (args.init | args.run | args.clear): 86 if not (args.init | args.run | args.clear):
64 args.init = False 87 args.init = False
65 args.run = True 88 args.run = True
68 print("***** Orthanc *******") 91 print("***** Orthanc *******")
69 print("path :", args.orthanc_path) 92 print("path :", args.orthanc_path)
70 93
71 results = {} 94 results = {}
72 95
73 for configName in selectedTestConfigs: 96 for testConfig in selectedTestConfigs:
74 testConfig = testConfigs[configName]
75 testConfig.setName(configName)
76 testConfig.setRepeatCount(args.repeat) 97 testConfig.setRepeatCount(args.repeat)
77 98
78 print("======= " + configName + " ========") 99 print("======= " + testConfig.label + " ========")
79 100
80 if args.clear: 101 if args.clear:
81 print("** Clearing Db") 102 print("** Clearing Db")
82 testConfig.clearDb() 103 testConfig.clearDb()
83 104
97 if args.init: 118 if args.init:
98 testConfig.initializeDb() 119 testConfig.initializeDb()
99 120
100 if args.run: 121 if args.run:
101 print("** Runnnig tests") 122 print("** Runnnig tests")
102 results[configName] = testConfig.runTests() 123 results[testConfig.label] = testConfig.runTests(selectedTests)
103 124
104 print("** Stopping Orthanc") 125 print("** Stopping Orthanc")
105 testConfig.stopOrthanc() 126 testConfig.stopOrthanc()
106 127
107 print("++++++++++++++ results summary +++++++++++++++") 128 print("++++++++++++++ results summary +++++++++++++++")
113 if not result.name in resultsByTestName: 134 if not result.name in resultsByTestName:
114 resultsByTestName[result.name] = {} 135 resultsByTestName[result.name] = {}
115 resultsByTestName[result.name][configName] = result 136 resultsByTestName[result.name][configName] = result
116 137
117 headerLine = "{empty:<40}|".format(empty="") 138 headerLine = "{empty:<40}|".format(empty="")
118 for configName in selectedTestConfigs: 139 for testConfig in selectedTestConfigs:
119 headerLine += "{configName:^15}|".format(configName=configName) 140 headerLine += "{configName:^15}|".format(configName=testConfig.label)
120 141
121 print(headerLine) 142 print(headerLine)
122 143
123 for testName in sorted(testNames): 144 for testName in sorted(testNames):
124 resultLine = "{name:<40}|".format(name=testName) 145 resultLine = "{name:<40}|".format(name=testName)
125 for configName in selectedTestConfigs: 146 for testConfig in selectedTestConfigs:
126 resultLine += "{avg:>11.2f} ms |".format(avg = resultsByTestName[testName][configName].averageTimeInMs) 147 resultLine += "{avg:>11.2f} ms |".format(avg = resultsByTestName[testName][testConfig.label].averageTimeInMs)
127 print(resultLine) 148 print(resultLine)
128 149
129 print("** Done") 150 print("** Done")