如何:创建数据驱动的编码的 UI 测试

使用 Visual Studio 高级专业版或 Visual Studio 旗舰版可以创建编码的 UI 测试,它可测试应用程序的用户界面 (UI) 是否功能正常。 编码的 UI 测试对应用程序的用户界面控件执行操作,并验证指定控件是否显示正确的值。 有关如何创建编码的 UI 测试的更多信息,请参见如何:创建编码的 UI 测试

在使用指定数据创建编码的 UI 测试之后,可能需要用不同的数据集多次运行编码的 UI 测试以测试不同条件。 为此,您可以从数据源添加参数值,以创建数据驱动的编码 UI 测试。 数据源中的每一行都是编码的 UI 测试的迭代。 测试的总体结果将基于所有迭代的结果。 例如,如果一个测迭代失败,则总体测试结果为失败。

有关数据驱动测试的一般信息,请参见如何:创建数据驱动的单元测试

通过记录方法或断言为编码的 UI 测试生成方法或断言时,记录的方法中提及的所有常量均参数化为参数类。 例如,如果添加名为 AddTwoNumbers 的方法,则编码的 UI 测试框架将自动生成名为 AddTwoNumbersParams 的另一个类,并且会为记录该方法时使用的每个常量值向此类添加字段。 如果生成名为 AssertForAdd 的断言方法,则该框架会为预期值生成一个名为 AssertforAddExpectedValues 的类。 这些类将自动生成并在以下步骤中使用。

为了使测试能够使用参数的数据源而对测试所做的所有更改都将应用于测试的源代码文件(即 CodedUITest1.cs). 您不能修改 UIMap.Designer.cs 文件中的代码。

在创建了编码的 UI 测试之后,您可以使用以下过程中的步骤向测试添加数据源和参数。 此示例假定解决方案中有以下代码元素:

  • 名为 CodedUITest1. 的编码的 UI 测试类

  • 名为 CodedUITestMethod1(). 的测试方法

该测试方法用于一个将两个数相加的简单的计算器应用程序,并验证相加的结果是否正确以使此测试能够通过。

数据源是包含以下数据的 .csv 文件:

Input1

Input2

ExpectedResult

3

4

7

5

6

11

1200

24000

25200

创建该文件并将它添加到测试项目中。

创建数据驱动的编码的 UI 测试

创建数据驱动的编码的 UI 测试

  1. 在**“解决方案资源管理器”**中,打开包含测试项目的解决方案。

  2. 单击**“测试”菜单,指向“窗口”,然后单击“测试视图”**。

    此时将打开**“测试视图”**窗口,其中显示了编码的 UI 测试。

  3. 在**“测试视图”窗口中,右击编码的 UI 测试方法,然后单击“属性”**。

    这将打开**“属性”**窗口。

  4. 若要选择要用于编码的 UI 测试的数据源,请在**“属性”窗口中单击“数据连接字符串”**右边的省略号 (…)。

    此时将打开**“新建测试数据源向导”**。

  5. 选择要使用的数据源的类型。 对于此示例,选择 .csv 数据源类型。 单击**“下一步”并输入 .csv 文件的路径和文件名,然后单击“完成”**。

    现在您可以在此测试方法中使用该数据源。 可以使用 TestContext.DataRow 来访问数据源中的当前数据行。 您可以使用以下语法访问每个列:

    string paramVal = TestContext.DataRow["Input1"]
    
  6. 在**“解决方案资源管理器”**中,打开 CodedUITest1.cs 文件。 对 CodedUITestMethod1() 方法进行以下更改:

    1. 在对 AddTwoNumbers 方法的调用之前添加以下两行代码,为要添加的数字提供值。

      this.UIMap.AddTwoNumbersParams.TextInput1EditText = 
          TestContext.DataRow["Input1"].ToString();
      this.UIMap.AddTwoNumbersParams.TextInput2EditText = 
          TestContext.DataRow["Input2"].ToString();
      
    2. 在对 AssertforAdd 方法的调用之前添加以下一行代码,为该断言方法提供值。

      this.UIMap.AssertforAddExpectedValues.TextAnswerEditText = 
          TestContext.DataRow["ExpectedResult"].ToString();
      

      添加了参数和数据源的编码的 UI 测试应类似于如下所示:

      [DeploymentItem("DataDriven.csv"), 
          DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", 
              "|DataDirectory|\\DataDriven.csv", "DataDriven#csv", 
              DataAccessMethod.Sequential), 
          TestMethod]
      public void CodedUITestMethod1()
      {
          // To generate code for this test, select "Generate Code for 
          // Coded UI Test" from the shortcut menu and select one of 
          // the menu items.
          this.UIMap.AddTwoNumbersParams.TextInput1EditText = 
              TestContext.DataRow["Input1"].ToString();
          this.UIMap.AddTwoNumbersParams.TextInput2EditText = 
              TestContext.DataRow["Input2"].ToString();
          this.UIMap.AddTwoNumbers();
      
          this.UIMap.AssertforAddExpectedValues.TextAnswerEditText = 
              TestContext.DataRow["ExpectedResult"].ToString();
          this.UIMap.AssertforAdd();
      }
      
  7. 保存对 CodedUITest1.cs 源代码文件所做的更改。

  8. 若要运行编码的 UI 测试,请在**“测试视图”窗口中右击编码的 UI 测试,然后单击“运行选定内容”**。

    运行测试后,**“测试结果”窗口中将显示所有测试迭代的总体测试结果。 若要查看每个迭代的详细信息,请在“测试结果”**窗口中双击该测试。

请参见

任务

如何:创建编码的 UI 测试

参考

UIMap

Assert

概念

如何:创建数据驱动的单元测试

使用自动 UI 测试来测试用户界面

编码的 UI 测试的最佳做法

支持编码的 UI 测试和操作录制的配置和平台