.NET 帮助

Specflow C#(它如何为开发人员工作)

发布 2024年七月1日
分享:

Specflow C

Specflow C# 是一个支持行为驱动开发的开源测试框架(BDD)此外,您还可以使用该工具创建测试场景的功能文件。 它可与 .NET Framework 项目无缝集成。

您可以用通俗易懂的语言描述测试。 这种方法有利于开发人员和非开发人员之间的合作。 每个人都可以为测试场景做出贡献。 Specflow 主要使用特性文件来管理和执行特性文件夹中的所有测试。

IronPDF 则是一个专注于在 .NET 中进行 PDF 操作的库。 它可以让您轻松创建、编辑和阅读 PDF 文件。 您可以将 HTML 直接转换为 PDF。 该功能对于在应用程序中生成报告或文档尤其有用。 IronPDF 兼容各种版本的 .NET,包括 Core、Framework 和 Standard。

尽管 Specflow C# 和 IronPDF 的用途不同,但它们都是开发人员工具包中的重要工具。 它们可以在一个项目中有效结合。 例如,您可以使用 Specflow C# 来定义和测试一个检索和处理数据的功能,然后采用 IronPDF 根据测试结果生成报告。 ThisSpecflow 和 IronPDF 集成教程本手册将向您展示这些工具如何协同工作,以增强您的应用程序开发流程。

Specflow C# 入门

在 .NET 项目中设置 Specflow

要开始在 .NET 项目中使用 Specflow,您首先需要安装 Specflow NuGet 软件包,以设置测试框架、创建特征文件并定义测试场景。

  1. 打开 Visual Studio。

  2. 创建一个新的 .NET 项目或打开一个现有项目。

  3. 转到扩展菜单,然后管理扩展。

  4. 搜索 "Specflow"。 安装 Specflow 扩展。

    Specflow C#(如何为开发人员工作):图 1

基本代码示例

设置好 Specflow 后,您就可以创建第一个功能文件,该文件将存放在功能文件夹中。 Specflow 中的特性文件以可读格式概述了您要测试的行为。 下面是一个如何创建新功能文件和定义场景的简单示例:

Feature: Login Feature
    Scenario: Successful Login with Valid Credentials
        Given I am on the login page
        When I enter valid credentials
        Then I should be redirected to the dashboard
Feature: Login Feature
    Scenario: Successful Login with Valid Credentials
        Given I am on the login page
        When I enter valid credentials
        Then I should be redirected to the dashboard
Feature:
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Login Feature Scenario: Successful Login @with Valid Credentials Given I am on the login page @When I enter valid credentials @Then I should be redirected @to the dashboard
VB   C#

该功能文件描述了一个基本的登录过程。 Given "为测试设置场景。当 "描述动作。 然后 "定义了预期结果。 您要用通俗易懂的英语撰写这些说明。 这样,测试的流程和目的就很容易理解了。

实现 Specflow C# 的功能

使用步骤定义编写测试

在 Specflow 中,测试由功能文件中列出的场景驱动。 要使这些场景可执行,您需要步骤定义。 步骤定义将纯语言步骤与 C# 代码绑定。 以下是如何定义步骤定义:

[Binding]
public class LoginSteps
{
    [Given(@"I am on the login page")]
    public void GivenIAmOnTheLoginPage()
    {
        // Code to navigate to the login page
    }

    [When(@"I enter valid credentials")]
    public void WhenIEnterValidCredentials()
    {
        // Code to input username and password
    }

    [Then(@"I should be redirected to the dashboard")]
    public void ThenIShouldBeRedirectedToTheDashboard()
    {
        // Code to verify the dashboard is displayed
    }
}
[Binding]
public class LoginSteps
{
    [Given(@"I am on the login page")]
    public void GivenIAmOnTheLoginPage()
    {
        // Code to navigate to the login page
    }

    [When(@"I enter valid credentials")]
    public void WhenIEnterValidCredentials()
    {
        // Code to input username and password
    }

