注意
本文档适用于 Ceph 开发版本。
测试 - 单元测试
Ceph GitHub 存储库有两种类型的测试:单元测试(也称为make check
测试)和集成测试。严格来说,集成测试并不是“单元测试”,而是编译 Ceph 源代码后可以在单个构建机器上轻松运行的测试,而集成测试需要安装软件包和多机集群才能运行。make check
tests are not “unit tests”, but rather tests that can be run
easily on a single build machine after compiling Ceph from source, whereas
integration tests require package installation and multi-machine clusters to
run.
“make check” 是什么意思?
编译 Ceph 后,代码可以通过一系列测试运行。由于历史原因,这通常被称为make check
,尽管实际用于运行测试的命令现在是ctest
。要包含在这组测试中,测试必须:
绑定与其他测试不冲突的端口
不需要 root 权限
不需要一台以上的机器来运行
几分钟内完成
为了简单起见,这类测试被称为“make check 测试”或“单元测试”。这是为了区别于通过teuthology 框架运行的更复杂的“集成测试”.
虽然可以直接运行ctest
,但正确设置环境可能很棘手。幸运的是,有一个脚本可以轻松地在你的代码上运行单元测试。该脚本可以通过在 Ceph 源代码树的顶层目录中调用以下命令来运行:
./run-make-check.sh
要成功完成此命令,在 x86_64 架构上,您至少需要 8GB 的 RAM 和 32GB 的可用磁盘空间;其他架构可能有不同的要求。根据您的硬件配置,完成时间可能从二十分钟到三小时不等。
如何声明单元测试
单元测试在CMakeLists.txt
文件中声明,该文件位于./src
目录中添加一个 Ceph 条目。可以使用add_ceph_test
和add_ceph_unittest
CMakeadd_ceph_test
和add_ceph_unittest
它们本身在./cmake/modules/AddCephTest.cmake
.
中定义。
add_ceph_test
function - 用于声明单元测试脚本add_ceph_unittest
function - 用于单元测试二进制文件
命令行工具的单元测试
一些命令行工具使用以.t
扩展名结尾的特殊文件进行测试,这些文件存储在./src/test/cli
下。这些测试使用名为cram via a shell script called ./src/test/run-cli-tests
.
cram不适合make check
的测试也可以通过cram 任务使用 teuthology 运行。.
基于 Tox 的 Python 模块测试
Ceph 中的一些 Python 模块使用tox来运行它们的单元测试。
这些 Python 模块大多位于./src/pybind/
.
目录中。tox:
Cephadm (
./src/cephadm/tox.ini
)Ceph 管理器 Python API (
./src/pybind/mgr
)./src/pybind/mgr/tox.ini
./src/pybind/mgr/dashboard/tox.ini
./src/pybind/tox.ini
仪表板 (
./src/pybind/mgr/dashboard
)Python 常用 (
./src/python-common/tox.ini
)CephFS (
./src/tools/cephfs/tox.ini
)ceph-volume
./src/ceph-volume/tox.ini
./src/ceph-volume/plugin/zfs/tox.ini
./src/ceph-volume/ceph_volume/tests/functional/batch/tox.ini
./src/ceph-volume/ceph_volume/tests/functional/simple/tox.ini
./src/ceph-volume/ceph_volume/tests/functional/lvm/tox.ini
配置 Tox 环境和任务
大多数 tox 配置支持多个环境和任务。
支持的环境和任务的列表位于tox.ini
文件中的envlist
下。例如,以下是./src/cephadm/tox.ini
:
[tox]
envlist = py3, mypy
skipsdist=true
在此示例中,Python 3
和mypy
环境指定的前三行。
可以使用以下命令获取环境列表:
tox --list
或:
tox -l
运行 Tox
要运行tox,只需在包含tox
。如果您未指定任何环境(例如,tox.ini
的目录中执行-e
$env1,$env2
),则tox
将运行所有环境。Jenkins 将通过执行tox
这里有一些来自 Ceph 仪表板的示例,展示了如何指定不同的环境和运行选项:./src/script/run_tox.sh
.
运行
## Run Python 2+3 tests+lint commands:
$ tox -e py27,py3,lint,check
## Run Python 3 tests+lint commands:
$ tox -e py3,lint,check
## To run it as Jenkins would:
$ ../../../script/run_tox.sh --tox-env py3,lint,check
管理器核心单元测试
目前只运行doctests inside mgr_util.py
。
要在管理器核心中添加更多要测试的文件,请打开tox.ini
文件,并将要测试的文件添加到包含mgr_util.py
.
单元测试注意事项
与各种 Ceph 守护进程和
ceph-fuse
不同,除非明确链接到其他内容,否则单元测试会链接到默认的内存分配器(glibc)。这使工具如valgrind能够在测试中使用。Google Test 单元测试库会隐藏客户端输出。为了在设置所需的调试级别(例如
ceph config set client debug_rbd 20
)后调试客户端,调试日志文件可以在build/out/client.admin.<pid>.log
找到。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.