.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 根据测试结果生成报告。本 Specflow 教程展示了这些工具如何协同工作,以增强您的应用程序开发流程。

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
IRON VB CONVERTER ERROR developers@ironsoftware.com
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框架。

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

IronPDF 与 Specflow C# 的合并用例

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

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

Install-Package IronPdf

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

用例代码示例

下面是一个完整的代码示例,演示了如何使用 IronPDF 设置 SpecFlow 步骤定义以测试 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 的结合增强了.NET 项目的能力,尤其是在处理 PDF 文档时。Specflow 擅长使用简单的语言定义和执行详细的测试方案。

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

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

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

免费NuGet下载 总下载量: 10,731,156 查看许可证 >