执行容器测试框架的简单命令行工具
项目描述
容器测试框架(CTF)是Behave测试框架的一个简单包装器。Behave 是一种针对测试容器的有前途的方法,因为它允许您从高层次和简单的英语描述容器的行为。有关如何使用Behave以及如何使用Behave编写测试的更多信息,请参阅Behave项目页面。
CTF试图重用来自UATFramework的远程执行步骤模型,以便可以在本地或远程机器或虚拟机上执行测试。该支持仍在进行中。
CTF提供:
在Dockerfile和镜像上运行测试的方法
运行项目特定测试(步骤和功能)的方法
组合存储在远程存储库中的多个测试(步骤和功能)
能够在没有特定项目测试套件的情况下,在特定的Dockerfile和/或镜像上运行远程测试的能力
如何使用此框架对您的容器进行测试?
如果您想实现项目特定测试,您应该在项目目录内创建以下目录结构 my_project_dir
my_project_dir/ tests/ features/ my_cool.feature my_other_cool.feature steps/ my_cool_steps.py my_other_cool_steps.py environment.py tests.conf
利用框架的最佳方式是将一组容器中通用的功能和步骤实现为远程测试,然后将其包含在所有容器的测试配置中。
features/
将任何特定于您容器的功能和场景放在此目录中。您的场景可以使用 tests/steps 目录中实现的任何步骤,或来自 tests.conf 文件中列出的任何远程测试中的步骤。CTF CLI 工具将把这些步骤组合起来,以便 Behave 在运行时能够找到它们。
steps/
将任何特定于您功能的步骤放在此目录中。为了确保步骤可以在远程机器或本地执行,始终使用 context.run() 来运行任何命令。在后台,命令将根据 CLI 配置在本地或远程机器上运行。
CLI 工具在执行 Behave 时将一些运行时参数传递给它。这些值可以通过作为对象存在于 context.config.userdata 字典中的上下文来获取。有关更多信息,请参阅 Behave 文档。以下值被传递
DOCKERFILE
此选项包含要测试的 Dockerfile 的绝对路径。它始终被设置。
IMAGE
此选项包含要测试的镜像的名称。只有当使用 -i 选项将名称传递给 CLI 工具时,它才会被传递和设置。
tests.conf
tests.conf 文件包含配置信息,告诉 CTF 在使用 Behave 测试容器时包括哪些额外的远程测试(步骤和功能)。它是一个简单的 INI 文件。每个远程测试都需要有它自己的部分,并在部分内部指定 Steps 和 Features 选项。这些选项必须指向包含适当的步骤和功能的远程 Git 仓库。示例 tests.conf
[common-tests] Steps=https://github.com/Containers-Testing-Framework/common-steps.git Features=https://github.com/Containers-Testing-Framework/common-features.git
environment.py
您可以在该文件中实现 Behave 通常使用的任何方法。它们将与 CTF 的通用 environment.py 文件结合。您的函数将在 CTF 钩子之前被调用。
入门
要求
git
behave >= 1.2.5
ansible
安装
克隆仓库
git clone https://github.com/Containers-Testing-Framework/ctf-cli.git
可选:克隆一个示例仓库
git clone https://github.com/Containers-Testing-Framework/example-project-postgresql.git
切换到 ctf-cli 目录
cd ctf-cli
安装 Python 依赖项
[sudo] pip install -r requirements.txt
复制示例配置文件并按需编辑
cp ctf.conf.sample ctf.conf cp tests.conf.sample tests.conf
切换到项目目录并获取通用功能
cd example-project-postgresql ../ctf-cli/ctf-cli.py remote add features https://github.com/Containers-Testing-Framework/common-features.git
运行测试
../ctf-cli/ctf-cli.py run
CLI 工具
框架的关键部分是名为 ctf-cli 的 CLI 工具。它收集信息,读取配置,为 Behave 设置环境并运行它。目前 ctf-cli 工具仅支持使用 ansible 在某些主机上运行命令。要运行您的测试,请确保您在 ctf-cli 配置中包含了 ansible 的配置。
配置文件
您可以使用 -c 或 --cli-config 选项在命令行上传递配置文件的路径。如果没有提供,则工具会按照以下顺序尝试找到配置
当前目录中的 ctf.conf
用户主目录 ~/ctf.conf 中的 ctf.conf
用户主目录 ~/ctf/ctf.conf 中的 ctf.conf
系统配置目录中的 ctf.conf (位于 /etc/ctf.conf)
配置必须包含 Ansible 的配置。在使用主机之前,您需要手动设置主机环境,然后才能运行 ctf-cli(例如,设置 SSH 密钥等)。以下是在 ctf.conf 中配置 Ansible 的示例:
[ansible] Host=127.0.0.1 User=root Method=ssh
用法
应在包含 Dockerfile 的项目目录下执行 ctf-cli。您可以将一些选项传递给 CLI 工具:
-h,--help - 打印帮助信息并退出
-v,--verbose - 使输出更加详细(推荐)
-c CLI_CONFIG_PATH,--cli-config CLI_CONFIG_PATH - CLI 配置文件的路径(默认:'/etc/ctf-cli.conf')
-t TESTS_CONFIG_PATH,--tests-config TESTS_CONFIG_PATH - 测试配置文件的路径。默认情况下,将在 tests/ 目录中搜索
-f DOCKERFILE,--dockerfile DOCKERFILE - 要使用的 Dockerfile 的路径。如果不传递,将在当前目录中搜索
-i IMAGE,--image IMAGE - 用于测试的镜像。如果不传递,将从 Dockerfile 构建镜像
它是如何工作的?
当在 my_proj_dir 项目目录中执行 ctf-cli 时,会发生以下情况:
读取 CLI 工具配置。
在目录中搜索 tests/ 目录。
在 tests/ 目录中搜索 tests.conf 配置。
在当前目录内创建一个工作目录 my_proj_dir-behave-working-dir。
在工作目录内创建 features 和 steps 目录。
将项目特定的功能复制到工作目录中的 features/my_proj_dir_features。
将项目特定的步骤复制到工作目录中的 steps/my_proj_dir_steps。
如果 tests/ 中存在 environment.py,则将其复制到工作目录中,作为 my_proj_dir_environment.py。
如果 tests.conf 中包含一些远程测试,它们的特征和步骤将以与(6)和(7)中本地文件类似的方式克隆到工作目录中。
确保工作目录中 steps/ 内的所有子目录都包含 __init__.py。
在工作目录的 steps/ 中创建 steps.py,它从所有步骤文件中导入一切。
在工作目录中创建 environment.py,它包含 CTF 公共方法,并在存在的情况下包含项目特定的 environment.py 文件。
在当前目录内使用所有必要的运行时参数运行 Behave。
进一步开发的想法
CLI 工具执行的操作可以分离(准备工作目录、更新工作目录、运行测试)。这允许在需要时执行部分工作流程。
使用特定提交的远程测试。这可以防止当有人破坏跨多个容器共享的测试时产生意外。
测试容器组合。思路是为容器打上一些角色标签(例如 @webserver, @database, ...),然后在步骤中根据这些标签访问这些容器。这样,任何 web 服务器都可以与任何数据库进行测试,依此类推。
将框架与某些 CI 集成
添加对除 Ansible 之外的其他远程运行命令方式的支持
添加远程主机配置、启动、停止功能
支持云、虚拟机、Vagrant 虚拟机等
已做出决定
我们将选择子模块而不是 tests.conf
不能期望用户直接调用 git - 需要的功能必须由 CTF 包装
应将远程功能/步骤添加到 tests/remote/… 中,以避免与项目特定的功能/步骤冲突
我们需要导出和导入命令来导出和导入当前项目测试设置的共享
我们不能期望该项目使用 git(也许如果不使用 git,只在使用测试/目录时创建 git 仓库?)
tests.conf 将被弃用,因为它目前正在使用
“生成”的环境.py 应保持清洁,所有容器特定代码应移至其他地方。
参考资料
项目详情
ctf-cli-1.0.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 33391f162dd0128ed9fadd6076d42a58390b8d9175e5d3da88af7626d94bc5a0 |
|
MD5 | 118eff09efd41a7670c546406048cb8f |
|
BLAKE2b-256 | 73ad42e13d65bc597203f915030436e01f6d7e83150a22db3adb3094904dfea2 |