并行运行python测试

问题描述:

我试图使用pytest和xdist来运行我的测试,以加快我的测试(由于它们大多数涉及使用SQLAlchemy的数据库事务,所以速度很慢)。我发起了他们:并行运行python测试

py.test -n 4

(因为我的MacBook Pro有4个内核)

至于结果,测试了一半先前所需的时间运行,但其中许多人失败(他们通过我办他们通常)。 所以这个问题似乎是我的代码不是线程安全的。 我的问题是:考虑到我的代码没有明确使用线程和异步代码执行,我怎样才能创建可以并行安全执行的测试? 是否有一个经验法则和/或特殊的装饰/测试用例? 而且......为什么速度变成我期待的4倍而不是4倍?

ps。我正在使用Python 3.5.1,并且我的所有测试都继承自unittest.TestCase

+0

难道你的测试会使用同一个数据库的不同状态,并且它们会覆盖eachothers的配置吗? – DainDwarf

+0

是的,这确实是问题,因为在tearDown()我删除记录,以便为每个测试开始一个干净的表 – daveoncode

+0

然后,您可能需要为每个测试有一个单独的表(提示:使用测试“路径”后缀你的表),然后在拆卸它。 – DainDwarf

创建可以并行运行的unittest时,您需要小心如何使用tearUp()tearDown(),以便隔离单元测试。