Mercurial > hg > orthanc-tests
comparison PerfsDb/Run.py @ 158:df1f9946571c
perfs db continued: tests working with tiny DBs on all setup but the sqliteplugin
author | am@osimis.io |
---|---|
date | Fri, 17 Aug 2018 11:58:26 +0200 |
parents | |
children | 6995d5d12d88 |
comparison
equal
deleted
inserted
replaced
157:ac14100ffbd7 | 158:df1f9946571c |
---|---|
1 import argparse | |
2 from ConfigFileBuilder import ConfigFileBuilder | |
3 from TestConfig import TestConfig | |
4 from DbServer import DbServer | |
5 from DbType import DbType | |
6 from DbSize import DbSize | |
7 | |
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 | |
17 "mysql-tiny" : TestConfig(label= "mysql-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.MySQL, port=3000)), | |
18 "pg9-tiny": TestConfig(label= "pg9-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG9, port=3001)), | |
19 "pg10-tiny": TestConfig(label= "pg10-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG10, port=3002)), | |
20 "pg11-tiny": TestConfig(label= "pg11-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.PG11, port=3003)), | |
21 "mssql-tiny" : TestConfig(label= "mssql-tiny", dbSize=DbSize.Tiny, dbServer=DbServer(dbType=DbType.MSSQL, port=3004)), | |
22 "sqlite-tiny": TestConfig(label= "sqlite-tiny", dbSize=DbSize.Tiny, dbType=DbType.Sqlite), | |
23 "sqliteplugin-tiny": TestConfig(label= "sqliteplugin-tiny", dbSize=DbSize.Tiny, dbType=DbType.SqlitePlugin), | |
24 | |
25 "mysql-medium" : TestConfig(label= "mysql-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.MySQL, port=4000)), | |
26 "pg9-medium": TestConfig(label= "pg9-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG9, port=4001)), | |
27 "pg10-medium": TestConfig(label= "pg10-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG10, port=4002)), | |
28 "pg11-medium": TestConfig(label= "pg11-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.PG11, port=4003)), | |
29 "mssql-medium" : TestConfig(label= "mssql-medium", dbSize=DbSize.Medium, dbServer=DbServer(dbType=DbType.MSSQL, port=4004)), | |
30 "sqlite-medium": TestConfig(label= "sqlite-medium", dbSize=DbSize.Medium, dbType=DbType.Sqlite), | |
31 "sqliteplugin-medium": TestConfig(label= "sqliteplugin-medium", dbSize=DbSize.Medium, dbType=DbType.SqlitePlugin), | |
32 } | |
33 | |
34 selectedTestConfigs = [] | |
35 | |
36 parser = argparse.ArgumentParser(description = "Initializes/Runs/Clears PerfsDb setup.") | |
37 | |
38 # create a cli option for each config | |
39 for testConfigName in testConfigs.keys(): | |
40 parser.add_argument("--" + testConfigName, action = "store_true") | |
41 | |
42 parser.add_argument("--init", help = "initializes DBs", action = "store_true") | |
43 parser.add_argument("--run", help = "runs tests", action = "store_true") | |
44 parser.add_argument("--clear", help = "clear DBs", action = "store_true") | |
45 | |
46 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=".") | |
48 parser.add_argument("--repeat", help = "number of times to repeat each test to average timings", type=int, default=50) | |
49 | |
50 args = parser.parse_args() | |
51 | |
52 for testConfigName in testConfigs.keys(): | |
53 if args.__dict__[testConfigName.replace("-", "_")]: | |
54 selectedTestConfigs.append(testConfigName) | |
55 | |
56 # if no test config specified, take them all | |
57 if len(selectedTestConfigs) == 0: | |
58 selectedTestConfigs = testConfigs.keys() | |
59 | |
60 selectedTestConfigs = sorted(selectedTestConfigs) | |
61 | |
62 # if no action specified, it means only run | |
63 if not (args.init | args.run | args.clear): | |
64 args.init = False | |
65 args.run = True | |
66 args.clear = False | |
67 | |
68 print("***** Orthanc *******") | |
69 print("path :", args.orthanc_path) | |
70 | |
71 results = {} | |
72 | |
73 for configName in selectedTestConfigs: | |
74 testConfig = testConfigs[configName] | |
75 testConfig.setName(configName) | |
76 testConfig.setRepeatCount(args.repeat) | |
77 | |
78 print("======= " + configName + " ========") | |
79 | |
80 if args.clear: | |
81 print("** Clearing Db") | |
82 testConfig.clearDb() | |
83 | |
84 if args.init or args.run: | |
85 print("** Generating config files") | |
86 testConfig.generateOrthancConfigurationFile(args.plugins_path) | |
87 | |
88 print("** Launching DbServer") | |
89 testConfig.launchDbServer() | |
90 | |
91 print("** Launching Orthanc") | |
92 orthancWasAlreadyRunning = not testConfig.launchOrthanc(args.orthanc_path) | |
93 if orthancWasAlreadyRunning and len(selectedTestConfigs) > 1: | |
94 print("Error: Can't execute multiple configuration on already running Orthanc. Exit Orthanc and let this script start Orthanc instances") | |
95 exit(-1) | |
96 | |
97 if args.init: | |
98 testConfig.initializeDb() | |
99 | |
100 if args.run: | |
101 print("** Runnnig tests") | |
102 results[configName] = testConfig.runTests() | |
103 | |
104 print("** Stopping Orthanc") | |
105 testConfig.stopOrthanc() | |
106 | |
107 print("++++++++++++++ results summary +++++++++++++++") | |
108 testNames = set() | |
109 resultsByTestName = {} | |
110 for configName, configResult in results.items(): | |
111 for result in configResult: | |
112 testNames.add(result.name) | |
113 if not result.name in resultsByTestName: | |
114 resultsByTestName[result.name] = {} | |
115 resultsByTestName[result.name][configName] = result | |
116 | |
117 headerLine = "{empty:<40}|".format(empty="") | |
118 for configName in selectedTestConfigs: | |
119 headerLine += "{configName:^15}|".format(configName=configName) | |
120 | |
121 print(headerLine) | |
122 | |
123 for testName in sorted(testNames): | |
124 resultLine = "{name:<40}|".format(name=testName) | |
125 for configName in selectedTestConfigs: | |
126 resultLine += "{avg:>11.2f} ms |".format(avg = resultsByTestName[testName][configName].averageTimeInMs) | |
127 print(resultLine) | |
128 | |
129 print("** Done") |