SpecFlow - 表格转换为数据表
表格经常与场景大纲混淆。虽然场景大纲适用于完整测试,但表格仅适用于定义它的单个步骤。
但是,需要构建编程逻辑来理解数据,然后才能将其纳入我们的测试中。场景大纲使用示例关键字,但数据表不需要关键字。
SpecFlow 中的表格中有多种方法,让我们看看如何通过表格标题将表格转换为表格。
表格用于以列表形式将一组值发送到步骤定义文件。它对于处理大型数据集很有用。 SpecFlow 在步骤定义文件中具有丰富的表操作 API。
SpecFlow Assist Helpers 包用于处理表。此外,我们必须将命名空间 TechTalk.SpecFlow.Assist 添加到我们的代码中。
步骤 1:创建功能文件
有关如何创建功能文件的详细信息在章节 − 功能文件中进行了详细讨论。
Feature: User credential Scenario: Login module When User types details | Name | Password | | t1 | pwd | | t2 | pwd1 |
然后用户应该能够登录。
步骤 2:创建 C# 文件以访问表数据
我们必须通过 System.Data 包将表转换为数据表。我们将在项目中创建一个新文件夹,并在其中放置一个 C# 文件。右键单击 SpecFlow 项目,然后单击添加。
选择选项 新建文件夹。
将文件夹命名为 Utils。
右键单击新创建的文件夹,然后选择选项 添加。单击类。
在搜索框中输入C# 类并进行搜索。从搜索结果中选择类选项,然后单击添加继续。
项目文件夹结构
C# 类实现
using System; using System.Collections.Generic; using System.Text; using System.Data; using TechTalk.SpecFlow; namespace SpecFlowProject1.Utils { class Class1 { public static DataTable DT(Table t) { var dT = new DataTable(); foreach (var h in t.Header) { dT.Columns.Add(h, typeof(string)); } // iterating rows foreach (var row in t.Rows) { var n = dT.NewRow(); foreach (var h in t.Header) { n.SetField(h, row[h]); } dT.Rows.Add(n); } return dT; } } }
步骤 3:创建步骤定义文件
有关如何创建步骤定义文件的详细信息,请参阅第 − 章"步骤定义文件"。
using System; using System.Data; using TechTalk.SpecFlow.Assist; using TechTalk.SpecFlow; namespace SpecFlowProject1.Features { [Binding] public class UserCredentialSteps { [When(@"User types details")] public void WhenUserTypesDetails(Table t) { //Accessing C# class method from Step Definition var dTable = Utils.Class1.DT(t); //iterating rows foreach (DataRow r in dTable.Rows) { Console.WriteLine(r.ItemArray[0].ToString()); Console.WriteLine(r.ItemArray[1].ToString()); } } [Then(@"user should be able to login")] public void ThenUserShouldBeAbleToLogin() { Console.WriteLine("User should be able to login"); } } }
步骤 4:执行和结果
选择 用户凭据 (1) 功能,然后单击 在视图中运行所有测试。
选择 登录模块场景,然后单击 为此结果打开其他输出链接。
场景已执行,数据从 When 步骤中的功能文件中的表(转换为数据表)传递而来。