weitzman / drupal-test-traits
用于测试包含用户内容的Drupal网站(与空网站相反)的特性。
Requires
- php: >=8.1
Requires (Dev)
- drush/drush: ^12.5
- phpspec/prophecy-phpunit: ^2
- 2.x-dev
- 2.3.1
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- 2.0.0-rc2
- 2.0.0-rc1
- 1.x-dev
- 1.6.0
- 1.5.0
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.0
- 1.0.0-rc.1
- 1.0.0-beta.2
- 1.0.0-beta.1
- 1.0.0-alpha.2
- 1.0.0-alpha.1
- dev-teardown
- dev-fail-on-php-messages
- dev-auto
- dev-ci-chrome
- dev-chrome-update
- dev-terminator
- dev-logger-drupal-to-headers
- dev-gitlabci
- dev-php73
- dev-bump
- dev-version-pin
- dev-38-custom-profile
- dev-patch-1
- dev-35-add-assert-count
- dev-phenaproxima/drupal-test-traits-master
- dev-s2d-headers
- dev-debug
This package is auto-updated.
Last update: 2024-09-04 05:39:57 UTC
README
用于测试包含用户内容的Drupal网站(与空网站相反)的特性。
Behat 是促进业务经理和开发者之间交流的优秀工具。这些对话很有用,但许多组织根本无法或不愿通过 Gherkin 进行交流。当你需要对产品质量负责而不是对话时,这是一种适合你的测试方法。
- 博客: 介绍 Drupal Test Traits
- 博客: 介绍 Drupal Test Traits:用于测试现有网站的 Drupal 扩展
- 视频: Drupalcon 演示 - 介绍 Drupal Test Traits。
- 视频: 使用 Drupal Test Traits 实现零摩擦测试之路
安装
- 通过 Composer 安装:
composer require weitzman/drupal-test-traits --dev
编写测试
选择测试类型
- ExistingSite。请参阅 ExampleTest.php。从这里开始。这些测试可以是小型单元测试,也可以是更大的功能测试(通过 BrowserKit)。此类测试应放置在
tests/src/ExistingSite
。 - ExistingSiteSelenium2DriverTest。请参阅 ExampleSelenium2DriverTest.php。这些测试利用任何可以以 [WebDriver] 模式运行的浏览器(Chrome、Firefox 或 Edge),通过 Selenium 或特定浏览器的驱动程序(如 chromedriver)进行测试。它们适合测试 Ajax 和类似客户端交互。此浏览器设置还可以用于使用 nightwatch 运行 Drupal 8 核心JS测试。与 ExistingSite 相比,这些测试运行较慢。要使用此测试类型,您需要
composer require 'behat/mink-selenium2-driver' --dev
。此类测试应放置在tests/src/ExistingSiteJavascript
。
扩展与您的选择对应的基类: ExistingSiteBase.php、ExistingSiteSelenium2DriverTestBase.php。您可以直接从测试类扩展它,或为您的项目创建一个基类,它扩展了这些之一。
通过我们内置的 Drush 生成器 快速构建测试:drush generate test:existing
或 drush generate test:existing-js
。
运行测试
- 创建或编辑
phpunit.xml
以包含existing-site
和existing-site-javascript
的新测试套件(示例 phpunit.xml)。 - 使用
DTT_BASE_URL=http://example.com
指定您的现有站点的 URL。对于 ExistingSiteSelenium2DriverTest 测试,还请指定DTT_MINK_DRIVER_ARGS=["firefox", null, "http://selenium:4444/wd/hub"]
。您还可以更改超时设置,例如:DTT_API_OPTIONS={"socketTimeout": 360, "domWaitTimeout": 3600000}
(注意 JSON 字符串)。您可以通过以下三种方式之一指定这些环境变量- 将它们添加到您的
phpunit.xml
(示例 phpunit.xml)。 - 将它们添加到您的
.env
文件中(由 drupal-project 和 Docker 支持)。 - 在运行时指定它们:
DTT_BASE_URL=http://127.0.0.1:8888; DTT_API_URL=http://localhost:9222 vendor/bin/phpunit ...
- 将它们添加到您的
- 使用
--bootstrap
选项运行phpunit
:vendor/bin/phpunit --bootstrap=vendor/weitzman/drupal-test-traits/src/bootstrap-fast.php ...
。此引导也可以在您的phpunit.xml
中引用(示例 phpunit.xml)。根据您的设置,您可能希望以 Web 服务器用户运行phpunit
:su -s /bin/bash www-data -c "vendor/bin/phpunit ..."
。如果您遇到 'Class not found' 错误,请参阅 bootstrap-fast.php 顶部的注释。
应将这些测试运行限制在您的自定义功能范围内;测试核心和贡献模块已是 DrupalCI 的职责。要做到这一点,请告诉 phpunit
只在特定路径中查找测试,或使用 @group
注释来限制作用域。以下示例依赖于正确配置的 phpunit.xml
(示例 phpunit.xml)。
vendor/bin/phpunit web/modules/custom
vendor/bin/phpunit --group CustomTestGroup
调试测试
- 所有 HTML 请求都可以被记录。要这样做,请在
phpunit
调用中添加BROWSERTEST_OUTPUT_DIRECTORY=/tmp
和--printer '\\Drupal\\Tests\\Listeners\\HtmlOutputPrinter'
。要禁用弃用通知,包含SYMFONY_DEPRECATIONS_HELPER=disabled
。或者,您可以在phpunit.xml
中指定这些(示例 phpunit.xml)。 - 要将当前页面的 HTML 写入文件,请使用
$this->capturePageContent()
。如果使用 HtmlOutputPrinter,它将保存到浏览器输出目录。或者,您也可以指定DTT_HTML_OUTPUT_DIRECTORY=/path/to/output_directory
,这在使用不同的打印机(如 Teamcity,由 PHPStorm 强制执行)时是必需的。 - 要在 ExistingSiteSelenium2DriverTest 下获取当前页面的截图,请使用
\weitzman\DrupalTestTraits\ScreenShotTrait::captureScreenshot
。在使用此功能调试“随机”失败的测试时要小心。最有可能的情况是,这些测试失败是因为缺少waitForElementVisible
检查,因为截图的行为会给浏览器额外的时间来完成页面渲染。 - 默认情况下,将执行抛出 PHP 警告/错误到 Drupal watchdog 的测试将失败(需要 dblog 模块)。如果您想禁用此功能,请在您的测试或自定义基类中将
$failOnPhpWatchdogMessages
设置为FALSE
。
可用的特性
DrupalTrait 引导 Drupal,使其 API 可用。还提供了一种实体清理 API,以保持数据库相对干净,不包含测试内容。
BrowserKitTrait 使 BrowserKitTrait 可用于浏览器控制,并提供了一些辅助方法。
Selenium2DriverTrait 使 Selenium2Driver 可用于 Selenium 的浏览器控制,适用于功能 JS 测试。
NodeCreationTrait 创建在测试方法结束时删除的节点。
TaxonomyCreationTrait 创建在测试方法结束时删除的术语和词汇表。
UserCreationTrait 创建在测试方法结束时删除的用户和角色。
EntityCrawlerTrait 启用实体(无 http)的渲染,并提供由 Symfony Crawler 提供的输出断言。有关示例测试,请参阅 示例测试。
MailCollectionTrait 在测试期间启用收集电子邮件。可以使用核心的
AssertMailTrait
对这些电子邮件的内容进行断言。ScreenShotTrait 允许在 Selenium2 驱动程序时捕获屏幕截图。目标目录可以通过
DTT_SCREENSHOT_REPORT_DIRECTORY
设置,该值也可以在phpunit.xml
中设置(示例 phpunit.xml)。默认为/sites/simpletest/browser_output
。
贡献的包
提交一个 合并请求 以将您的特性添加到此列表。
在您的包的 composer.json
中使用 type="drupal-dtt"
以出现在 此列表 中。
- LoginTrait。通过用户重置 URL 而不是表单提供登录/登出功能。当启用 TFA/SAML 时很有用。
- QueueRunnerTrait。提供在测试期间清除和运行队列的方法。
- Drupal Test Utils。一个特性,用于添加动态页面缓存缓存性测试。
贡献
欢迎对此项目做出贡献!请提交问题和合并请求。
- 所有合并请求都通过 GitLab CI 自动测试。
- 在 Drupal Slack 的 #testing 频道 上讨论 DTT。
- DDEV
- 查看
.ddev
目录以获取方便的开发环境。 DDEV 文档。我们还包括一个 ddev poser 命令,该命令临时将 Drupal 添加到 composer.json 并执行composer install
。 - 您可以在 https://dtt.ddev.site:7900 上查看浏览器测试(例如 ExistingSiteSelenium2DriverTestBase)。
- 查看