I am trying to write tests for django requests that can take a lot of time to process and thus can interleave other requests. My plan was to issue a long request and enter statements into places where he could pause.
But trying to use threads in my unit test does not work well:
class ThreadTest(test.TestCase): def thread_test(self): def printer(): print models.Daemon.objects.count() d = models.Daemon(url='http://lockss.notadomain:8088') d.save() printer() t = threading.Thread(target=printer) t.start() t.join()
The call to printer () works the way I expected the first time, but when the call from Thread cannot find the table:
1 Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner self.run() File "/usr/lib/python2.6/threading.py", line 484, in run self.__target(*self.__args, **self.__kwargs) File "/home/bhayes/lockss-code/hare/lockss-django/autest/tests.py", line 247, in printer print models.Daemon.objects.count() File "/usr/lib/pymodules/python2.6/django/db/models/manager.py", line 120, in count return self.get_query_set().count() File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line 326, in count return self.query.get_count(using=self.db) File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py", line 394, in get_count number = obj.get_aggregation(using=using)[None] File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py", line 366, in get_aggregation result = query.get_compiler(using).execute_sql(SINGLE) File "/usr/lib/pymodules/python2.6/django/db/models/sql/compiler.py", line 727, in execute_sql cursor.execute(sql, params) File "/usr/lib/pymodules/python2.6/django/db/backends/sqlite3/base.py", line 200, in execute return Database.Cursor.execute(self, query, params) DatabaseError: no such table: autest_daemon
I would like to understand what is happening. Also, I would like to know if there is a better strategy for testing concurrent queries.
Barry hayes
source share