【发布时间】:2021-04-20 13:59:22
【问题描述】:
我在 vagrant box 中有一个项目,我想在 cypress 上运行 e2e 测试。我能够在客户机中无头运行 cypress。但我想要它提供的 GUI 功能。如何运行 Cypress 以便它可以使用主机的浏览器来运行测试? 我有 Ubuntu 20.04。
【问题讨论】:
我在 vagrant box 中有一个项目,我想在 cypress 上运行 e2e 测试。我能够在客户机中无头运行 cypress。但我想要它提供的 GUI 功能。如何运行 Cypress 以便它可以使用主机的浏览器来运行测试? 我有 Ubuntu 20.04。
【问题讨论】:
如果您使用 Linux 主机,您实际上只需要将主机上的 /tmp/.X11-unix 的卷映射到来宾。
d.volumes = ["/tmp/.X11-unix:/tmp/.X11-unix"]
参考:https://github.com/ProxiBlue/vagrant_docker_cypress/blob/main/Vagrantfile#L38
完整示例位于此处:https://github.com/ProxiBlue/vagrant_docker_cypress 和一个视频显示它工作:https://www.youtube.com/watch?v=DDmNgtyE_kE
【讨论】:
我想出了该怎么做,以防万一将来有其他人需要这样做。
显然,要使其正常工作,需要X-forwarding。这意味着客人必须将 GUI 显示转发给主机。
假设您已经正确安装了 cypress 并且可以无头运行它:yarn run cypress run(或者无论您以哪种方式运行它,npm 等)
1.您需要主机上的 X-Server。
2。在您的 Vagrant VM 上启用 X-forwarding
只需将此添加到您的Vagrantfile
config.ssh.forward_x11 = true
3. ssh 进入没有 vagrant ssh 的盒子
我们需要使用ssh 访问来宾,而不是普通的vagrant ssh。这样做:
使用 vagrant 文件在目录中的主机上运行 vagrant ssh-config
$ vagrant ssh-config
Host default
HostName 127.0.0.1
User ubuntu
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/xxxx/work/.vagrant/private_key
IdentitiesOnly yes
LogLevel FATAL
ForwardX11 yes
从这里我们得到了 ssh 所需的详细信息。 user、HostName、Port 和 IdentityFile。
现在我们可以从主机 ssh 进入来宾并运行 cypress 测试运行程序。
我们还需要添加 -X 标志,告诉 ssh 使用 X 转发。
假设我的项目在我的客户机主目录中名为 project 的目录中运行...在您的机器运行时从主机运行此命令。
ssh vagrant@127.0.0.1 -X -p 2222 -i /Users/xxxx/work/.vagrant/private_key -t "cd /home/vagrant/project; yarn run cypress open"
瞧!测试运行器将在您的盒子中运行,GUI 将显示在您的主机上。
【讨论】: