测试工具
测试文档中文官网不提供,如您有需要请前往podman官方github查询。本站仅做一篇文档作为介绍,感谢你对本站的支持和厚爱!祝你阖家欢乐,万事如意.podman官方github仓库
测试工具提供了一些用于测试的通用函数和结构。它包括两个结构体:
PodmanTest
:处理podman命令和其他全局资源,如临时目录。它提供了基本方法,如检查podman镜像和pod状态。测试套件应该创建自己的测试结构体作为PodmanTest
的复合体,并创建自己的PodmanMakeOptions()
。PodmanSession
:存储执行会话数据和相关方法。例如,获取命令输出等。它可以直接在测试套件中使用,如果你需要扩展它,只需要将其嵌入到你的会话结构体中。
test/utils 的单元测试
为了确保测试和工具不会崩溃,test/utils
中的每个函数和结构体都有单元测试。当您向此包添加函数或结构体时,请同时更新它们的单元测试以及此文档。
运行 test/utils 的单元测试
运行test/utils
的单元测试。
make localunit
测试工具和测试套件的结构
测试工具包与测试套件处于同一级别。每个测试套件也都有它们自己的通用函数和结构体,存储在libpod_suite_test.go
中。
Ginkgo 测试框架
Ginkgo是一个BDD测试框架。这允许我们使用原生的Golang来执行我们的测试,并且Ginkgo与Go测试框架之间有着密切的联系。
安装依赖项
成功运行测试需要一些外部二进制文件。测试目前依赖于:
- 正常的podman运行时依赖项
- coreutils
- ncat
- gzip
- xz
- htpasswd
- iproute2
- iptables
- util-linux
- tar
- docker
- systemd/systemctl
其中大多数只用于少数几个测试,因此如果没有安装所有内容,问题也不大。只有少数几个测试可能会失败。
安装 Ginkgo
通过以下命令构建并安装 Ginkgo 到 ./test/tools/build/ginkgo
目录下:
make .install.ginkgo
集成测试
集成测试套件用于测试 podman 命令行。它有自己的结构体:
PodmanTestIntegration
:集成测试结构体,作为PodmanTest
的复合体。它设置了podman命令的全局选项,以忽略不同测试系统环境的影响。PodmanSessionIntegration
:这个结构体有自己的方法,用于使用inspect包中定义的结构体检查以JSON格式给出的命令输出。
运行集成测试
你可以使用以下命令运行整个集成测试套件:
make localintegration
要运行远程测试,请使用:
make remoteintegration
测试变量
有些测试只能以非root用户身份运行,而有些测试只能以root身份运行。因此,要测试所有内容,你应该确保以普通用户和root身份运行上述make命令。
测试设置支持以下环境变量:
-PODMAN_BINARY
:podman二进制文件的路径,默认为仓库根目录中的bin/podman
。
-PODMAN_REMOTE_BINARY
:podman-remote二进制文件的路径,默认为仓库根目录中的bin/podman-remote
。
-QUADLET_BINARY
:quadlet二进制文件的路径,默认为仓库根目录中的bin/quadlet
。
-CONMON_BINARY
:conmon二进制文件的路径,默认为/usr/libexec/podman/conmon
。
-OCI_RUNTIME
:要使用的OCI运行时,默认为crun
。
-NETWORK_BACKEND
:网络后端,可以是netavark
(默认)或cni
。
-PODMAN_DB
:数据库后端sqlite
(默认)或boltdb
。
-PODMAN_TEST_IMAGE_CACHE_DIR
:容器镜像应缓存的路径,默认为/tmp
。
运行单个集成测试文件
你可以使用go test命令来运行单个集成测试文件:
make localintegration FOCUS_FILE=your_test.go
FOCUS_FILE
选项映射到 ginkgo 的 --focus-file
参数,关于接受的语法,请查阅 ginkgo 的
文档。
对于远程测试,请使用 remoteintegration
Makefile 目标。
运行单个集成测试
在运行测试套件之前,你需要在测试文件中声明要运行的测试。考虑以下实际的测试:
It("podman inspect bogus pod", func() {
session := podmanTest.Podman([]string{"pod", "inspect", "foobar"})
session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError())
})
要将此测试标记为要运行的测试,只需将 It 的描述更改为 FIt。请注意 F
和 I
都需要大写。同时,请查看 ginkgo 的
文档 以获取更多信息。
注意:在提交更改之前,请确保从测试中移除 F
,否则除了使用 FIt
表示的测试之外,您将会跳过该文件中的所有其他测试。
另一种方法是使用 FOCUS
选项,它映射到 --focus
,再次查看 ginkgo 的
文档 以获取更多关于语法的信息。
make localintegration FOCUS="podman inspect bogus pod"
控制 Ginkgo 参数
您可以控制传递给 Ginkgo 的一些参数:
-通过设置 GINKGO_PARALLEL=n
来禁用并行测试
-设置 flake 重试次数(默认为 3)为 1,通过设置 GINKGO_FLAKE_ATTEMPTS=1
-通过设置 GINKGO_NO_COLOR=n
来生成彩色测试报告
系统测试
系统测试用于在完整的系统上下文中测试 podman CLI。这需要 podman、所有依赖项和配置都已到位。系统测试的意图是尽可能紧密地匹配真实世界用户/开发者的用例和环境。环境和测试的编排留给了外部工具。
系统测试使用 Bash 自动化测试系统(bats
)作为测试框架。您可以通过包管理器安装它,或者从
存储库 直接获取最新的稳定版本,例如:
mkdir -p ~/tools/bats
git clone --single-branch --branch v1.1.0 https://github.com/bats-core/bats-core.git ~/tools/bats
请确保 bats
二进制文件(在存储库中的 bin/bats
)位于您的 PATH
中,如果不是,请添加它:
PATH=$PATH:~/tools/bats/bin
系统测试还依赖于 jq
、socat
、nmap
和其他工具。对于完整的工具列表,请查看
Fedora specfile 中的 %package tests
部分。
运行系统测试
当 bats
安装完成并位于您的 PATH
中时,您可以使用以下命令运行测试套件:
make localsystem
以更受控的方式运行系统测试
如果您希望运行系统测试的子集,或配置环境(例如,root 与非 root,本地与远程),请使用 hack/bats
。
要查看用法,请运行:
hack/bats --help
为系统测试做出贡献
请查看 需要的工作流/测试的 TODO 列表。