    [Then(@"I should be redirected to the dashboard")]
    public void ThenIShouldBeRedirectedToTheDashboard()
    {
        // Code to verify the dashboard is displayed
    }
}
<Binding>
Public Class LoginSteps
	<Given("I am on the login page")>
	Public Sub GivenIAmOnTheLoginPage()
		' Code to navigate to the login page
	End Sub

	<[When]("I enter valid credentials")>
	Public Sub WhenIEnterValidCredentials()
		' Code to input username and password
	End Sub

	<[Then]("I should be redirected to the dashboard")>
	Public Sub ThenIShouldBeRedirectedToTheDashboard()
		' Code to verify the dashboard is displayed
	End Sub
End Class
VB   C#

这个 C# 类表示登录场景的步骤。 每个方法都标记了与步骤类型相对应的 Specflow 属性,例如用于识别特定步骤的字符串键。

数据驱动测试

Specflow 支持数据驱动测试,允许您在场景中使用各种测试数据集。 这样,您就可以使用各种数据集来测试场景。 下面是一个使用功能文件中的表格的示例:

Scenario: Login with multiple users
    Given I am on the login page
    When I login with the following credentials:

 Username  
 Password  

 user1     
 pass1     

 user2     
 pass2     

    Then I should see user specific dashboard
Scenario: Login with multiple users
    Given I am on the login page
    When I login with the following credentials:

 Username  
 Password  

 user1     
 pass1     

 user2     
 pass2     

    Then I should see user specific dashboard
Scenario:
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Login @with multiple users Given I am on the login page @When I login @with the following credentials: Username Password user1 pass1 user2 pass2 @Then I should see user specific dashboard
VB   C#

在步骤定义中,您可以通过以下方式访问这些数据:

[When(@"I login with the following credentials:")]
public void WhenILoginWithTheFollowingCredentials(Table table)
{
    foreach(var row in table.Rows)
    {
        string username = row["Username"];
        string password = row["Password"];
        // Code to perform login
    }
}
[When(@"I login with the following credentials:")]
public void WhenILoginWithTheFollowingCredentials(Table table)
{
    foreach(var row in table.Rows)
    {
        string username = row["Username"];
        string password = row["Password"];
        // Code to perform login
    }
}
<[When]("I login with the following credentials:")>
Public Sub WhenILoginWithTheFollowingCredentials(ByVal table As Table)
	For Each row In table.Rows
		Dim username As String = row("Username")
		Dim password As String = row("Password")
		' Code to perform login
	Next row
End Sub
VB   C#

与测试资源管理器集成

Specflow 与 Visual Studio 的测试资源管理器集成,您可以在其中高效地运行和管理所有测试。 这样可以方便运行和管理您的测试。 确保您的项目配置正确。 构建项目后,您的测试将出现在 Test Explorer 中。 您可以运行单个测试,也可以一次性运行所有测试。

并行测试执行

Specflow 支持运行并行测试,以减少整体执行时间。这样可以减少执行所有测试所需的时间。 您需要配置您的 specflow.json 文件或 AssemblyInfo.cs 以启用并行执行:

{
  "specFlow": {
    "runtime": {
      "testThreadCount": 4,
      "testSchedulingMode": "Parallel"
    }
  }
}

这种配置最多可同时运行四个测试。

自定义钩子

Specflow 允许您定义自定义钩子。 这些钩子可以在测试生命周期的不同阶段执行代码。 以下是如何在任何测试运行之前定义一个用于设置数据库的钩子:

[BeforeTestRun]
public static void SetUpDatabase()
{
    // Code to set up database
}
[BeforeTestRun]
public static void SetUpDatabase()
{
    // Code to set up database
}
<BeforeTestRun>
Public Shared Sub SetUpDatabase()
	' Code to set up database
End Sub
VB   C#

自定义钩子是一项强大的功能。 它们可帮助您管理测试设置和拆卸流程。

本节介绍了 Specflow 的五个主要功能,这些功能可以增强您在 .NET 项目中的测试框架。 每个功能都旨在提高测试自动化工作的灵活性和效率。

将 Specflow C# 与 IronPDF 相结合

Specflow C#(如何为开发人员工作):图 2

IronPDF 是一个 C# 库,允许开发人员在 .NET 应用程序中生成、处理和渲染 PDF 文件。 当与 Specflow(行为驱动开发工具)一起使用时,这一功能强大的工具将成为您测试武器库中的重要补充。(BDD)译文要求:.NET Framework。

通过集成 IronPDF,您可以在应用程序中自动测试 PDF 输出,确保它们符合所需的规范。

