使用 Specflow+Allure Test Report 產生活文件/測試報表

Allure TestOp 是一套可以將測試結果產生成漂亮的測試報表,支援很多測試框架和 Cucumber/Gherkin 語言,我將專注在 .NET,接著,就來動手實作吧。

運作原理

  1. 執行測試後產生 Report File
  2. 把 Report File 轉換成 Html

開發環境

  • Windows 11
  • .NET 6
  • Rider 2021.3.2
  • SpecFlow.MsTest 3.9.40
  • SpecFlow.Allure 3.5.0.73

安裝 Allure

scoop install allure

scoop 安裝方式,請參考
WIndows 套件管理工具 - Scoop 配置與安裝 | 余小章 @ 大內殿堂 - 點部落 (dotblogs.com.tw)

Allure 文件
https://docs.qameta.io/allure

Specflow

開一個 .NET 6 測試專案,

安裝套件

dotnet add package SpecFlow.MsTest
dotnet.exe add package SpecFlow.Allure

 

加入計算機.feature

Feature: 計算機
Simple calculator for adding two numbers

    @mytag
    Scenario: 相加兩個數字
        Given 第一個數字為 50
        And 第二個數字為 70
        When 兩個數字相加
        Then 結果應該為 120

    Scenario Outline: 相加兩個數字(Examples)
        Given 第一個數字為 <First>
        And 第二個數字為 <Second>
        When 兩個數字相加
        Then 結果應該為 <Result>

        Examples:
          | First | Second | Result |
          | 50    | 70     | 120    |
          | 30    | 40     | 70     |
          | 60    | 30     | 90     |

 

實作 Step.cs

 

加入 specflow.json

{
  "language": {
    "feature": "en-US"
  },
  "stepAssemblies": [
    {
      "assembly": "Allure.SpecFlowPlugin"
    }
  ]
}

 

執行所有測試

 

在 allure-result 可以看到多了幾個檔案

 

NUnit

安裝套件

dotnet add package NUnit.Allure

 

測試程式

[TestFixture]
[AllureNUnit]
[AllureSubSuite("Example")]
[AllureSeverity(SeverityLevel.critical)]      
public class Tests
{
    [Test]
    [AllureTag("NUnit","Debug")]
    [AllureIssue("GitHub#1", "https://github.com/unickq/allure-nunit")]
    [AllureFeature("Core")]
    [TestCase(20, 50, 70)]
    public void 相加兩個數字(double firstNumber, double secondNumber, double expected)
    {
        var calculation = new Calculation();
        var actual = calculation.Add(firstNumber, secondNumber);
        Assert.AreEqual(expected, actual);
    }
}

 

更多的 Attribute 請參考
Attributes · unickq/allure-nunit Wiki (github.com)

 

Allure 測試結果會直接輸出到 bin\Debug\net6.0\allure-results

 

vstest.console.exe

接著我們改用 MsTest v2

測試程式碼如下

[TestClass]
public class UnitTests
{
    [TestMethod]
    [DataRow(50,70,120)]
    public void 相加兩個數字(double firstNumber, double secondNumber, double expected)
    {
        var calculation = new Calculation();
        var actual = calculation.Add(firstNumber, secondNumber);
        Assert.AreEqual(expected, actual);
    }
}

 

使用 vstest.console.exe 執行測試,產出測試結果

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" Lab.AllureReport4Specflow.dll /logger:trx

 

allure-mstest clone 這個專案然後建置,這裡需要 MSTestAllureAdapter.Console.exe

最後把 trx,餵給 MSTestAllureAdapter.Console.exe,產生出 allure xml

.\MSTestAllureAdapter.Console.exe Yao_Chang_Yu_110N000082_2022-01-04_13_52_57.trx

把 Allure 測試結果手動複製到 bin\Debug\net6.0\allure-results

 

啟動 Allure

這時候指定測試結果給 Allure

allure serve D:\src\sample.dotblog\Test\Lab.AllureReport\Lab.AllureReport4Specflow\bin\Debug\net6.0\allure-results

 

執行結果如下:

 

或者是先產生 html,再開啟服務

allure generate allure-results -o report/html
allure open report/html

 

專案位置

sample.dotblog/Test/Lab.AllureReport at master · yaochangyu/sample.dotblog (github.com)

 

參考資料

https://docs.qameta.io/allure

 

結論

這篇很粗略的介紹 Allure 的建立方式,其中還有很多的細節,由於時間的關係,我還沒有玩得很透徹,希望,接下來可以多花一點時間來研究它。

Allure .NET 支援 Specflow、NUnit 兩個 Test Provider 可以很無腦的整合到 Allure Test Report,不過,其餘的 Test Provider 仍然可以透過Test Result (*.trx),整合到 Allure Test Report

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo