您能否分享一下CodedUI测试项目的结构?
看看你如何分开测试,助手,UIMaps会很有趣。
答案 0 :(得分: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;
}
}
我的所有* .uimaps都是基于应用程序的“页面”或“屏幕”分开的。这有时会被编码,并且你的* .uimaps会破坏。另外值得一提的是,所有的uimaps都包含页面上的单个操作,例如填写登录用户名或点击按钮。
然后我有一个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();
}
}
我也为不同类型的测试(正面,负面,压力......)分别做测试文件然后我将它们组合在一个有序的测试中
答案 1 :(得分:0)
我使用多个项目。一个常规包含其他项目的常用方法和常用UIMap(与常规项目的相应依赖关系)。
然后我为每个要自动化的桌面或Web应用程序创建了一个项目。 在项目中: 每个窗口的UIMap。 然后,每个测试实例都会使用每个测试实例。 每个测试的最佳结果。
我可以添加下一个例子:
***我无法发布图片 我当前测试解决方案结构的示例: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();
也许这不是最好的工作方式,但目前这就是我的工作方式。
为我的英语道歉。我希望它激励你。
答案 2 :(得分:0)
我强烈建议使用Code First或CodedUI Page Modeling(我写的)以高度可测试的方式在UI上创建抽象。
即使没有这些框架,您也可以轻松地在测试中编写抽象,以便您的测试解决方案看起来与您的主要解决方案代码非常相似。
我写了blog post关于它的外观。
通常,我会为应用程序中的每个主要工作流创建一个文件夹,为共享创建一个文件夹。这与您的应用程序的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
Page Models表示正在测试的页面(如果进行更现代的Web开发,则表示测试中的控件)。这些可以使用测试驱动方法编写,而实际上还没有开发UI。
创建帐户视图将包含用户名,密码和确认密码输入。
创建帐户页面模型将具有设置输入,验证页面状态,单击注册按钮等的方法。
测试将再次测试页面模型的界面。该实现将使用Coded UI编写。
如果您在网站中使用MVVM模式,您的页面模型最终会看起来非常像您的视图模型。