在测试期间使数据库事务阻止代码执行

时间:2015-10-30 16:17:28

标签: django postgresql selenium transactions

我有一个带有postgresql数据库的django后端angularJS frontEnd应用程序。我正在使用StaticLiveServerTestCase运行e2e测试,它扩展了LiveServerTestCase和子类TransactionTestCase。 TransactionTestCase不会将每个测试都包装在事务中(因此您可以显式提交/回滚)。

我的测试设置如下:

  1. 装载夹具数据
  2. 在my testClass setUp()方法中进一步处理数据,以生成特定的边缘情况(这可能涉及创建,更新或销毁数据库中的对象)。
  3. 使用selenium webDriver登录我的应用程序,并验证是否存在与正在测试的userScenario对应的某些元素。
  4. 我遇到的问题是我的setUp方法中的操作有时似乎没有在我的webdriver使GET成为我的应用程序URL之前提交(点击查询我在setUp中操作的表的django视图)...我的视图返回的数据是来自fixture-load的数据库的旧的,未操纵的状态。如果我在获取之后使用webDriver刷新页面,则通常会显示正确的数据,但并不总是......它似乎不是确定性的。

    我猜这与setUp方法完全完成其对测试数据库的事务之间的某种竞争条件以及我的应用程序测试服务器连接生成的读取有关。它们是两个独立的连接,据我所知,每个连接中的事务都不能保证以任何特定的顺序发生。

    我的数据库的隔离级别为psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE

    我的问题:在其他事务执行之前,有没有办法保证/强制数据库事务发生?我已经尝试过使用django.db.transaction.commit(),但这似乎没有诀窍......

0 个答案:

没有答案