在Linux上的Docker中查看交互式Cypress测试运行器

用户名

当赛普拉斯测试在Docker容器中运行时,我试图以交互模式查看赛普拉斯。本文介绍了如何在Mac上-https: //www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command/#Interactive-mode我无法在新的Linux Mint OS安装上使其正常工作。

在这篇文章之后,我设置了-

$ IP=172.17.0.1
$ xhost + $IP
$ export DISPLAY=172.17.0.1:0

这是Docker默认网桥网络上本地主机上的IP地址。

这是我唯一的设置。接下来是用于运行容器的docker命令-

docker container run -it \
  -v $PWD:/e2e \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -w /e2e \
  -e DISPLAY \
  --entrypoint cypress \
  cypress/included:3.8.1 open --project .

唯一的区别是最新映像和“ docker容器运行”,而不是已弃用的“ docker run ...”

它引起-

(Cypress:16):Gtk-警告**:无法打开显示:172.17.0.1:0

现在,这篇文章确实警告可能会出现-

调试提示:如果Cypress显示错误Gtk-警告**:无法打开显示:...确保X11服务器允许通过Docker容器通过网络进行连接。在终端中运行xhost命令,查看它是否具有您先前使用xhost + $ IP添加的IP地址。

当我跑步时

$ xhost

它给 -

英特网:ross-Aspire-TC-780

SI:localuser:ross

我是一个业余网络开发人员,没有太多的系统管理员知识,所以我完全依靠这篇文章来工作。有人知道如何使它工作吗?

x-yuri

tl; dr

docker run -it --rm \
    --network host \
    -v ~/.Xauthority:/root/.Xauthority:ro \
    -e DISPLAY \
    -v $PWD:/e2e \
    -w /e2e \
    --entrypoint '' \
    cypress/included \
    npx cypress open

要在docker容器中运行任何GUI应用程序,您必须了解X Window System的工作方式。X使用客户端-服务器模型。X服务器程序在具有图形显示的计算机上运行,​​并与各种客户端程序(X客户端)进行通信。X服务器充当用户和客户端程序的中间人,接受来自客户端程序的图形输出请求并将其显示给用户(显示器),并接收用户输入(键盘,鼠标)并将其传输到客户程序。

在X中,服务器在用户计算机上运行,​​而客户端可以在远程计算机上运行。该术语颠倒了客户端-服务器系统的通用概念,在该系统中,客户端通常在用户的本地计算机上运行,​​而服务器在远程计算机上运行。X Window术语的观点是X Window程序处于所有活动的中心,即X Window程序接受并响应来自应用程序以及用户的鼠标和键盘输入的请求。因此,将应用程序(在远程计算机上)视为X Window服务器程序的客户端。

因此,要在Docker容器中运行GUI应用程序,必须提供一种使其与主机上运行的X服务器通信的方法。解决该问题的一种方法是使用host网络(--network host)。在这种情况下,容器共享主机的网络名称空间。即,容器的网络堆栈未与Docker主机隔离。特别是,容器可以连接到主机上运行的任何服务器。

另外,您还必须让容器向X服务器进行身份验证。同样,实现此目的的一种方法是使用基于cookie的身份验证。为此,您必须~/.Xauthority与容器(--volume ~/.Xauthority:/root/.Xauthority:ro共享文件

您必须告诉容器X服务器在哪里运行。为此,使用DISPLAY变量由于容器将可以访问主机的网络名称空间,因此您只需将DISPLAY变量从主机传递到容器(--env DISPLAY)。

然后,您需要确保测试可用于cypress--volume $PWD:/e2e+ --workdir /e2e)。

另外,cypress/included将入口点设置为cypress run,因此要打开cypress它,必须重置入口点(--entrypoint ''),然后使用npxnpx cypress open),否则它将找不到您的项目文件。通常,您cypress在处运行./node_modules/.bin/cypress,但cypress在图像中解析为/usr/local/bin/cypressnpx使它cypress./node_modules目录运行

cypress run由于后者默认为当前目录因此不需要如果全局安装cypress open 出于某种原因或其他原因不会这样做

因此,

docker run -it --rm \
    --network host \
    -v ~/.Xauthority:/root/.Xauthority:ro \
    -e DISPLAY \
    -v $PWD:/e2e \
    -w /e2e \
    --entrypoint '' \
    cypress/included \
    npx cypress open

这里更多

PS:如果您执行任何占用大量内存的操作,cypress(或者说chrome)可能会偶尔崩溃。发生这种情况是因为默认情况下docker为共享内存(/dev/shm分配了64 MB 解决此问题的一种方法是使容器可以访问主机的共享内存。换句话说,取消隔离IPC名称空间。那是通过通过--ipc=host不是特定于的cypress崩溃基本上是chrome

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过VSTS中的命令行测试运行器发布测试结果

来自分类Dev

使用Python中的绿色测试运行器跳过测试

来自分类Dev

如何配置Pydev测试运行器以使用Docker

来自分类Dev

在Azure DevOps中运行.Net / VS测试运行器失败

来自分类Dev

交互式测试量角器

来自分类Dev

Django测试运行程序在Ubuntu上的virtualenv中失败

来自分类Dev

在赛普拉斯测试运行器中找不到文件

来自分类Dev

如何在PyCharm中设置测试运行器的参数

来自分类Dev

在赛普拉斯测试运行器中找不到文件

来自分类Dev

业力测试运行器-无法捕获Chrome

来自分类Dev

是否有PHPUnit的分层测试运行器?

来自分类Dev

多个HTML记者Karma测试运行器

来自分类Dev

业力测试运行器-无法捕获Chrome

来自分类Dev

测试运行器在重播期间找不到控件

来自分类Dev

如何在“运行测试”屏幕之外查看“ MTM测试运行”注释?

来自分类Dev

在全局变量中测试运行

来自分类Dev

如何自动重命名Testrail中的测试运行

来自分类Dev

Resharper单元测试运行器无法在发行版中运行测试(System.BadImageFormatException)

来自分类Dev

测试脚本是否正在由交互式调试器运行

来自分类Dev

cypress 测试运行时无法加载地图和 css 的图块

来自分类Dev

如何将交互式查看器包含在框中?

来自分类Dev

如何使用WebGL在JavaScript中创建交互式全景查看器?

来自分类Dev

如何使 XAML 中滚动查看器的滚动条成为非交互式

来自分类Dev

着色golang测试运行输出

来自分类Dev

作为Maven测试运行

来自分类Dev

再现ScalaCheck测试运行

来自分类Dev

Couchbase测试运行失败

来自分类Dev

Intellij测试运行历史

来自分类Dev

测试运行null和字母?

Related 相关文章

热门标签

归档