【问题标题】:Django's StaticLiveServerTestCase test pass alone but fail when groupedDjango 的 StaticLiveServerTestCase 测试单独通过,但在分组时失败
【发布时间】:2016-08-11 17:54:21
【问题描述】:

我正在使用 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)。

我可以从django.test.TestCase 得到类似setUpTestData 的东西吗?

编辑 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后测试仍然失败。

感谢你们的反馈!

【问题讨论】:

  • load_data() 中有什么?
  • 如果你使用的是 Django 1.9+:如果你通过--parallel=1,它仍然会失败吗?

标签: python django selenium


【解决方案1】:

问题是由load_data() 引起的。数据库将在第一次从setUpClass 调用load_data() 时填充,并且第一个测试将通过。第二次测试,数据库数据会被清除,不会刷新。

更改load_data() 方法来加载fixture 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2019-12-18
    • 2018-05-06
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多