您能分享一下您的 CodedUI 测试项目的结构吗?
看看你如何分离测试、助手和 UIMap 会很有趣。
我就是这样做的。绝不是最好的或唯一的方法。
我有一个用于基本功能和启动/关闭 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();
}
}
我还为不同类型的测试(正面、负面、压力……)做单独的测试文件,然后我将它们组合成一个有序的测试
我使用多个项目。一个 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();
也许这不是最好的工作方式,但目前我就是这样做的。
为我的英语道歉。我希望它能启发你。
我强烈建议使用Code First或CodedUI 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 模式,您的页面模型最终会看起来非常像您的视图模型。