在Docker容器中配置StaticLiveServerTestCase

时间:2019-12-23 21:01:26

标签: django docker

我能够为硒测试生成一个单独的实时开发服务器进程,该进程从LiveServerTestCase继承以下内容-

#globals
HTTP = "http://"
# ip address of host machine on the default docker network
LOCALHOST = settings.HOST_LOCALHOST
# port number on host the docker selenium remote server is exposed on
SEL_PORT = 4444


class SignUpViewFunctionalTests(LiveServerTestCase):

    port = 9000
    host = '0.0.0.0'
    live_server_url = HTTP + LOCALHOST + ":" + "9000"

    def setUp(self):
        settings.DEBUG = True
        self.driver = webdriver.Remote(
            HTTP + LOCALHOST + ":" + str(SEL_PORT) + "/wd/hub",
            DesiredCapabilities.CHROME
        )

这将导致两个并行进程在Web docker容器中运行;默认情况下,在0.0.0.0:8000上等待请求,并且在运行正在侦听0.0.0.0:9000的测试时会生成该进程。通过我通过RealVNC连接到的硒远程服务器,我看到Chrome浏览器以“ 172.0.17.1:9000/accounts/signup”启动,并且在测试过程中一切正常-创建了注册用户,确认测试正在运行流程正在使用单独的测试数据库。我唯一注意到的是我的静态文件没有通过-我在本地使用白噪声,这在等待0.0.0.0:8000上的请求的默认Web进程上运行良好。

所以我更改了测试,使其继承自'StaticLiveServerTestCase'并导致错误-用户已注册,确认测试DID不使用单独的数据库。

如何配置它,使其也可以与StaticLiveServerTestCase一起使用?该文档似乎没说太多。

**更新**

我发现,如果我接管chrome浏览器-在测试运行时-自己单击表单提交按钮,则会创建用户,这意味着将使用测试数据库。但是,如果自动化测试在没有我干预的情况下继续进行,则会使用其他数据库!我不知道从哪里开始!

**更新两次**

文档说明-

  

使用内存中的SQLite数据库运行测试时,两个线程并行共享同一数据库连接:运行实时服务器的线程和运行测试用例的线程。防止两个线程通过此共享连接同时进行数据库查询很重要,因为这有时可能会随机导致测试失败。因此,您需要确保两个线程不会同时访问数据库。特别是,这意味着在某些情况下(例如,在单击链接或提交表单之后),您可能需要检查Selenium是否收到了响应,并在继续进行进一步的测试执行之前加载了下一页。

https://docs.djangoproject.com/en/3.0/topics/testing/tools/#liveservertestcase

这也许是问题所在?尽管我使用的是Postgres,而不是SQLite。

0 个答案:

没有答案