我能够为硒测试生成一个单独的实时开发服务器进程,该进程从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。