我想我明白了这一点,但欢迎更多(可能更优雅)的解决方案。
我正在运行“干净”和“脏”测试。“干净”测试只是普通的 Selenium 测试,每次测试后都会设置和拆除数据库。“脏”测试是通过将选项传递给我的子类 DjangoTestSuiteRunner 来运行的,该选项告诉它是否设置或拆除数据库,并传入用户 ID,如下所示:
python manage.py test myapp --testrunner=testrunner.MySeleniumTestRunner \
--no_setup_db --no_teardown_db --user=1234 --liveserver=localhost:8081
然后,我在一个 shell 脚本中将大约 10 个这些命令串在一起并记录输出。
唯一棘手的部分是以同时考虑这两种测试的方式编写测试。因此,例如,如果我只是在干净测试中将产品添加到购物车并检查购物车中的商品以表明成功,那么我还需要添加一个条件来检查产品可用性等内容。因此,当我运行我的脏测试时,如果只有四个产品可用,那么前四个用户是成功的,因为该产品可用并且我验证该产品已添加到他们的购物车 - 但第五个用户也通过了测试,因为当产品不可用我检查是否有正确的错误处理等。
我知道这不是很像单元测试,甚至可能是功能测试的非标准测试,但我认为它很好地模拟了并行多用户测试,而不会影响测试独立性。