webship/behat-html-formatter

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

1.0.2 2023-03-29 17:55 UTC

This package is auto-updated.

Last update: 2024-08-29 21:05:34 UTC


README

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

如何使用?

  • 此工具可以通过composer轻松安装。
  • behat.yml文件中定义格式化器
  • 修改behat.yml文件中的设置

安装

先决条件

此扩展需要

  • PHP 7.4.x或更高版本
  • Behat 4.x或更高版本

通过composer

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

使用composer安装

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

使用composer.json安装

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

{
    "require": {
        "behat/behat": "~4.0",
        "webship/behat-html-formatter": "~1.0",
    },
    "minimum-stability": "dev",
    "config": {
        "bin-dir": "bin/"
    }
}

然后只需使用composer安装即可

$ composer install --dev --prefer-dist

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

基本用法

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

# behat.yml
default:
  suites:
    default:
       contexts:
          - webship\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:
    webship\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/webship