SpecFlow - 带示例的数据驱动测试

我们可以借助关键字Examples执行数据驱动测试。我们还将借助关键字Scenario Outline对多个值执行相同的场景。

要考虑的数据集应一个接一个地传递到示例部分下方,并用|符号分隔。因此,如果有三行,我们将从单个场景执行三个测试用例。

Scenario Outline用于使用不同的数据集复制相同的场景。使用不同的值编写相同的测试既麻烦又耗时。例如,

用户凭据

我们可以将上述两种场景与场景大纲结合起来。

用户凭据

因此,我们看到场景大纲应该附带关键字示例。对于示例段下方出现的每一行,场景大纲都会执行一次。

此外,我们已经看到 Given 步骤具有 <> 分隔符。它指向示例表的标题。 SpecFlow 应在将步骤与步骤定义进行匹配之前将值放入此表中。

要验证登录模块,我们需要执行以下步骤 −

  • 用户输入用户名和密码。

  • 验证用户是否能够登录。

我们应将上述步骤合并到功能文件中。

步骤 1:创建功能文件

有关如何创建功能文件的详细信息在 − 功能文件一章中详细讨论。

Feature: User credential
Scenario Outline: Login module
   Given user types <username> and <password>
   Then user should be able to login
   Examples:
   | username       | password |
   | tutorialspoint1| pwd      |
   | tutorialspoint2| pwd1     |

步骤 2:步骤定义文件

有关如何创建步骤定义文件的详细信息,请参见"步骤定义文件"一章。

using System;
using TechTalk.SpecFlow;
namespace SpecFlowProject1.Features{
   [Binding]
   public class UserCredentialSteps{
      //regular expression used to point to data
      [Given(@"user types (.*) and (.*)")]
      public void GivenUserTypesUserAndPwds(string username, string password){   
         Console.WriteLine(username);
         Console.WriteLine(password);
      }  
      [Then(@"user should be able to login")]
      public void ThenUserShouldBeAbleToLogin(){
         Console.WriteLine("User should be able to login");
      }
   }
}

步骤 3:执行和结果

选择用户凭据 (2),然后单击"在视图中运行所有测试"。

执行结果

选择登录模块、tutorialspoint1 场景,然后单击"打开此结果的其他输出"链接。

执行场景

执行场景

使用 用户名 − tutorialspoint1 和密码 − 执行场景pwd 如示例(第一行)中指定。

选择登录模块、tutorialspoint2 场景,然后单击"为此结果打开其他输出"链接。

登录模块

登录模块

测试使用 用户名 − tutorialspoint2 和密码 − pwd1 执行,如示例(第二行)中指定。