1

您能分享一下您的 CodedUI 测试项目的结构吗?

看看你如何分离测试、助手和 UIMap 会很有趣。

4

3 回答 3

1

我就是这样做的。绝不是最好的或唯一的方法。

我有一个用于基本功能和启动/关闭 appundertest 的静态实用程序类

public static class Utilities
{
    private static ApplicationUnderTest App;
    public static Launch()
    {
         try
         {
              App = ApplicationUnderTest.Launch(pathToExe);
         }
         catch (Microsoft.VisualStudio.TestTools.UITest.Extension.FailedToLaunchApplicationException e) {} 
    }
    public static Close()
    {
        App.Close();
        App = null;
    }
}

我所有的 *.uimap 都是基于应用程序的“页面”或“屏幕”分开的。这有时是 codedUI 搞砸了,您的 *.uimaps 可能会损坏。还值得一提的是,所有 uimap 都包含页面上的单个操作,例如填写登录用户名或单击按钮。

然后我有一个 NavMap 类,它包含我将在我的应用程序中执行的所有更高级别的“导航”。提出一些复杂的结构可能会更好,但我更喜欢只列出静态类中的列表方法

//you will need to include the uimap in a using statement
public static class NavMap
{
 public static void Login()
 {
  this.credsUIMap.EnterUsername();
  this.credsUIMap.ENterPassword();
  this.credsUIMap.ClickLoginButton();
 }

 public static void LogOut()
 {
  this.credsUIMap.ClickLogOutButton();
 }
}

最后我有测试形成的 codedUI 测试文件

[TestClass]
public class Tests
{
    [TestMethod]
    public void TestMethod1()
    {
        NavMap.Login();
    }
    [TestMethod]
    public void TestMethod2()
    {
        NavMap.LogOut
    }

    [ClassInitialize()]
    public static void ClassInitialize(TestContext testcontext)
    {        
        Utilities.Launch();
    }

    [ClassCleanup()]
    public static void ClassCleanup()
    {        
        Utilities.Close();
    }
}

我还为不同类型的测试(正面、负面、压力……)做单独的测试文件,然后我将它们组合成一个有序的测试

于 2014-01-09T22:40:00.007 回答
0

我使用多个项目。一个 General 包含其他项目的通用方法和通用 UIMaps(具有对 General 项目的相应依赖项)。

然后,我为每个要自动化的桌面或 Web 应用程序创建了一个项目。在项目中:每个窗口都有一个 UIMap。然后,每个测试实例 uimaps 都将被使用。每个测试的 ordertest grup。


我可以添加下一个示例:

***我还不能发布图片 我当前的测试解决方案结构示例:http: //i.stack.imgur.com/ekniz.png

从方法测试中调用记录的操作的方法是:

#using Application.UIMaps.Common_Application_UIClasses;
#using Application.UIMaps.Window_1_UIClases;

...

Common_Application_UI app_common = new Common_Application_UI();
Window_1_UI win1 = new Window_1_UI();

app_common.goToMenuThatOpenWindow1();

win1.setSomething("hello world!");
win1.exit();
app_common.exit();

也许这不是最好的工作方式,但目前我就是这样做的。

为我的英语道歉。我希望它能启发你。

于 2014-01-21T11:54:00.340 回答
0

我强烈建议使用Code FirstCodedUI Page Modeling(我编写的)之类的东西以高度可测试的方式在您的 UI 上创建抽象。

即使没有这些框架,您也可以轻松地在测试上编写抽象,以便您的测试解决方案看起来与您的主要解决方案代码非常相似。

我写了一篇关于这看起来如何的博客文章。

通常,我会为应用程序中的每个主要工作流创建一个文件夹,并为共享创建一个文件夹。这将与您的应用程序的 MVC 结构非常相似。您的应用程序中的每个控件都将成为您的测试项目中的页面模型。

Web Project
 |
 |
 Views
   |
   --- Accounts
   |   |
   |   --- Create
   |   --- Manage
   |
   |
   --- Products
         |
         --- Search


Test Project
    |
    |
    --- Page Models
           |
           --- Accounts
                 |
                 --- ICreateAccountPageModel (interface)
                 ---  CreateAccountPageModel (coded ui implementation)
                 --- IManageAccountPageModel
                 ---  ManageAccountPageModel
           --- Products
                 |
                 --- ISearch
                 ---  Search

    |
    --- Tests
          |
          --- Accounts
                 |
                 --- CreateAccountTests
                 --- ManageAccountTests
          --- Products
                 |
                 --- SearchProductTests

页面模型代表正在测试的页面(如果进行更现代的 Web 开发,则表示正在测试的页面)。这些可以使用测试驱动的方法编写,而无需实际开发 UI。

创建帐户视图将包含用户名、密码和确认密码输入。

创建帐户页面模型将具有设置输入、验证页面状态、单击注册按钮等的方法。

测试将再次测试您的页面模型的界面。该实现将使用 Coded UI 编写。

如果您在您的网站中使用 MVVM 模式,您的页面模型最终会看起来非常像您的视图模型。

于 2016-05-11T02:36:31.370 回答