硒测试对生产有效,但对开发无效



我有一个Vue.js应用程序,我想为它编写硒测试。当我针对部署的应用程序生产版本运行测试时,测试通过,但在针对本地版本运行时失败。

当然,当在本地运行时,Vue.js应用程序不是从构建中运行的,而是使用npm run serve运行的。

我在本地有以下docker compose设置:

app:
build:
context: .
dockerfile: ./app.dockerfile
image: app
command: npm run serve
ports:
- 8080:8080
volumes:
- ./app:/app
selenium:
image: selenium/standalone-chrome:91.0
depends_on:
- app
e2e-tests:
build:
context: .
dockerfile: ./e2e_tests.dockerfile
image: e2e-tests
command: poetry run python ./foo.py
depends_on:
- app
- selenium
volumes:
- ./e2e_tests:/app

以下是一个使用e2e-testsselenium容器在互联网上测试已部署的应用程序生产版本的基本测试:

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--window-size=1420,1080")
chrome_options.add_argument("--headless")
driver = webdriver.Remote("http://selenium:4444/wd/hub", options=chrome_options)
driver.get('https://www.example.com')
try:
assert 'My app title' in driver.title
except AssertionError:
print('invalid title')
driver.quit()

如果我现在将上面的测试更改为使用app容器,它只是Vue应用程序的本地运行版本,它会失败,因为标题是空的:

driver.get('http://app:8080')

我试着在driver.get之后添加一个10秒的wait到测试中,但标题仍然是空的。

尽管我可以通过浏览器访问该应用程序,但当selenium试图从docker中调用它时,该应用程序返回了Invalid Host Header。一定是一些与码头工人有关的特质。

解决方案是更新我的vue.config.js如下:

module.exports = {
devServer: {
disableHostCheck: true
}
};

disableHostCheck解决了这个问题。显然,这只应该在开发中使用,因为如果在生产中启用,会有安全风险。

相关内容

最新更新