xvfb 初步探究

xvfb 初步探究,第1张

有时候我们不关注程序是否有界面(比如自动化 测试 ),只要程序在运行就可以了

很感谢 xvfb 这个工具给我们提供了相关的功能

比如在没有 X server 的机器上运行 gedit, 可以用下面的命让友令

xvfb-run --auto-servernum --server-args="-screen 0 1280x760x24" gedit

xvfb 这个工具相当于一个wrapper, 给应用程序提供虚拟的 X server

用 ps auxf 观察进程的结构,可以发现 xvfb-run 首先创建了 Xvfb:103 这个 daemon 子进程,而后再运行 gedit

...

_ /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0 1280x760x24 gedit _ Xvfb :103 -screen 0 1280x760x24 -nolisten tcp _ gedit

如果,自己编写一个脚本 1.sh, 内容是显示 $DISPLAY 变量

---- 1.sh ---echo $DISPLAY

再用下面的命令运行

xvfb-run --auto-servernum --server-args="-screen 0 1280x760x24" ./1.sh

输出是

:103

而查看进程,原来 deamon 提供 DISPLAY :103

_ /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0 1280x760x24 ./1.sh _ Xvfb :103 -screen 0 1280x760x24 -nolisten tcp

再用命令查看 netstat -ln, 可以看到提供服务的 unix socket

...unix 2 [ ACC ] STREAM LISTENING 2060030 /tmp/.X11-unix/X103

...

总结:

xvfb 是通过提配滑数供一个类似 X server 守护培首进程 和 设置程序运行的环境变量 DISPLAY 来提供程序运行的环境

本文主要介绍,如何在Ubuntu远程连接服务器、远程启动进程、远程启动后台进程、远程启动后台图形化进程的常规方法。

最常用的远程连接方法就是ssh,ssh介绍与使用可以参考 SSH原理与运用(一):远程登录

用下面的命令可以直接连接远程的机器

正常情况下,通过ssh连接上远程机器以后,执行命令,启动进程都没有什么问题。但是如果关闭了ssh窗口,这些启动的进程会自动关闭。

关闭ssh窗口-->关闭session会话-->触发SIGHUP信号-->关闭ssh窗口启动的所有进程

解决方法,可以通过nohup或者screen方式实现ssh关闭而进程不退出

nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令猛尺运行后台中的程序。要运行后台中的 nohup 命令,添加 &( 表示“and”的符号)到命令的尾部。

例如:后台启动一个node进程

nohup很容易使用,简答的命令启动都没有什么问题,但是对于复杂的需要交互的命令就比较麻烦了,例如,关闭了ssh窗口,但是下次再登录进来的时候,还是想恢复上次的进程交互方式,通过nohup就不能实现,可以通过screen实现

例如:同样上面的方式我们启动一个node进程

对于远程启动的程序,有时候我们并不关心程序是否有图形化界面(比如自动化测试),只要程序能够运行就可以了。xvfb工具提供了这个功能。

Xvfb 是什么呢,他的名称是 virtual framebuffer X server for X Version 11, Xvfb 可以直接处理Window 的图形化功能,并且运销不会把图像输出到屏幕上,也就是说,就算你的电脑没有启动 Xwindow , 你仍然枝悄高可以执行任何图形程式。详细可以参考 维基百科Xvfb

安装xvfb

运行xvfb-run 常用命令

例如:

我们通过ssh启动一个chromium浏览器

提示不能打开,如下图

下面通过

通过xvfb-run启动浏览器,命令如下

浏览器启动成功,如下图

Selenium是一个web自动化测试框架。用它可以实现web应用自动化测试。不过,我不只是用它来做测试,我还用它从电子商务网站签到页面爬取javascript生成的或AJAX的内容。

作为程序员,我不满足于使用Selenium

IDE来记录和重放宏记录。那样很蹩脚,而且不适合部署到多台服务器。这时,你需要Selenium

WebDriver,它又灵活,而且通过Selenium headless,运行Selenium在服务器上不需要显示设备。

为什么要运行Headless Selenium 测试?

当你希望能在服务器上运行的健壮的自动化 *** 作,而其 *** 作又依赖于

27X7,同时还希望它是稳定的,这时,Selenium是你唯一的选择。但是,Selenium需要运行在浏览器上。所以,你得骗Selenium,让

它觉得,它正跑在一台带有显示器的机器上。这样,你就可以不间断的跑自动化测试,同时又不失稳定性和扩展性。

如何在ubuntu上运行Selenium headless

本教程的目标是在使用Mozilla Firefox作为主浏览器的ubuntu上配置和运行selenium headless。

安装Firefox headless

确认你的ubuntu安装的是最新版本的Firefox。我遇到过Selenium的版本和Firefox的版本不兼容问题。如果你没有安装Firefox或者使用的是老版本的Firefox,可按以下步骤升级Firefox:

在/etc/apt/sources.list加入:

ppa:mozillateam/firefox-stable

运行以下命令升级或安装Firefox

sudo apt-get update

sudo apt-get install firefox

运行成功后,ubuntu上就应该安装好最新版本的Firefox了。

安装Xvfb——一个X虚拟框架

这个仿真框架使用虚拟内存能让X-Server运行在没有显示设备的机器上。这样,浏览器就可以运行了。在ubuntu和Debian上安装xvfb,只要运胡肆模行:

sudo apt-get install xvfb

现在,可以运行xvfb服务上一个带有数字的显示设备上,这样是为了防止你在下阶段添加设备时引发冲突。本教程,我们分配一个显示设备 10..

sudo Xvfb :10 -ac

-ac代表关闭xvfb的访问控制。好了,服务器可以运行了。

启动浏览器

在你运行浏览器前,你首先要设置DISPLAY环境变量,以指定xvfb运行在哪个显示设备上。在加入环境变量前,我们检查一下所有的这些都如我们所料:

export DISPLAY=:10

firefox

如果终端(terminal)没有显示错误,就说明你已经成功运行Firefox在无显示设备的ubuntu上了。它会一直运行,直到你使用ctrl + C或其它类似方法来终止其运行。同时,它不会有任何输出。

如雹或果你能成功运行以上的步骤,那么接下来的部分就是轻而易举了。现在,我们可以在ubuntu服务器上运行selenium,如同你在本地运行

一样。本教裤缓程的下一部分,我展示了如何运行一个独立selenium服务器,同时使用PHP的selenium webdriver去连接。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12329782.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存