我想用Dockers容器中的Jenkins CI执行我的自动化测试,用Nightwatch-Cucumber编写.我有一个Docker图像,我想用它.
这就是我想要做的更详细的事情.
>开始对Jenkins CI工作进行测试
>在同一台机器上加载Docker镜像,相关的Docker容器将启动.这个容器基于Unix OS.此外,将执行Docker容器中的某些配置.
>测试将通过xvfb以无头模式执行(从本地或远程),报告将保存在Jenkins机器上.
通过GitLab CI我已经通过.gitlab-ci.yml配置文件实现了它并且它运行得非常好:
image: "my-docker-image" stages: - "chrome-tests" before_script: - "apt-get update" - "apt-get install -y wget bzip2" - "npm install" cache: paths: - node_modules/ run-tests-on-chrome: stage: "chrome-tests" script: - "whereis xvfb-run" - "xvfb-run --server-args='-screen 0 1600x1200x24' npm run test-chrome"
但我想与Jenkins CI实现相同的程序.什么是最简单的方法,并在Jenkins调用的Docker镜像中运行我的自动化测试?我应该写一个Dockerfile或者不是或者或者?
解决方法
我目前正在运行用PHP编写的Selenium Test脚本,并使用Docker Compose通过Jenkins运行它们.您也可以这样做,而无需自己处理Xvfb的麻烦.
要使用Docker容器内的无头浏览器运行Selenium测试并使用docker-compose将其链接到您的应用程序,您只需使用预定义的独立服务器即可.
https://github.com/SeleniumHQ/docker-selenium
我目前正在使用Chrome Standalone图片.
这是您的docker-compose应该是什么样子:
version: '3' services: your-app: build: context: . dockerfile: Dockerfile your_selenium_application: build: context: . dockerfile: Dockerfile.selenium.test depends_on: - chrome-server - your-app chrome-server: image: selenium/standalone-chrome:3.4.0-einsteinium
当运行docker-compose时,它将启动您的应用程序,将与您的应用程序交互的selenium环境,以及将为您提供无头浏览器的独立服务器.因为它们是链接的,所以在你的selenium代码中,你可以通过你的app:80向主机发出测试请求.您的无头浏览器将是chrome-server:4444 / wd / hub,这是默认地址.
这可以在Jenkins内部完成,只需在Jenkins Job中的Execute Shell中使用一个命令. docker-compose还允许您在本地计算机上轻松运行测试,结果应该相同.