mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-06-04 06:48:27 -04:00
c0b5a0446b
tests extend from either TestBase or ORMTest, using additional mixins for special assertion methods as needed
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
import testenv; testenv.configure_for_tests()
|
|
import time
|
|
#import gc
|
|
#import sqlalchemy.orm.attributes as attributes
|
|
from sqlalchemy import *
|
|
from sqlalchemy.orm import *
|
|
from testlib import *
|
|
|
|
"""
|
|
|
|
we are testing session.expunge() here, also that the attributes and unitofwork
|
|
packages dont keep dereferenced stuff hanging around.
|
|
|
|
for best results, dont run with sqlite :memory: database, and keep an eye on
|
|
top while it runs
|
|
"""
|
|
|
|
NUM = 2500
|
|
|
|
class LoadTest(TestBase, AssertsExecutionResults):
|
|
def setUpAll(self):
|
|
global items, meta
|
|
meta = MetaData(testing.db)
|
|
items = Table('items', meta,
|
|
Column('item_id', Integer, primary_key=True),
|
|
Column('value', String(100)))
|
|
items.create()
|
|
def tearDownAll(self):
|
|
items.drop()
|
|
def setUp(self):
|
|
for x in range(1,NUM/500+1):
|
|
l = []
|
|
for y in range(x*500-500 + 1, x*500 + 1):
|
|
l.append({'item_id':y, 'value':'this is item #%d' % y})
|
|
items.insert().execute(*l)
|
|
|
|
def testload(self):
|
|
class Item(object):pass
|
|
|
|
m = mapper(Item, items)
|
|
sess = create_session()
|
|
now = time.time()
|
|
query = sess.query(Item)
|
|
for x in range (1,NUM/100):
|
|
# this is not needed with cpython which clears non-circular refs immediately
|
|
#gc.collect()
|
|
l = query.filter(items.c.item_id.between(x*100 - 100 + 1, x*100)).all()
|
|
assert len(l) == 100
|
|
print "loaded ", len(l), " items "
|
|
# modifying each object will insure that the objects get placed in the "dirty" list
|
|
# and will hang around until expunged
|
|
#for a in l:
|
|
# a.value = 'changed...'
|
|
#assert len(objectstore.get_session().dirty) == len(l)
|
|
#assert len(objectstore.get_session().identity_map) == len(l)
|
|
#assert len(attributes.managed_attributes) == len(l)
|
|
#print len(objectstore.get_session().dirty)
|
|
#print len(objectstore.get_session().identity_map)
|
|
#objectstore.expunge(*l)
|
|
total = time.time() -now
|
|
print "total time ", total
|
|
|
|
|
|
if __name__ == "__main__":
|
|
testenv.main()
|