Mercurial > p > roundup > code
comparison test/benchmark.py @ 7871:30fcdf60da44
test: fix benchmark.py and set up to run under github if requested
Add the word "benchmark" to the comment to get the benchmarking code
to run.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Wed, 10 Apr 2024 00:14:58 -0400 |
| parents | 2120f77554d5 |
| children | 163d2c60fdf3 |
comparison
equal
deleted
inserted
replaced
| 7870:fe77e4325084 | 7871:30fcdf60da44 |
|---|---|
| 1 from __future__ import print_function | 1 from __future__ import print_function |
| 2 import sys, os, time | 2 import sys, os, time |
| 3 import importlib | |
| 3 | 4 |
| 4 from roundup.hyperdb import String, Password, Link, Multilink, Date, \ | 5 from roundup.hyperdb import String, Password, Link, Multilink, Date, \ |
| 5 Interval, DatabaseError, Boolean, Number | 6 Interval, DatabaseError, Boolean, Number |
| 6 from roundup import date, password | 7 from roundup import date, password |
| 7 | 8 |
| 8 from .db_test_base import config | 9 from test.db_test_base import config |
| 9 | 10 |
| 10 def setupSchema(db, module): | 11 def setupSchema(db, module): |
| 11 status = module.Class(db, "status", name=String()) | 12 status = module.Class(db, "status", name=String()) |
| 12 status.setkey("name") | 13 status.setkey("name") |
| 13 user = module.Class(db, "user", username=String(), password=Password(), | 14 user = module.Class(db, "user", username=String(), password=Password(), |
| 23 db.post_init() | 24 db.post_init() |
| 24 db.commit() | 25 db.commit() |
| 25 | 26 |
| 26 def main(backendname, time=time.time, numissues=10): | 27 def main(backendname, time=time.time, numissues=10): |
| 27 try: | 28 try: |
| 28 exec('from roundup.backends import %s as backend'%backendname) | 29 backend = importlib.import_module("roundup.backends.back_%s" % |
| 30 backendname) | |
| 29 except ImportError: | 31 except ImportError: |
| 30 return | 32 return |
| 31 | 33 |
| 32 times = [] | 34 times = [] |
| 33 | 35 |
| 35 numissues)) | 37 numissues)) |
| 36 if not os.path.exists(config.DATABASE): | 38 if not os.path.exists(config.DATABASE): |
| 37 db = backend.Database(config, 'admin') | 39 db = backend.Database(config, 'admin') |
| 38 setupSchema(db, backend) | 40 setupSchema(db, backend) |
| 39 # create a whole bunch of stuff | 41 # create a whole bunch of stuff |
| 40 db.user.create(**{'username': 'admin'}) | 42 db.user.create(**{'username': 'admin', 'roles': 'Admin'}) |
| 41 db.status.create(name="unread") | 43 db.status.create(name="unread") |
| 42 db.status.create(name="in-progress") | 44 db.status.create(name="in-progress") |
| 43 db.status.create(name="testing") | 45 db.status.create(name="testing") |
| 44 db.status.create(name="resolved") | 46 db.status.create(name="resolved") |
| 45 pc = -1 | 47 pc = -1 |
| 46 for i in range(numissues): | 48 for i in range(numissues): |
| 47 db.user.create(**{'username': 'user %s'%i}) | 49 db.user.create(**{'username': 'user %s'%i, 'roles': 'User'}) |
| 48 for j in range(10): | 50 for j in range(10): |
| 49 db.user.set(str(i+1), assignable=1) | 51 db.user.set(str(i+1), assignable=1) |
| 50 db.user.set(str(i+1), assignable=0) | 52 db.user.set(str(i+1), assignable=0) |
| 51 db.issue.create(**{'title': 'issue %s'%i}) | 53 db.issue.create(**{'title': 'issue %s'%i}) |
| 52 for j in range(10): | 54 for j in range(10): |
| 120 | 122 |
| 121 if __name__ == '__main__': | 123 if __name__ == '__main__': |
| 122 # 0 1 2 3 4 5 6 | 124 # 0 1 2 3 4 5 6 |
| 123 # 01234567890123456789012345678901234567890123456789012345678901234 | 125 # 01234567890123456789012345678901234567890123456789012345678901234 |
| 124 print('Test name fetch journl jprops lookup filter filtml TOTAL ') | 126 print('Test name fetch journl jprops lookup filter filtml TOTAL ') |
| 125 for name in 'anydbm metakit sqlite'.split(): | 127 for name in 'anydbm sqlite'.split(): |
| 126 main(name) | 128 main(name) |
| 127 for name in 'anydbm metakit sqlite'.split(): | 129 for name in 'anydbm sqlite'.split(): |
| 128 main(name, numissues=20) | 130 main(name, numissues=20) |
| 129 for name in 'anydbm metakit sqlite'.split(): | 131 for name in 'anydbm sqlite'.split(): |
| 130 main(name, numissues=100) | 132 main(name, numissues=100) |
| 131 # don't even bother benchmarking the dbm backends > 100! | 133 # don't even bother benchmarking the dbm backends > 100! |
| 132 for name in 'metakit sqlite'.split(): | 134 for name in 'sqlite'.split(): |
| 133 main(name, numissues=1000) | 135 main(name, numissues=1000) |
| 134 | 136 |
| 135 # vim: set et sts=4 sw=4 : | 137 # vim: set et sts=4 sw=4 : |
