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

自动测试通过其用户界面 (UI) 驱动应用程序,称为"编码 的 UI 测试 (CUITs)。 这些测试包括功能测试 UI 控件。 它们可以验证整个应用程序,包括其用户界面,正常工作。 编码的 UI 测试特别有用具有验证或其他逻辑。用户界面的位置,例如位于网页。 它们还经常用于自动运行现有手动测试。

如下图所示,一个典型的开发体验可能是一个其中,最初,可以生成应用程序 (f5) 并通过 UI 控件单击验证内容是否正常工作。 您可能决定创建编码的测试,所以不需要继续手动测试应用程序。 根据您的应用程序测试的特殊功能,您可以编写代码功能测试,或用于也可能不包含测试在 UI 级别的集成测试。 如果希望直接访问某些业务逻辑,您可能代码单元测试。 但是,在某些情况下,包括测试各种 UI 控件在您的应用程序可以是有用的。 编码的 UI 测试可以自动初始 (f5) 方案,验证代码改动不影响应用程序的功能。

在应用程序开发过程中进行测试

创建编码的 UI 测试非常容易。 当 CUIT 在后台,测试生成器运行手动执行测试。 还可以指定什么值应出现在特定字段。 CUIT 测试生成器录制操作并生成从其代码。 在测试创建后,可以编辑该在既可用于修改序列的专用的编辑器。

或者,如果您在 Microsoft 测试管理器中记录的测试用例,可以从生成的代码。 有关更多信息,请参见录制和播放手动测试

专用 CUIT 测试生成器,并编辑轻松创建,并编辑编码的 UI 测试,即使您的主程序技能在测试中心而不是代码。 但是,如果您是开发人员,并且希望扩展测试使用一种更高级的方法,构造代码,使其非常简单的复制和调整。 例如,您可以跟踪测试在网站购买操作,然后编辑生成的代码添加购买许多项目的循环。

要求

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

有关编码的 UI 测试支持哪些平台和配置的更多信息,请参见支持编码的 UI 测试和操作录制的配置和平台

主题内容

  • 创建编码的 UI 测试

    • main 过程

    • 启动和停止应用程序

    • 验证 UI 控件属性

  • 自定义编码的 UI 测试

    • 生成的代码

    • 编码的 UI 控件事件和属性

    • 调试

  • 接下来的内容

