本主题解释如何在不打开浏览器的情况下运行 web 场景,并讨论在 Linux 上配置此模式的特殊配置步骤。

本章包含:

以无数据头模式运行

SOAtest 可以在“无数据头模式”(不显示浏览器)下运行 web 场景。 

在命令行模式下(使用 soatestcli),SOAtest 默认以无头模式运行 web 场景。如果不希望从 cli 以无头模式运行,则使用带 soatestcli 的  -browserTestsVisible 命令行(如 Testing from the Command Line Interface - soatestcli中所述)。 

在命令行界面使用 (soatestcli 进行测试)

为此: 

  1. 请打开场景的配置面板。
  2. Browser Playback Options 选项卡中,选择 Headless 选项。

通过在无数据头模式下运行测试,你可以在不需要打开和关闭浏览器窗口的情况下工作。

Linux 配置

若要在 Linux 中以无数据头模式运行 web 场景,则 SOAtest 创建其自己的隐藏 X 显示。SOAtest 使用 X 服务器 Xvfb 创建一个不需要显示硬件的虚拟 framebuffer。SOAtest 安装包括一个用于 Linux 的 Xvfb 副本(文件 Xvfb_Linux)。如果该副本存在,则将使用系统安装的 Xvfb。SOAtest搜索以下路径,顺序如下:

/usr/bin/Xvfb
/usr/X11R6/bin/Xvfb /usr/X/bin/Xvfb
/usr/openwin/bin/Xvfb

如果你的发行版不提供 Xvfb,那么 SOAtest 将使用它自己的 Xvfb 副本。这可能需要以命令行参数的形式进行一些配置。下面介绍如何配置由 SOAtest 提供的 Xvfb,以便从适当的参数开始。

如果 SOAtest 不能启动 Xvfb,那么它将在系统环境变量 $DISPLAY 指定的显示中运行浏览器。换句话说,如果你从 SOAtest GUI 启动测试,浏览器将出现在与 GUI 相同的显示中,并且 SOAtest 将从 Xvfb 输出任何启动错误消息到控制台视图。如果你正在从命令行运行测试,而没有可用的显示,那么 SOAtest 将无法启动 Firefox;因此,任何 web 场景都会失败。

让 Xvfb 独立于 SOAtest 工作 

若要让 Xvfb 在从 SOAtest 调用时工作,首先让 Xvfb 独立于 SOAtest 工作。

(1)启动 Xvfb 显示 :20。

如果 :20 不可用,则使用另一个显示参数。

$ cd /path/to/soatest/plugins/com.parasoft.xtest.libs.web_[version]/root
$ ./Xvfb_Linux :20 -ac

如果得到任何错误消息,你将需要为各种与 X 相关的文件的位置指定命令行参数,这些文件的位置将取决于你的发行版。在 Fedora Core 上尝试 Xvfb_Linux 时,错误信息如下: 

Couldn't open RGB_DB '/usr/X11R6/lib/X11/rgb'
error opening security policy file /usr/X11R6/lib/X11/xserver/SecurityPolicy
Could not init font path element /usr/X11R6/lib/X11/fonts/misc/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/Speedo/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/Type1/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/CID/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/75dpi/, removing from list!
Could not init font path element /usr/X11R6/lib/X11/fonts/100dpi/, removing from list!

致命服务器错误:
无法打开默认字体 'fixed'

(2)查找必要的 X 服务器文件,添加命令行参数,成功启动 Xvfb。 

这就是 Fedora Core 的工作原理:

$ ./Xvfb_Linux -ac -sp /usr/lib/xserver/SecurityPolicy -fp /usr/share/X11/fonts/misc -co /usr/share/X11/rgb -screen 0 1024x768x24 :20

虚拟帧缓冲区现在正在 display :20 上运行。

(3)在创建的屏幕上运行一个简单的 X 应用程序。

$ xclock -display :20 &

通过转储 display:20 的图像并查看图像,验证时钟在 display:20 中是否可见。

$ xwd -display :20 -root | xwud

你应该查看钟。有关 xwd(1) 和 xwud(1) 的更多信息,请参阅各自的手册页。

(4)在创建的屏幕上运行 Firefox。

$ firefox --display :20

使用相同的 xwd/xwud 命令来验证 Firefox 是否在虚拟帧缓冲区中运行。

$ xwd -display :20 -root | xwud

如果你可以使用 Xvfb 创建 X 显示,但是 Firefox 无法在这个虚拟帧缓冲器上运行,那么你可能需要更新 SOAtest 外部的各种库。例如,发行版提供的过时 Cairo 库(用于 2D 图形)会在 Linux 上引起问题。如果你对 Cairo 有问题,请确保虚拟帧缓冲器使用的显示深度大于 8 位,因为这将解决一个常见问题。如果问题一直存在,则可能需要更新库本身。

让 Xvfb 与 SOAtest 一起工作 

一旦确定了需要传递给 Xvfb 的参数,就可以在 SOAtest 中使用这些参数。为此,创建一个名为 Xvfb_Linux 的 shell 脚本,该脚本使用必要的参数调用 Xvfb。然后,SOAtest 将在尝试启动 Xvfb 时运行 shell 脚本。 

(1)在 /path/to/soatest/plugins/com.parasoft.xtest.libs.web_[version]/root rename Xvfb_Linux to Xvfb_Linux.bin中。

$ mv Xvfb_Linux Xvfb_Linux.bin

(2)创建一个 shell 脚本 Xvfb_Linux.sh,它将使用适当的参数运行 Xvfb_Linux.bin。 

这就是 Fedora Core 的工作原理:

-----
#!/bin/sh
 
# Use $@ to pass along any argument specified by SOAtest.
# The $@ will include the display on which to run the server. 
# Currently this is always display :32.  You can override this 
# by adding another display number as the last argument.
 
# There can be problems with graphics libraries if you do 
# not set the display depth to greater than 8 using the 
# -screen argument.
 
# Make sure to run Xvfb with 'exec' so that SOAtest will 
# kill the correct process.
 
XVFB_DIR=`dirname $0`
exec ${XVFB_DIR}/Xvfb_Linux.bin \
  -ac \
  -sp /usr/lib/xserver/SecurityPolicy \   -fp /usr/share/X11/fonts/misc \
  -co /usr/share/X11/rgb \
  -screen 0 1024x768x24 \
  $@
 
-----

(3)创建到 Xvfb_Linux.sh 的符号链接。

$ ln -s Xvfb_Linux.sh Xvfb_Linux

当 SOAtest 运行 Xvfb_Linux 时,它将运行将适当的参数传递给 Xvfb_Linux.bin 的脚本。

或者,你可以将脚本命名为 Xvfb_Linux。但是,使用符号链接可以更容易地区分安装了什么 SOAtest 和创建了什么来运行安装的 Xvfb。

(4)以无数据头模式运行 web 场景。 

当 SOAtest 运行该场景时,使用 ps(1) 检查 Xvfb_Linux.bin 是否正在运行,然后再次使用 xwd/xwud 验证 Firefox 是否正在运行。(SOAtest 将在 Firefox 完成测试运行后立即关闭它。)

$ ps -ef | grep Xvfb
$ xwd -display :32 -root | xwud

如果你将 Xvfb 配置为在不同的显示器上运行,那么在调用 xwd(1) 时使用它。

  • No labels