用途
Drupal Testing 是一个面向 Drupal 实现的实用验证技能,旨在确认开发或配置后的 Drupal 功能是否真正工作,而不是仅凭代码假设。它提供一组可复用的测试模式,覆盖 HTTP 访问、服务注册、模块启用、字段定义、配置值、权限和路由等常见验证点。
主要能力
- 环境自动检测:通过命令检测 DDEV 或 Lando 是否可用,并设置
DRUSH和EXEC执行前缀;未检测到容器环境时回退到本地drush和bash -c。 - Curl 烟雾测试模式:包括状态码与响应大小检查(要求登录 URL 与 curl 在同一 shell 中执行以保持会话 cookie 有效)、下载完整 HTML 以供检查、提取特定内容(如
<title>)。 - 可复用测试脚本模板:提供带
set -e、cookie 文件管理、状态码断言和清理逻辑的 bash 模板。 - Drush eval 验证模式:覆盖服务是否存在、模块是否启用、实体字段是否定义、配置值读取、权限是否定义、路由是否可生成等场景,并附带转义规则(如使用
Drupal::而非\Drupal::、避免 use 语句、PHP 保持单行、重定向 stderr)。 - 测试脚本目录约定:建议将脚本放在
scripts/tests/下,按verify-*.sh、check-*.sh、smoke-*.sh命名,并维护index.md索引。 - 补丁文件定位:当模块同时存在于
vendor/drupal/和web/modules/contrib/时,使用ReflectionMethod::getFileName()确认运行时实际加载的文件。 - 基于角色的访问测试:创建专用测试用户并分配角色,按用户类型与资源发布状态构建测试矩阵,并通过下载 HTML 检查表单 ID(
edit-*)来验证用户实际看到的内容。
使用方式
资料中的模式默认使用 ddev drush 和 ddev exec。对于非 DDEV 环境,需根据自动检测结果替换为 $DRUSH 和 $EXEC。示例命令包括:
ddev drush eval 'print json_encode(["exists" => Drupal::hasService("my_module.my_service")]);' 2>/dev/null
复杂逻辑应写入脚本文件,然后通过 ddev exec drush scr scripts/tests/my-check.php 运行。创建测试脚本的步骤为:写入 scripts/tests/verify-<feature>.sh、执行 chmod +x、更新 scripts/tests/index.md。
适用场景
- 模块开发完成后验证服务注册、模块启用、字段定义、配置值和权限定义。
- 页面访问控制测试,包括匿名用户、认证用户、角色管理员和 uid 1 对已发布与未发布资源的访问差异。
- 快速烟雾测试页面状态码和响应内容。
- 确认补丁模块实际加载的文件路径,避免编辑错误文件。
- 验证缓存清除和配置导入命令是否成功退出。
限制
- 测试模式默认面向 DDEV,其他环境需要手动替换执行前缀。
ddev exec会经过多层 shell,可能破坏管道、变量展开、嵌套引号和grep -P;含管道、变量、嵌套引号或多行 PHP 的命令应先写入文件。drush eval不支持use语句,PHP 需保持单行,并需注意反斜杠转义和 stderr 重定向。- 资料未提供具体版本要求、性能指标、许可或收费信息。