共计 6706 个字符,预计需要花费 17 分钟才能阅读完成。
Docker 现在是 Linux® 发行版的一个基本组件。因此,所有系统供应商在集成测试期间都需要验证内核稳定性,这很重要。通过在相同主机上的不同 Linux 发行版中运行,Docker 可以帮助验证标准回归测试。这样就可以通过在一个全自动的测试框架中运行测试,帮助显著简化 VM 基础架构和缩短测试周期。理解在容器内运行的标准测试框架和测试套件的行为也很重要。
本文将介绍如何让软件测试自动化框架 (Software Testing Automation Framework, STAF) 和 Linux 测试项目 (Linux Test Project, LTP) 测试框架在 Docker 容器内运行。这些 Docker 容器在 IBM® Power Systems™ 上的受支持 Linux 发行版上运行。STAF 和 LTP 框架是一个被广泛使用的回归测试组合,用于验证 Linux 发行版上的 Linux 内核和 glibc 组件的行为。
软件测试自动化框架 (STAF)
软件测试自动化框架 (STAF) 是一个开源框架,它包含一组特别适合构造自动化解决方案的内置服务。服务是可重用的组件,它们提供了 STAF 中的所有功能。每个 STAF 服务都提供了一组特定功能,比如日志记录和监视、文件系统操作、进程调用,以及资源管理。
STAF 执行引擎 (STAX) 是另一个基本组件,它基于 STAF、XML 和 Python 而构建,用于自动化测试案例的工作负载分布、执行、结果分析和并行处理。
Linux 测试项目 (LTP)
Linux 测试项目 (LTP) 是一个开源自动化内核测试套件,被设计用于验证 Linux 的可靠性、稳健性和稳定性。它主要关注 Linux 内核和相关特性的功能、回归和压力测试。
Docker
Docker 是一个基于 Linux 容器的开源项目。它使用命名空间和控制组等 Linux 内核特性在操作系统上创建容器。
前提条件
本节列出了在 Docker 中运行 STAF 和 LTP 需要满足的前提条件。
操作系统级别要求
要安装 Docker,需要 64 位版的 Linux 内核。受支持的 Linux 发行版如下:
- Ubuntu – Trusty 14.04、Xenial 16.04、Yakkety 16.10 及更高版本
- SLES – SLES 12.x 及更高版本
- RHEL – RHEL 7 及更高版本
开源镜像
要创建 LTP 镜像和 STAF 镜像,需要以下资源:
- LTP 测试套件
- 最新的 STAF/STAX 源代码
- 开源 Java
- 示例 ltp.xml 文件
如何构建 STAF 和 LTP Docker 镜像
本节将介绍构建 Docker 镜像的两种方法。第一种方法将介绍如何在容器内手动安装、配置和启动所需的 STAF 和 LTP 服务,并使用 docker commit
命令提交它们。这是第一次配置任何在 Docker 中运行的新软件的首选方法。
第二种方法使用了 Docker 文件来自动配置第一部分中介绍的步骤。这是大多数 Docker 部署项目都在使用的推荐方法。但是,第一种方法的目的是在第一次执行配置时解决依赖关系和其他挑战。
使用 Docker commit 创建 Docker 镜像
安装前面提到的所有 Linux 发行版后,执行以下步骤来创建一个 Docker 镜像:
- 通过运行以下命令来创建该容器:
docker run -i -t --privileged --name=ltptest --hostname=ltptest ppc64le/ubuntu /bin/bash
- 下载 LTP 测试案例并复制到该容器。
在主机上完成以下步骤,以便下载并构建 LTP 测试桶,然后将 LTP 测试案例复制到 Docker 容器:- 从 http://linux-test-project.github.io/ 将最新的稳定 LTP 测试套件下载到主机。本例中下载了 ltp-full-20160920。
- 运行以下命令来解压 tar.gz 或 .bz2 ltp 包。运行该命令后,可以在 ltp-full-20160920 中的 INSTALL 文件中看到安装过程的更多信息。
tar jxvf ltp-full-20120104.tar.bz2 or tar zxvf ltp-full-20120104.tar.gz
- 运行以下命令,以便更改到 LTP 目录:
cd ltp-full-20160920
- 运行以下命令来检查配置选项:
./configure --help
- 运行以下命令,以便在 IBM Power Systems 服务器上构建 64 位 LTP:
[ltp-full-20160920]# ./configure --prefix=`pwd` --with-open-posix-testsuite CC="gcc - m64"
[ltp-full-20160920]# make all
[ltp-full-20160920]# make install
- 将 LTP 测试案例复制到该容器。
测试案例在主机中的位置:/root/ltp-full-20160920cd /root/ltp-full-20160920
docker cp . ltptest:/usr/local/ltp
- 要下载、配置并在容器内启动 STAF,请完成以下步骤:
- 访问 https://sourceforge.net/projects/staf/files/ 链接,分别从 staf 和 stax 目录下载 STAF 和 STAX 文件。
例如,所需的文件是 STAF3425-setup-linux-ppc64le.bin 和 STAXV3517。 - 运行以下命令来解压 STAX:
tar -xvf STAXV3517.tar
- 运行以下命令,将 STAF3425-setup-linux-ppc64le.bin 和 STAX 从主机复制到容器:
docker cp STAF3425-setup-linux-ppc64le.bin <
container-id
>:/root/
docker cp stax <
container-id
>:/root/
从步骤 d 开始,需要在 Docker 容器内继续操作。
docker exec -it container_id /bin/bash
- 运行以下命令来安装 STAF:
apt-get install -y unzip (pre-req to help STAF install) ./root/STAF3425-setup-linux-ppc64le.bin -i silent -DACCEPT_LICENSE=1
- 运行以下命令,以便在 /usr/local/staf/services 下创建一个目录:
mkdir -p /usr/local/staf/ services
- 运行以下命令,以便将解压的 stax 复制到上面的 services 目录:
cp -r ./stax /usr/local/staf/services/
- 将以下行添加到 /usr/local/staf/bin/STAF.cfg 文件中。
SERVICE STAX LIBRARY JSTAF EXECUTE /usr/local/staf/services/stax/STAX.jar \
PARMS "EVENTGENERATION Disabled LOGTCNUMSTARTS Disabled LOGTCELAPSEDTIME Disabled LOGTCSTARTSTOP Disabled NUMTHREADS 10" OPTION JVMName=STAFJVM1 OPTION J2=-Xmx1024m
SERVICE EVENT LIBRARY JSTAF EXECUTE /usr/local/staf/services/stax/STAFEvent.jar
- 删除所有旧 Java 版本(如果有)。
- 运行以下命令来安装开源 Java:
apt-get install -y default-jre
apt-get install -y openjdk-8-jre
- 将以下行添加到 /etc/profile.d/staf.sh 文件中。此外,还要将它添加到 /root/.bashrc 中。
base_java_path='/usr/lib/jvm/java-8-openjdk-ppc64el/jre/bin'
java_path=''
in_string=`export | grep PATH`
in_string1=`echo "$in_string" | grep "declare -x PATH="`
string=`echo "$in_string1" | grep "/usr/local/staf/bin"`
if [! $? = 0]; then
PATH=/usr/local/staf/bin:$PATH
fi
string=`echo "$in_string1" | grep "/usr/local/staf/tools"`
if [! $? = 0]; then
PATH=/usr/local/staf/tools:$PATH
fi
string=`echo "$in_string1" | grep $java_path`
if [! $? = 0]; then
PATH=$java_path:$PATH
fi
in_string1=`echo "$in_string" | grep "declare -x CLASSPATH="`
string=`echo "$in_string1" | grep "/usr/local/staf/lib/JSTAF.jar"`
if [! $? = 0]; then
CLASSPATH=/usr/local/staf/lib/JSTAF.jar:$CLASSPATH
fi
string=`echo "$in_string1" | grep "/usr/local/staf/services/STAX.jar"`
if [! $? = 0]; then
CLASSPATH=/usr/local/staf/services/STAX.jar:$CLASSPATH
fi
string=`echo "$in_string1" | grep "/usr/local/staf/services/STAFEvent.jar"`
if [! $? = 0]; then
CLASSPATH=/usr/local/staf/services/STAFEvent.jar:$CLASSPATH
fi
string=`echo "$in_string1" | grep "/usr/local/staf/services/STAXMon.jar"`
if [! $? = 0]; then
CLASSPATH=/usr/local/staf/services/STAXMon.jar:$CLASSPATH
fi
string=`echo "$in_string" | grep "declare -x LD_LIBRARY_PATH=" | grep "/usr/local/staf/lib"`
if [! $? = 0]; then
LD_LIBRARY_PATH=/usr/local/staf/lib:$LD_LIBRARY_PATH
fi
STAFCONVDIR=/usr/local/staf/codepage
export PATH CLASSPATH LD_LIBRARY_PATH STAFCONVDIR
setsid /usr/local/staf/bin/STAFProc >/tmp/STAFProc.out 2>&1 &
set -o vi
- 退出容器并再次登录。
- 访问 https://sourceforge.net/projects/staf/files/ 链接,分别从 staf 和 stax 目录下载 STAF 和 STAX 文件。
- 下载示例 XML 文件并将其复制到容器所在位置:
/usr/local/staf/xml/ltp.xml。
可以从 sourceforge.net 网站或 github 存储库下载 ltp.xml 文件。
- https://sourceforge.net/projects/ltp/files/Utilities/%5BUnnamed%20release%5D/
- https://github.com/ibmsoe/Dockerfiles/tree/master/ltp_staf
- 使用 STAF 在容器内启动 LTP 测试:
STAF local STAX execute file /usr/local/staf/xml/ltp.xml JOBNAME ltpstaf
- 运行以下命令,以便从主机提交 Docker 镜像:
docker commit <
container
ID> <
repo
name>
使用 Dockerfile 创建 Docker 镜像
Dockerfile 完成设置 STAF 框架所需的配置。Dockerfile 还会完成从 STAF 框架内运行 LTP 测试桶所需的配置。
使用从 Dockerfile 构建的镜像启动容器时,会使用 STAF 框架启动 LTP 测试。
可以在 github 存储库中找到 Dockerfile、其他配置文件,以及有关如何创建 ltp_staf Docker 容器的细节:https://github.com/ibmsoe/Dockerfiles/tree/master/ltp_staf。
执行以下步骤来构建镜像:
- 运行以下命令,以便克隆 https://github.com/ibmsoe/Dockerfiles/tree/master/ltp_staf 网站中的 ltp_staf 目录:
gitclone
https://github.com/ibmsoe/Dockerfiles/tree/master/ltp_staf
- 运行
cd /STAF_LTP
命令来更改目录。 - 运行
docker build -t <image_name>
命令来构建 Docker 镜像。
监视 LTP 测试
要监视在容器内运行的测试,可以使用以下原生 STAF 命令。
docker exec -it < container_id > /bin/bash STAF LOCAL STAX LIST JOBS STAF LOCAL STAX LIST JOB < job ID> testcases |
备注 :测试案例结果位于 Docker 容器内的 /var/log/staf/ltp 位置。
免责声明
完整的 LTP 测试套件未经过测试,也未包含在本项目中。本项目仅展示了在 IBM Power Systems 服务器上启用 Docker、LTP 和 STAF 的部分。
以下是本项目包含的 LTP 测试案例。
表 1. LTP 测试案例
Admin_tools | Stress.part2 | Io_floppy | Nw_under_ns |
Can | Stress.part3 | ipc | Pipes |
Cap_bounds | Syscalls | tracing | Power_management_tests |
Commands | Syscalls-ipc | Kernel_misc | Tom_tools |
Connectors | Timers | Ltp-aiodio.part1 | makefile |
Containers | Fs_ext4 | Ltp-aiodio.part2 | Pty |
Controllers | Fs_perms_simple | Ltp-aiodio.part3 | quickhit |
Cpuhotplug | Fs_readonly | Ltp-aiodio.part4 | Rpc_tests |
Dio | fsx | Ltp-aio-stress.part1 | Sched |
Dma_thread_diotest | hugetlb | Ltp-aio-stress.part2 | Scsi_debug.part1 |
fcntl-locktests | hyperthreading | mm | sercurebits |
fliecapts | ima | modules | smack |
fs | io | nptl | Lvm.part2 |
Fs_bind | Io_cd | numa | |
Stress.part1 | math | Tirpc_tests | |
ltplite | Lvm.part1 |
示例 XML (ltp.xml) 文件中包含 syscalls、fs、fsx、dio、mm、commands、ipc、sched、pty 和 math 测试案例。我们还修改了该 XML 文件,以包含上述测试案例。编辑 ltp.xml 文件中的 RUNTEST
变量。
例如:
"RUNTEST" default="['lvm.part2','power_management_tests','power_management_tests_exclusive','quickhit','scsi_debug.part1','securebits','smack','stress.part2','stress.part3']" |
备注 :在 LTP、STAF、STAX 和 Java 构建版本发生变化时,这些目录也会发生相应变化。如果系统位于私有网络中,您需要添加相关的代理或存储库。
致谢
感谢 Linux 技术中心的 STSM、Power 云和 Docker 架构师 Pradipta K Banerjee,他为本文的发表提供了许多指导和帮助。
相关参考资料
- LTP
- STAF
- ltp.xml 文件
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-10/148035.htm