emuse / behat-html-formatter

这将创建一个用于Behat的HTML格式化工具。

v2.0.0 2023-03-21 13:07 UTC

README

Behat 3扩展,用于从测试结果生成HTML报告。

Latest Stable Version Total Downloads Latest Unstable Version License

Twig报告

Twig Screenshot

Behat 2报告

Behat2 Screenshot

如何使用?

  • 此工具可以使用composer轻松安装。
  • behat.yml 文件中定义格式化程序
  • behat.yml 文件中修改设置

安装

先决条件

此扩展需要

  • PHP 5.3.x或更高版本
  • Behat 3.x或更高版本

通过composer

保持套件更新的最简单方法是使用 Composer

使用composer安装

$ composer require --dev emuse/behat-html-formatter

使用 composer.json 安装

将 BehatHtmlFormatterPlugin 添加到 composer.json 中的依赖项列表中。

{
    "require": {
        "behat/behat": "3.*@stable",
        "emuse/behat-html-formatter": "0.1.*",
    },
    "minimum-stability": "dev",
    "config": {
        "bin-dir": "bin/"
    }
}

然后只需使用composer安装即可

$ composer install --dev --prefer-dist

您可以在其 官方网站 上了解更多关于Composer的信息。

基本用法

通过在 behat.yml 中指定其类来激活扩展

# behat.yml
default:
  suites:
    default:
       contexts:
          - emuse\BehatHTMLFormatter\Context\ScreenshotContext:
               screenshotDir: build/html/behat/assets/screenshots
    ... # All your awesome suites come here
  formatters:
    html:
      output_path: %paths.base%/build/html/behat

  extensions:
    emuse\BehatHTMLFormatter\BehatHTMLFormatterExtension:
      name: html
      renderer: Twig,Behat2
      file_name: index
      print_args: true
      print_outp: true
      loop_break: true

命令行选项

将以下内容添加到您的behat命令中,以打印报告

behat --format html --out MYDIRECTORY

将格式设置为html将输出您在下面配置的各种报告(Behat2、Twig、Minimal等)

您还需要指定报告的输出目录为 MYDIRECTORY。

配置

格式化程序配置

  • output_path - Behat将保存HTML报告的位置。使用 %paths.base% 构建完整路径。

扩展配置

  • renderer - Behat将用于渲染的引擎,因此Behat应输出的报告格式类型(允许多个报告格式,用逗号分隔)。允许的值是
  • Behat2 - 生成类似于Behat 2生成的HTML报告。
  • Twig 基于Twig的新颖且更现代的格式。
  • Minimal 极简的HTML输出。
  • file_name - (可选) Behat将使用固定的文件名,并在每次构建后覆盖相同的文件。默认情况下,Behat将创建一个使用随机名称的新HTML文件("renderer name"_"date hour")。
  • print_args - (可选) 如果设置为 true,Behat将添加每个步骤的所有参数到报告中。(例如,表格。)
  • print_outp - (可选) 如果设置为 true,Behat将添加每个步骤的输出到报告中。(例如,异常。)
  • loop_break - (可选) 如果设置为 true,Behat将在打印场景轮廓时在每个执行后添加分隔换行符。

屏幕截图

存在将屏幕截图嵌入测试失败的功能。

目前仅支持png图像格式。

为了嵌入屏幕截图,您需要使用您喜欢的webdriver进行截图,并将其存储在以下文件路径格式中

results/html/assets/screenshots/{{feature_name}}/{{scenario_name}}.png

feature_name 和 scenario_name 变量必须是相关项目名称,不得包含空格。

以下是一个示例,说明FeatureContext方法将生成上述格式的图像文件

        /**
         * @BeforeScenario
         *
         * @param BeforeScenarioScope $scope
         *
         */
        public function setUpTestEnvironment($scope)
        {
            $this->currentScenario = $scope->getScenario();
        }

        /**
         * @AfterStep
         *
         * @param AfterStepScope $scope
         */
        public function afterStep($scope)
        {
            //if test has failed, and is not an api test, get screenshot
            if(!$scope->getTestResult()->isPassed())
            {
                //create filename string

               $featureFolder = preg_replace('/\W/', '', $scope->getFeature()->getTitle());
                  
                              $scenarioName = $this->currentScenario->getTitle();
                              $fileName = preg_replace('/\W/', '', $scenarioName) . '.png';

                //create screenshots directory if it doesn't exist
                if (!file_exists('results/html/assets/screenshots/' . $featureFolder)) {
                    mkdir('results/html/assets/screenshots/' . $featureFolder);
                }

                //take screenshot and save as the previously defined filename
                $this->driver->takeScreenshot('results/html/assets/screenshots/' . $featureFolder . '/' . $fileName);
                // For Selenium2 Driver you can use:
                // file_put_contents('results/html/assets/screenshots/' . $featureFolder . '/' . $fileName, $this->getSession()->getDriver()->getScreenshot());
            }
        }

注意,currentScenario变量需要在类级别上,并在 @BeforeScenario 方法中生成,因为Behat目前不支持在 @AfterStep 方法中获取当前场景,在那里生成截图

问题提交

当您需要额外支持或发现某些奇怪的事情时,请随时创建一个新的问题

许可协议和作者

作者:https://github.com/dutchiexl/BehatHtmlFormatterPlugin/contributors