weitzman/drupal-test-traits

用于测试包含用户内容的Drupal网站(与空网站相反)的特性。

安装数: 3,366,737

依赖者: 19

建议者: 0

安全: 0

2.3.1 2024-08-10 19:01 UTC

README

用于测试包含用户内容的Drupal网站(与空网站相反)的特性。

Behat 是促进业务经理和开发者之间交流的优秀工具。这些对话很有用,但许多组织根本无法或不愿通过 Gherkin 进行交流。当你需要对产品质量负责而不是对话时,这是一种适合你的测试方法。

安装

  • 通过 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.phpExistingSiteSelenium2DriverTestBase.php。您可以直接从测试类扩展它,或为您的项目创建一个基类,它扩展了这些之一。

通过我们内置的 Drush 生成器 快速构建测试:drush generate test:existingdrush generate test:existing-js

运行测试

  1. 创建或编辑 phpunit.xml 以包含 existing-siteexisting-site-javascript 的新测试套件(示例 phpunit.xml)。
  2. 使用 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-projectDocker 支持)。
    • 在运行时指定它们:DTT_BASE_URL=http://127.0.0.1:8888; DTT_API_URL=http://localhost:9222 vendor/bin/phpunit ...
  3. 使用 --bootstrap 选项运行 phpunitvendor/bin/phpunit --bootstrap=vendor/weitzman/drupal-test-traits/src/bootstrap-fast.php ...。此引导也可以在您的 phpunit.xml 中引用(示例 phpunit.xml)。根据您的设置,您可能希望以 Web 服务器用户运行 phpunitsu -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。一个特性,用于添加动态页面缓存缓存性测试。

贡献

欢迎对此项目做出贡献!请提交问题和合并请求。

附录