Django的StaticLiveServerTestCase测试单独传递但在分组时失败

时间:2016-08-11 17:54:21

标签: python django selenium

我正在使用SeleniumStaticLiveServerTestCase来测试Django应用。

测试如下:

class e2eTest(StaticLiveServerTestCase):
    @classmethod
    def setUpClass(cls):
        super(IntegrationTest, cls).setUpClass()
        cls.data = load_data()
        cls.driver = webdriver.PhantomJS("path_to_phantomjs")
        cls.common = common(cls.driver, cls.live_server_url + settings.STATIC_URL + 'index.html')

    def setUp(self):
        for data in self.data:
            data.refresh_from_db()

    def test_login_1(self):
        self.common.login('admin')

    def test_login_2(self):
        self.common.login('admin')

load_data()用于填充测试数据库(使用应用models)。

如果我跑:

1- python manage.py test login.tests:测试以test_login_1开头。 test_login_1成功,test_login_2失败。

2- python manage.py test login.tests --reverse:测试以test_login_2开头。 test_login_2成功,test_login_1失败。

我认为这与每次测试后开始删除的数据有关。 附:使用django.test.TestCase&它是setUpTestData和Django的测试客户端(直接将数据发送到登录api)。

我可以从setUpTestData获得django.test.TestCase的内容吗?

编辑1

@luke_aus:load_data()包含填充测试数据库的方法:

from my_app import User, priceModel
user = User(username='test').set_password('test')
user.save()
priceModel = priceModel(name='test')
priceModel.save()
....

@knbk:我正在使用Django 1.9。通过--parallel=1后,测试仍然失败。

感谢您的反馈!

1 个答案:

答案 0 :(得分:0)

问题是由load_data()引起的。数据库将在load_data()的{​​{1}}第一次调用中填充,第一次测试将通过。对于第二次测试,数据库数据将被清除而不会刷新。

更改setUpClass方法以加载灯具解决了这个问题。