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

可以创建编码的 UI 测试 应用程序的用户界面 (UI) 是否正常工作。 编码的 UI 测试对应用程序的用户界面控件执行操作,并验证指定控件是否显示正确的值。 有关如何创建编码的 UI 测试的更多信息,请参见创建编码的 UI 测试

要求

  • Visual Studio 旗舰版, Visual Studio 高级专业版

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

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

对所有更改测试以使其使用参数的数据源将对您的测试的源代码文件 (IE..CodedUITest1.cs)。 您不能修改 UIMap.Designer.cs 文件中的代码。

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

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

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

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

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

Input1

Input2

ExpectedResult

3

4

7

5

6

11

1200

24000

25200

创建该文件并将其添加到编码的 UI 测试项目。

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

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

  1. 解决方案资源管理器,打开包含编码的 UI 测试项目的解决方案然后打开编码的 UI 测试以进行编辑。

  2. 插入数据源属性直接在代码中,行中紧邻测试方法。 在下表中可以使用的示例数据源字符串复制到您的代码并作出必要的自定义。

    数据源类型

    datasource 特性

    CSV

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]

    Excel

    DataSource("System.Data.Odbc", "Dsn=Excel Files;Driver={Microsoft Excel Driver (*.xls)};dbq=|DataDirectory|\\Data.xls;defaultdir=.;driverid=790;maxbuffersize=2048;pagetimeout=5;readonly=true", "Sheet1$", DataAccessMethod.Sequential), TestMethod]

    测试在 Team Foundation server 的用例

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", "http://vlm13261329:8080/tfs/DefaultCollection;Agile", "30", DataAccessMethod.Sequential), TestMethod]

    XML

    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\data.xml", "Iterations", DataAccessMethod.Sequential), DeploymentItem("data.xml"), TestMethod]

    SQL Express

    [DataSource("System.Data.SqlClient", "Data Source=.\\sqlexpress;Initial Catalog=tempdb;Integrated Security=True", "Data", DataAccessMethod.Sequential), TestMethod]

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

    string paramVal = TestContext.DataRow["Input1"]
    
  3. 在**“解决方案资源管理器”**中,打开 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();
      }
      
  4. 保存对 CodedUITest1.cs 源代码文件所做的更改。

  5. 若要运行编码的 UI 测试,右击编码的 UI 测试在代码编辑器并选择 运行单元测试

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

指南

有关其他信息,请参见 测试使用 Visual Studio 进行附带的 2012 版–第 2 章:单元测试:测试。测试使用 Visual Studio 进行附带的 2012 版–第 5 章:自动化系统测试

请参见

参考

UIMap

Assert

概念

使用编码的用户界面测试来验证代码

编码的 UI 测试的最佳做法

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

其他资源

创建编码的 UI 测试