创建编码的 UI 测试

  1. 创建编码的 UI 测试项目。

    编码的 UI 测试必须在编码的 UI 包含测试项目。 如果还没有编码的 UI 测试项目,请创建一个。 在 解决方案资源管理器,解决方案中的快捷菜单上,选择 添加新建项目 然后选择 Visual BasicVisual C#。 然后,选择 测试编码的 UI 测试

    • 我不会看到 编码的 UI 测试 项目模板。

      可以使用不支持编码的 UI 测试 Microsoft Visual Studio 2012 的版本。 创建编码的 UI 测试,必须使用 Visual Studio 旗舰版 或 Visual Studio 高级专业版。

  2. 添加为编码的 UI 测试文件。

    如果您创建了一个编码的 UI 项,第一 CUIT 文件会自动添加到中。 若要添加另一个测试文件,请打开在编码的 UI 的快捷菜单测试项目,指向 添加,然后选择 编码的 UI 测试

    创建编码的 UI 测试

    为编码的 UI 测试生成代码 对话框中,选择 录制操作、编辑 UI 映射或添加断言

    选择记录操作

    编码的 UI 测试生成器随即显示,Visual Studio 最小化。

    编码的 UI 测试生成器

  3. 记录序列

    开始记录,选择 录制 图标。 执行要在应用程序要测试的事件,包括启动应用程序,则需要它。

    例如,因此,如果测试 Web 应用程序,您可能启动浏览器,导航到该网站和登录到应用程序。

    暂停记录,例如,如果您必须处理来信,选择 暂停

    误 记录的删除事件,选择 编辑操作

    将复制 您的事件,选择 生成代码 图标和类型的生成代码 一个名称和说明的编码的 UI 测试方法。

  4. 验证在 UI 字段的值 (例如文本框

    选择在编码的 UI 测试生成器 添加断言,然后选择在运行的应用程序的 UI 控件。 在出现属性的列表,选择一个属性,例如,在文本框中 文本。 在快捷菜单上,选择 添加断言。 在对话框中,选择比较运算符比较、值和错误消息。

    关闭断言窗口并选择 生成代码

    编码的 UI 测试目标元素

    提示

    交替显示记录事件之间和验证值。生成代码中的每个角色顺序或验证结束时。如果需要,您稍后可以插入新的事件和验证。

    有关详细信息,请参见 验证控件属性。

  5. 查看生成的测试代码

    若要查看生成的代码,关闭 UI 测试生成器"窗口。 在代码中,可以看到您为每个步骤的名称。 代码在创建的 CUIT 文件:

        [CodedUITest]
        public class CodedUITest1
        { ...
          [TestMethod]
          public void CodedUITestMethod1()
          {
              this.UIMap.AddTwoNumbers();
              this.UIMap.VerifyResultValue();
              // To generate more code for this test, select 
              // "Generate Code" from the shortcut menu.
          }
        }
    
  6. 添加更多操作和断言

    将光标放在适当点在测试方法,然后在快捷菜单上,选择 为编码的 UI 测试生成代码。 此时将插入新代码。

  7. 编辑测试操作和断言的详细信息

    打开 UIMap.uitest。 此文件位于打开编码的 UI 测试编辑器,可以编辑任何序列来记录和编辑断言。

    编码的 UI 测试编辑器

    有关更多信息,请参见使用编码的 UI 测试编辑器编辑编码的 UI 测试

  8. 运行测试

    使用测试 Explorer 或打开在测试方法的快捷菜单,然后选择 运行测试。 有关如何运行测试的更多信息,请参见 用测试资源管理器运行单元测试 资源管理器和 其他选项的运行编码的 UI 测试 在 下一个是什么? 部分本主题末尾的。

本主题的其余部分提供有关步骤的更多详细信息此过程。

有关更详细的示例,请参见 演练:创建、编辑和维护编码的 UI 测试。 在本演练中,您将创建一个简单的 windows 演示基础 (WPF) 应用程序演示如何创建,编辑,并且,维护编码的 UI 测试。 本演练为更正由各种计时问题和控件重构中断的测试提供了解决方案。

Dd286726.collapse_all(zh-cn,VS.110).gif启动和停止测应用程序

我不启动,然后停止"我的应用程序、浏览器或将数据库中的每一个都单独测试。 如何避免该?

  • 系统必备 如果不希望录制启动受测应用程序,必须启动的应用程序,在选择 录制 图标之前。

  • 系统必备在测试结束时,测试运行终止的过程。 如果启动了在所测试的应用程序,应用程序通常关闭。 如果不希望测试结束应用程序,则退出时,必须添加 .runsettings 文件添加到解决方案和使用 KeepExecutorAliveAfterLegacyRun 选项。 有关更多信息,请参见使用 .runsettings 文件配置单元测试

  • 系统必备可以添加一个在每个测试方法开始时运行代码的测试初始化方法(通过 [TestInitialize] 特性标识)。 例如,可以开始从 TestInitialize 方法的应用程序。

  • 系统必备可以将测试清理方法,确定由通过 [testcleanup] 特性,运行代码在每个测试方法结束时。 例如,可以从 TestCleanup 方法调用用于关闭应用程序的方法。

Dd286726.collapse_all(zh-cn,VS.110).gif验证 UI 控件属性

使用**“编码的 UI 测试生成器”**,可以向测试的 UIMap 添加用户界面 (UI) 控件,也可以为使用 UI 控件的断言的验证方法生成代码。

若要为 UI 控件生成断言,请在编码的 UI 添加断言 工具测试生成器并将其拖动到应用程序控制的测试要验证是否正确。 在框确定控件的轮廓时,释放鼠标。 将立即在 UIMap.Designer.cs 文件中创建该控件类代码。

编码的 UI 测试目标元素

此控件的属性。添加断言 对话框现在列表。

另一种导航到特定控件将选择箭头 (<<) 外接 UI 控件图的视图。 若要查找父,同级控件或子控件,可以任意位置。映射可以单击并使用箭头键在该节点构树附近移动。

编码的 UI 测试属性

  • 我不显示任何特性,当我选择"我的应用程序控件时,"或"不会在 UI 控件图的控件。

    在应用程序代码中,要验证的控件必须具有唯一 ID,例如 HTML ID 属性或 WPF X:uid。 您可能需要更新应用程序代码添加这些 ID。

接下来,打开在属性的快捷菜单要验证的 UI 控件,然后指向 添加断言。 在 添加断言 对话框中,为断言选择 比较运算符,例如 AreEqual,然后键入断言的值在 比较值

编码的 UI 测试断言

当您添加的所有时的断言选择该测试,确定

若要生成断言代码并将控件添加到 UI 映射,请选择 生成代码 图标。 键入一个名称编码的 UI 测试方法和说明的方法,将添加为注释方法的。 选择 添加并生成。 然后,选择 关闭 图标关闭 编码的 UI 测试生成器。 这将生成代码类似于下面的代码。 例如,因此,如果输入的名称为 AssertForAddTwoNumbers,代码类似于以下示例:

  • 添加对的调用断言方法 AssertForAddTwoNumbers 在编码的 UI 测试文件的测试方法:

          [TestMethod]
          public void CodedUITestMethod1()
          {
              this.UIMap.AddTwoNumbers();
              this.UIMap.AssertForAddTwoNumbers();
          }
    

    您可以编辑此文件更改步骤和断言的顺序,或创建新测试方法。 若要添加更多代码,将光标放在测试方法,并在快捷菜单中选择 为编码的 UI 测试生成代码

  • 将名为 AssertForAddTwoNumbers 的方法添加到您的 UI 映射 (UIMap.uitest)。 此文件位于打开编码的 UI 测试编辑器,可以编辑断言。

    使用编码的 UI 测试编辑器编辑断言

    有关更多信息,请参见使用编码的 UI 测试编辑器编辑编码的 UI 测试

    还可以查看断言方法的生成代码在 UIMap.Designer.cs 的。 但是,不能编辑此文件。 如果需要创建一个适合的版本代码,请方法复制到另一个文件 (如 UIMap.cs,将重命名方法,并编辑它们即可。

          public void AssertForAddTwoNumbers()
          {
              ...
          }
    
  • 我想要选择的控件失去焦点和消失,当我尝试选择从编码的 UI 测试生成器工具的添加断言时。如何选择控件?

    选择使用键盘的隐藏控件

    有时,那么,当 添加控件和验证它们的属性,可能必须使用键盘。 例如,那么,当您尝试记录时使用上下文菜单控件的编码的 UI 测试,菜单项列表在控件中会失去焦点,然后消失,当您尝试选择添加断言工具从编码的 UI 测试时生成器。 这将在下面的图中所示,在 Internet Explorer 的上下文菜单将失去焦点和消失,如果尝试选择其与添加断言工具。

    CodedUITest_SelectControlKeyboard

    若要使用键盘选择 UI 控件,请将鼠标指针悬停在使用鼠标的控件。 然后同时按住 Ctrl 键和 键。 释放键。 该控件由代码的 UT 记录测试生成器。

    警告

    如果您使用的是 Microsoft Lync,必须关闭 Lync,在开始编码的 UI 测试生成器之前。Microsoft Lync 影响 Ctrl+I 键盘快捷键。

  • 我无法记录在控件的鼠标悬停。是否有方式解决此问题?

    手动记录的鼠标悬停

    在某些情况下,使用编码的 UI 的特定控件测试可能需要使用键盘手动记录鼠标悬停事件。 例如,在中,测试时 windows 窗体或 windows 演示基础 (WPF) 应用程序,可能存在自定义代码。 当用户将鼠标指针悬停在其上时,或者,可能为悬停定义的特殊行为在一个控件,如展开节点构树的节点。 若要测试条件 (如这些,必须手动通知编码的 UI 测试生成器将鼠标指针悬停在控件按预定义的键盘键。

    当执行时编码的 UI 测试,将鼠标指针悬停在控件。 然后,而您按住在您的键盘,移位和 R 键请按住 Ctrl。 释放键。 鼠标悬停事件。代码的 UT 记录测试生成器。

    CodedUI_Hover

    在生成测试方法后,代码类似于下面的示例将添加到 UIMap.Desinger.cs 文件:

    // Mouse hover '1' label at (87, 9)
    Mouse.Hover(uIItem1Text, new Point(87, 9));
    
  • 捕获鼠标悬停事件键指定在"我的环境中的其他位置使用。我是否能更改默认键分配?

    配置的鼠标悬停键盘分配

    如果需要,用于将在编码的 UI 的鼠标悬停事件 Ctrl+Shift+R 的默认值键盘分配测试可以配置使用不同的密钥。

    警告

    在一般情况下应不必更改鼠标悬停事件的键盘分配。当重新分配键盘分配时,请注意。您的选择可能在其他位置已被使用 Visual Studio 中或测试的应用程序。

    若要更改键盘分配,您必须修改以下配置文件:

    <drive letter:>\program files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CodedUITestBuilder.exe.config

    在配置文件中,更改 HoverKeyModifier 和 HoverKey 键的值可以修改键盘分配:

    <!-- Begin : Background Recorder Settings -->
    <!-- HoverKey to use. -->
    <add key="HoverKeyModifier" value="Control, Shift"/>
    <add key="HoverKey" value="R"/>
    
  • 我存在问题记录网站的鼠标悬停。是否有这样的一个解决,也是?

    设置隐式中为浏览器。

    在很多网站,那么,当您将鼠标指针悬停在特定控件时,会展开以显示更多详细信息。 通常,这些类似于在桌面应用程序的菜单。 由于这是一个常见模式,编码的 UI 测试以启用浏览的 Web 的隐式悬停。 例如,因此,如果在 Internet Explorer 中记录悬停,则会收到。 这些操作可能导致获取订户多余的悬停。 因此,隐式悬停记录和 ContinueOnError 设置为在 UI 中 true 测试配置文件。 如果悬停操作失败,这允许继续播放。

    若要启用隐式悬停记录在浏览器中,打开配置文件:

    <drive letter:>\program files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CodedUITestBuilder.exe.config

    验证配置文件具有密钥 RecordImplicitiHovers 设置为来 true 的值如下面的示例所示:

    <!--Use this to enable/disable recording of implicit hovers.-->
    <add key="RecordImplicitHover" value="true"/>
    

自定义编码的 UI 测试

在创建后使用任何在 Visual Studio 中,的以下工具编码的 UI 测试,您可以编辑该:

Dd286726.collapse_all(zh-cn,VS.110).gif生成的代码

当您选择 生成代码时,代码几节创建的:

  • 在测试方法中的一行。

        [CodedUITest]
        public class CodedUITest1
        { ...
          [TestMethod]
          public void CodedUITestMethod1()
          {
              this.UIMap.AddTwoNumbers();
              // To generate more code for this test, select 
              // "Generate Code" from the shortcut menu.      }
        }
    

    在此方案中右击添加录制的操作和验证。 可以手动编辑它扩展或修改代码。 例如,可以在循环可以将某些代码。

    还可以添加新测试方法的类似地将代码添加到它们。 每个测试方法必须具有 [TestMethod] 属性。

  • 在 UIMap.uitest 的方法

    此方法包括您记录或值来验证事件的详细信息。 可以通过打开 UIMap.uitest 编辑此代码。 它在删除或重构日志的事件的专用的编辑器中打开。

    还可以查看在 UIMap.Designer.cs 的生成的方法。 此方法执行运行测试时录制的操作。

    // File: UIMap.Designer.cs
    public partial class UIMap
    {
      /// <summary>
      /// Add two numbers
      /// </summary>
      public void AddTwoNumbers()
      { ...   }
    }
    

    警告

    您不能编辑此文件,因为它会重新生成,当您创建更多测试时。

    可以进行调整的版本这些方法通过复制到 UIMap.cs。 例如,您可以创建可从测试方法调用的参数化的版本:

    // File: UIMap.cs
    public partial class UIMap // Same partial class
    {
      /// <summary>
      /// Add two numbers – parameterized version
      /// </summary>
      public void AddTwoNumbers(int firstNumber, int secondNumber)
      { ...   // Code modified to use parameters.
      }
    }
    
  • 在 UIMap.uitest 的说明

    这些声明表示用于测试应用程序的 UI 控件。 生成的代码对其运行控件和访问其属性。

    还可以使用它们,如果您编写代码。 例如,可以设置测试方法选择 Web 应用程序的超链接,在文本框中键入一个值或分支并根据在字段的值的不同测试的操作。

    可以添加多个编码的 UI 测试以及多个 UI 映射对象和文件以便测试大型应用程序。 有关更多信息,请参见使用多个 UI 映射测试大型应用程序

有关生成的代码的更多信息,请参见 编码的 UI 测试剖析

Dd286726.collapse_all(zh-cn,VS.110).gif编码的 UI 控件事件和属性

在编码的 UI 测试中使用 UI 测试控件时,这些控件分成两部分:操作和属性。

  • 第一部分包括可对 UI 测试控件执行的操作。 例如,编码的 UI 测试可以模拟鼠标点击 UI 测试控件或模拟键盘输入来影响 UI 测试控件。

  • 第二部分包括允许您获取和设置 UI 测试控件的属性。 例如,编码的 UI 测试可以获取计数。ListBox的项目设置,或 CheckBox 到选定的状态。

访问 UI 测试控件的操作

若要对 UI 测试控件的事件,如单击鼠标或键盘事件,在 MouseKeyboard 选件类使用方法:

  • 若要对 UI 测试控件执行面向鼠标的操作(如鼠标单击),请使用 Click

    Mouse.Click(buttonCancel);

  • 若要执行面向键盘的操作(如在编辑控件中键入内容),请使用 SendKeys

    Keyboard.SendKeys(textBoxDestination, @"C:\\Temp\\Output.txt");

访问 UI 测试控件的属性

获取和设置 UI 控件的特定属性值,可以直接获取或设置控件的属性值,也可以使用具有特定属性的名称 UITestControl.GetPropertyUITestControl.SetProperty 方法希望获取或设置。

GetProperty 返回对象,从而强制转换为适当的 TypeSetProperty 为属性的值接受一个对象。

从 UI 测试控件直接获取或设置属性

  • 从 T:system.exception 派生的控件:Microsoft.VisualStudio.TestTools.UITesting.UITestControl,如 T: Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlList 或 T: Microsoft.VisualStudio.TestTools.UITesting.WinControls.WinComboBox),可以直接获取或设置它们的属性值,如下所示:

    int i = myHtmlList.ItemCount;
    myWinCheckBox.Checked = true;
    

从 UI 测试控件获取属性

  • 若要从控件获取属性值,请使用 GetProperty

  • 若要指定要获取的控件属性,请在每个控件中使用来自 PropertyNames 类的相应字符串作为 GetProperty 的参数。

  • GetProperty 返回相应的数据类型,但此返回值将被强制转换为 Object。 然后必须将返回 Object 为正确的类型。

    示例:

    int i = (int)GetProperty(myHtmlList.PropertyNames.ItemCount);

设置 UI 测试控件的属性

  • 若要设置控件中的属性,请使用 SetProperty

  • 若要指定控件的属性设置,请使用从 PropertyNames 选件类的相应字符串作为的第一个参数 SetProperty,与该属性的值作为第二个参数。

    示例:

    SetProperty(myWinCheckBox.PropertyNames.Checked, true);

Dd286726.collapse_all(zh-cn,VS.110).gif调试

可以分析编码的 UI 测试中使用编码的 UI 测试日志。 编码的 UI 测试日志的筛选器并记录有关编码的 UI 测试运行的重要信息。 记录的布局可以调试快速问题。 有关更多信息,请参见使用编码的 UI 测试日志分析编码的 UI 测试

下一个是什么?

运行编码的 UI 的其他选项测试: 本主题可以运行编码的 UI 直接从 Visual Studio 测试,如前面所述。 此外,可以运行自动 UI 测试从 Microsoft 测试管理器,或者从 Team Foundation Build。 当编码的 UI 测试时自动完成,则必须与桌面交互,则在运行单元测试时,与其他自动测试。

添加为自定义控件支持: 编码的 UI 测试框架并非支持每个可能的 UI,可能不支持您要测试的 UI。 例如,不能立即创建 Microsoft Excel UI 的编码的 UI 测试。 然而,可以创建编码的 UI 测试框架的扩展来支持自定义控件。

编码的 UI 测试通常用于自动化手动测试。 有关其他指南,请参见 测试使用 Visual Studio 进行附带的 2012 版–第 5 章:自动化系统测试。 有关手动测试的更多信息,请参见 使用 Microsoft 测试管理器创建手动测试用例。 有关自动化的更多信息,请参见系统测试 使用 Microsoft 测试管理器创建自动测试

外部资源

Dd286726.collapse_all(zh-cn,VS.110).gif指南

测试使用 Visual Studio 进行附带的 2012 版–第 2 章:单元测试:测试。

测试使用 Visual Studio 进行附带的 2012 版–第 5 章:自动化系统测试

Dd286726.collapse_all(zh-cn,VS.110).gifFAQ

编码的 UI 测试常见问题- 1

编码的 UI 测试常见问题 -2

Dd286726.collapse_all(zh-cn,VS.110).gif论坛

Visual Studio UI 自动测试 (包括 CodedUI)

请参见

任务

演练:创建、编辑和维护编码的 UI 测试

参考

UIMap

Assert

概念

使用 Visual Studio 诊断工具提高质量

编码的 UI 测试剖析

编码的 UI 测试的最佳做法

使用多个 UI 映射测试大型应用程序

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

从 Visual Studio 2010 升级编码的 UI 测试

其他资源

使用编码的 UI 测试编辑器编辑编码的 UI 测试

通过现有操作录制生成编码的 UI 测试