IronPdf 与 Specflow C# 合并的使用案例

IronPDF 与 Specflow 结合的一个实际用例是验证应用程序生成的 PDF 报告的内容和格式。 例如,您可以自动测试报告是否包含正确的数据、是否符合预期的布局以及是否可以在规定的要求内访问。 事实证明,在发票或合规报告等准确文档至关重要的情况下,这种集成尤其有用。

确保您已安装 IronPDF。 您可以使用 NuGet 软件包控制台进行安装:

Install-Package IronPdf

Specflow C#(如何为开发人员工作):图 3

用例代码示例

下面是一个完整的代码示例,演示了如何设置 SpecFlow 步骤定义,使用 IronPdf 测试 PDF 内容。 本示例假定您正在测试由应用程序生成的 PDF 文档,该文档应包含特定文本:

using IronPdf;
using TechTalk.SpecFlow;

[Binding]
public class PdfContentSteps
{
    private string? _pdfPath;
    private PdfDocument? _pdfDocument;

    [Given(@"a PDF file generated at '(.*)'")]
    public void GivenAPDFFileGeneratedAt(string pdfPath)
    {
        _pdfPath = pdfPath;
        _pdfDocument = new PdfDocument(_pdfPath);
    }

    [Then(@"the PDF should contain the text '(.*)'")]
    public void ThenThePDFShouldContainTheText(string expectedText)
    {
        var textContent = _pdfDocument.ExtractAllText();
        if (!textContent.Contains(expectedText))
        {
            throw new Exception("PDF content does not contain the expected text.");
        }
    }
}
using IronPdf;
using TechTalk.SpecFlow;

[Binding]
public class PdfContentSteps
{
    private string? _pdfPath;
    private PdfDocument? _pdfDocument;

    [Given(@"a PDF file generated at '(.*)'")]
    public void GivenAPDFFileGeneratedAt(string pdfPath)
    {
        _pdfPath = pdfPath;
        _pdfDocument = new PdfDocument(_pdfPath);
    }

    [Then(@"the PDF should contain the text '(.*)'")]
    public void ThenThePDFShouldContainTheText(string expectedText)
    {
        var textContent = _pdfDocument.ExtractAllText();
        if (!textContent.Contains(expectedText))
        {
            throw new Exception("PDF content does not contain the expected text.");
        }
    }
}
Imports IronPdf
Imports TechTalk.SpecFlow

<Binding>
Public Class PdfContentSteps
'INSTANT VB WARNING: Nullable reference types have no equivalent in VB:
'ORIGINAL LINE: private string? _pdfPath;
	Private _pdfPath As String
	Private _pdfDocument? As PdfDocument

	<Given("a PDF file generated at '(.*)'")>
	Public Sub GivenAPDFFileGeneratedAt(ByVal pdfPath As String)
		_pdfPath = pdfPath
		_pdfDocument = New PdfDocument(_pdfPath)
	End Sub

	<[Then]("the PDF should contain the text '(.*)'")>
	Public Sub ThenThePDFShouldContainTheText(ByVal expectedText As String)
		Dim textContent = _pdfDocument.ExtractAllText()
		If Not textContent.Contains(expectedText) Then
			Throw New Exception("PDF content does not contain the expected text.")
		End If
	End Sub
End Class
VB   C#

在这段代码中,我们定义了一个 Specflow 步骤,该步骤首先从指定路径加载 PDF,然后验证该 PDF 是否包含预期文本。 IronPdf.PdfDocument` 类用于加载和操作 PDF 文件。通过这种设置,您可以将 PDF 验证集成到自动化测试中,从而更轻松地捕捉错误。

结论

Specflow C#(如何为开发人员工作):图 4

总之,将 Specflow C# 与 IronPDF for .NET 结合使用,可以增强您的 .NET 项目的功能,尤其是在处理 PDF 文档时。 Specflow 擅长使用通俗易懂的语言定义和执行详细的测试方案。

IronPdf 通过提供强大的 PDF 操作功能对此进行了补充。 通过整合这两个强大的工具,您可以简化测试流程。 如果您想尝试使用这些功能、免费试用 IronPDF.

< 前一页
Octokit .NET(开发人员如何使用)
下一步 >
DotNetOpenAuth .NET Core(开发人员工作原理)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >