SpecFlow - 表转换为数据表


表经常与场景大纲混淆虽然场景大纲适用于完整的测试,但表格仅适用于定义它的单个步骤。

然而,需要构建一个编程逻辑来理解数据,然后才能将其合并到我们的测试中。示例关键字用于场景大纲,但数据表不需要关键字

SpecFlow 中的 Table 有多种方法可用,让我们看看如何通过Table headers将 Table 转换为 Table 。

用于将一组值以列表的形式发送到步骤定义文件。它对于处理大型数据集很有用。SpecFlow 在步骤定义文件中具有丰富的用于表操作的 API。

SpecFlow Assist Helpers包用于在表上工作。另外,我们必须将命名空间TechTalk.SpecFlow.Assist添加到我们的代码中。

SpecFlow 辅助

第 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# Class并搜索。从搜索结果中选择选项“类别” ,然后单击“添加”继续。

访问搜索框

项目文件夹结构

文件夹结构

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)功能”,然后单击“运行视图中的所有测试”

访问搜索框

选择“登录模块方案”,然后单击“为此结果打开附加输出”链接

额外输出

额外的产出

在“何时”步骤中,使用从特征文件中的表(转换为数据表)传递的数据执行场景。