genesis / behat-fail-aid
通过在测试失败时与您协作,从测试套件中获得更多。截图和更多。与Goutte和MinkExtension兼容。
Requires
- behat/mink: *@stable
- behat/mink-extension: ~2.0
- behat/mink-selenium2-driver: ~1.3
Requires (Dev)
- behat/behat: ^3.5
- behat/mink-goutte-driver: ^1.2
- ciaranmcnulty/behat-localwebserverextension: ^1.1
- phpunit/phpunit: ~4.0
Suggests
- genesis/db-backup-restore: Quickly backup and restore your database.
- genesis/sql-data-mods: Extends behat-sql-extension to provide a powerful and simple framework to manage your data modules.
- genesis/test-routing: Simplistic routing that can extend main app routing for testing purposes.
- dev-master
- 3.7.5
- 3.7.4
- 3.7.3
- 3.7.2
- 3.7.1
- 3.7.0
- 3.6.1
- 3.6.0
- 3.5.1
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.2
- 3.0.1
- 3.0.0
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.6
- 2.3.5
- 2.3.4
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.2
- 2.0.1
- 2.0.0
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/composer/guzzlehttp/psr7-1.9.1
- dev-sample
- dev-output-params-control-executed-code
- dev-wait-on-failure
- dev-autoclean-run-once-per-entire-test-execution-rerun-line-number
- dev-js-log-code-does-not-break-non-js-drivers
- dev-feature/detect-when-the-page-is-blank
This package is not auto-updated.
Last update: 2024-09-19 17:00:47 UTC
README
简介
一次又一次,我们都看到了修复 behat 测试的难度和压力。这个包旨在帮助收集所有可能的失败信息,并在出现失败时将其打印出来,无需进行基本调查,即可最小化设置。
链接已准备好点击并在浏览器中打开。无需麻烦!
激活后,您还将免费获得以下步骤定义
And I take a screenshot And I gather facts for the current state
这些将在屏幕上输出相关信息。(您的格式必须很漂亮才能正常工作 --format=pretty)。
新增功能
主要:重构、受控输出、场景调试 CLI、清除截图 CLI、主机机器截图 URL。
次要
- 解决 hostUrl 和 hostDirectory 选项的环境变量。
- 仅在请求输出时执行截图代码。
- 通过单独上下文文件参数覆盖输出参数。
- 覆盖更多输出参数。
- 将 output.api 参数设置为 true,以将所有与 Mink 相关的标志/操作设置为 false,以便快速设置。
补丁:无。
安装
composer require genesis/behat-fail-aid --dev
CLI
清除截图
如果提供 --clear-screenshots
标志,则将从指定的目录中删除现有的截图。
场景调试
如果提供 --scenario-debug
标志,则将在每个步骤之后尝试截图并在控制台显示,以帮助调试。与自动清理功能结合使用时最佳。
失败时等待
可以使用 --wait-on-failure={seconds}
选项在浏览器中调查/检查失败。
失败反馈
可以使用 --feedback-on-failure
标志在发生失败时立即打印失败。当使用进度格式化程序(例如在长时间运行的测试套件中,如 CI)时非常有用。
配置/用法
#behat.yml default: suites: default: contexts: - FailAid\Context\FailureContext extensions: FailAid\Extension: ~
这是基本设置,将为您提供有关失败的很多信息。有关更多选项,请阅读其余的 README。以下任何选项都可以彼此结合使用。
输出选项
您可以通过配置文件控制辅助文本的详细程度。默认情况下,所有选项都启用。
default: extensions: FailAid\Extension: output: api: false # (Set this to true if testing against API's which don't use mink). url: false status: false tags: false feature: false context: false screenshot: false driver: false rerun: false debugBarSelectors: false
这些参数可以在 behat.yml 中每个 FailureContext 声明中覆盖
#behat.yml default: suites: web: contexts: - FailAid\Context\FailureContext API: contexts: - FailAid\Context\FailureContext: - output: screenshot: false extensions: FailAid\Extension: output: screenshot: true
截图选项
#behat.yml
...
FailAid\Extension:
screenshot:
directory: /temp/failures/behat/screenshots/
mode: default
autoClean: false
size: 1444x1280
hostDirectory: /tmp/$USER/failures/
hostUrl: http://ci/failures/$BRANCH_NAME/$JOB_NUMBER/failures/
目录(字符串)
覆盖默认截图路径。默认文件夹由 sys_get_temp_dir()
函数提供。可以是相对路径。
模式(字符串)
默认:在支持的情况下,驱动程序将生成 png,否则生成 html。
html:所有驱动程序都将生成 html 截图,这对于查询运行时代码很有用。
png:所有驱动程序都将生成 png 截图,或者尝试失败。
autoClean(布尔值)
在测试套件运行之前清理目录。
大小(字符串)
在失败时拍摄的截图大小。目前不重置窗口大小。可能与 maximiseWindow API 冲突。
hostDirectory(字符串)
如果针对 VM 或容器运行,可以将此路径设置为宿主机的截图目录。截图将保持不变,输出将针对您的宿主机。解析环境变量。
HostUrl(字符串)
如果在远程环境中运行,失败可能可在 URL 上找到。解析环境变量。
siteFilters选项
#behat.yml ... FailAid\Extension: siteFilters: '/images/': 'http://dev.environment/images/' '/js/': 'http://dev.environment/js/'
应用于HTML截图的内容。当处理资产的相对URL时非常有用。
跟踪JavaScript错误/日志
当发生失败时,您可以轻松跟踪页面上的JavaScript活动。将以下代码片段放在您应用的头部部分(确保它是全局的)
<script type="text/javascript"> window.jsErrors = []; window.jsWarns = []; window.jsLogs = []; window.onerror = function(error, url, line) { window.jsErrors.push('[Uncaught error]: ' + error + '; Line: ' + line); }; if (!console) var console = {}; var _privateError = console.error; console.error = function() { window.jsErrors.push('[Console error]: ' + JSON.stringify(arguments)); _privateError.apply(console, arguments); } var _privateWarn = console.warn; console.warn = function() { window.jsWarns.push('[Console warn]: ' + JSON.stringify(arguments)); _privateWarn.apply(console, arguments); } var _privateLog = console.log; console.log = function() { window.jsLogs.push('[Console log]: ' + JSON.stringify(arguments)); _privateLog.apply(console, arguments); } </script>
您原始的调试消息仍然会出现在您的控制台。
#behat.yml ... FailAid\Extension: defaultSession: chrome # If you've got multiple sessions registered. If its a standard setup you won't need this. trackJs: errors: true warns: true logs: true trim: 1000
当启用错误时,任何预期的console.error调用和js异常都将被记录并显示为失败的一部分。将对消息进行裁剪以缩短到指定的长度。
debugBarSelectors选项
#behat.yml ... FailAid\Extension: debugBarSelectors: #Only CSS selectors allowed. 'Status Code': '#debugBar .statusCode' 'Error Message': '#debugBar .errorMessage' 'Queries Executed': '#debugBar .executedQueries' xhrRequests: callback: MyXhrRequestsInfoExtractor::extract
上述代码将遍历每个选择器并查找元素。如果找到元素,它将显示失败输出中包含的文本。在拍摄页面截图后,收集调试栏详细信息,所以如果您需要,可以安全地导航到另一个页面。如果您必须这样做,请参阅“高级集成”部分以获取更多信息。
defaultSession选项
当您使用多个会话时,您可以使用fail aid扩展仅配置使用特定会话。
... FailAid\Extension: defaultSession: mySession ...
记录状态
您可以为失败记录您的测试状态。状态在每个场景之前重置。
# FeatureContext.php <?php use FailAid\Context\FailureContext; class FeatureContext { /** * @Given I am logged in */ public function login() { $email = $this->createUserWithRandomEmail(); // assume this returns [email protected] $this->fillField('email', $email); $this->fillField('password', 'xxxxxxxx'); $this->press('login'); FailureContext::addState('test user', $email); } }
当上述步骤定义在任何场景中使用时,它将记录测试用户电子邮件地址,位于当前场景的状态中。如果场景失败,您将在失败消息中获取存储在状态中的任何信息。
...
[STATE]
[TEST USER] [email protected]
...
常见调试问题
调试栏干扰测试是很常见的情况,即在进行启用JS的行为测试时,“您的点击将接收另一个元素”。在这种情况下,我建议不要关闭调试栏,而是执行代码来隐藏它。在调试方面,尽可能收集信息对于快速修复至关重要。我建议在访问调用后放置您的hideDebugBar()
代码。这可以简单到在栏上单击隐藏按钮。
高级集成
有时您的逻辑会更复杂,传递选项可能不适合您。在这种情况下,建议查看FailureContext以了解它允许您覆盖的内容。您可以使用自己的上下文类扩展FailureContext,并覆盖认为必要的部分。您必须将您自己的类在behat.yml上下文部分注册。
要注册所有套件而无需单独配置,或只需在代码中执行
# FeatureContext.php <?php use Behat\Testwork\Hook\Scope\BeforeSuiteScope; use FailAid\Context\FailureContext; class FeatureContext { /** * @BeforeSuite */ public static function loadFailureContext(BeforeSuiteScope $scope) { $params = [ 'screenshot' => [ 'directory' => null, 'mode' => FailureContext::SCREENSHOT_MODE_DEFAULT, 'autoClean' => false, ], 'siteFilters' => [], 'debugBarSelectors' => [], 'defaultSession' => 'mySession', ]; $scope->getEnvironment()->registerContextClass( FailureContext::class, $params ); } }