在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
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 集成教程本手册将向您展示这些工具如何协同工作,以增强您的应用程序开发流程。
要开始在 .NET 项目中使用 Specflow,您首先需要安装 Specflow NuGet 软件包,以设置测试框架、创建特征文件并定义测试场景。
打开 Visual Studio。
创建一个新的 .NET 项目或打开一个现有项目。
转到扩展菜单,然后管理扩展。
搜索 "Specflow"。 安装 Specflow 扩展。
设置好 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
该功能文件描述了一个基本的登录过程。 Given "为测试设置场景。当 "描述动作。 然后 "定义了预期结果。 您要用通俗易懂的英语撰写这些说明。 这样,测试的流程和目的就很容易理解了。
在 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
这个 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
在步骤定义中,您可以通过以下方式访问这些数据:
[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
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
自定义钩子是一项强大的功能。 它们可帮助您管理测试设置和拆卸流程。
本节介绍了 Specflow 的五个主要功能,这些功能可以增强您在 .NET 项目中的测试框架。 每个功能都旨在提高测试自动化工作的灵活性和效率。
IronPDF 是一个 C# 库,允许开发人员在 .NET 应用程序中生成、处理和渲染 PDF 文件。 当与 Specflow(行为驱动开发工具)一起使用时,这一功能强大的工具将成为您测试武器库中的重要补充。(BDD)译文要求:.NET Framework。
通过集成 IronPDF,您可以在应用程序中自动测试 PDF 输出,确保它们符合所需的规范。
IronPDF 与 Specflow 结合的一个实际用例是验证应用程序生成的 PDF 报告的内容和格式。 例如,您可以自动测试报告是否包含正确的数据、是否符合预期的布局以及是否可以在规定的要求内访问。 事实证明,在发票或合规报告等准确文档至关重要的情况下,这种集成尤其有用。
确保您已安装 IronPDF。 您可以使用 NuGet 软件包控制台进行安装:
Install-Package IronPdf
下面是一个完整的代码示例,演示了如何设置 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
在这段代码中,我们定义了一个 Specflow 步骤,该步骤首先从指定路径加载 PDF,然后验证该 PDF 是否包含预期文本。 IronPdf.PdfDocument` 类用于加载和操作 PDF 文件。通过这种设置,您可以将 PDF 验证集成到自动化测试中,从而更轻松地捕捉错误。
总之,将 Specflow C# 与 IronPDF for .NET 结合使用,可以增强您的 .NET 项目的功能,尤其是在处理 PDF 文档时。 Specflow 擅长使用通俗易懂的语言定义和执行详细的测试方案。
IronPdf 通过提供强大的 PDF 操作功能对此进行了补充。 通过整合这两个强大的工具,您可以简化测试流程。 如果您想尝试使用这些功能、免费试用 IronPDF.