CodedUI测试项目结构



你能分享你的CodedUI测试项目的结构吗?

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

这是我做这件事的方式。决不是最好或唯一的方式。

我有一个用于基本功能和启动/关闭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都是基于应用程序的"页面"或"屏幕"的独立映射。这有时被编码为UI出错,你的*.ui映射可能会中断。同样值得一提的是,所有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();
}
}

最后,我有了编码的UI测试文件,其中的测试形成了

[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。然后,每个测试实例都将使用uimap。每个测试的有序测试垃圾。


我可以添加下一个示例:

***我还不能发布图片我当前的测试解决方案结构示例:https://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();

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

为我的英语道歉。我希望它能激励你。

我强烈建议使用代码优先或CodedUI页面建模(我写的)之类的东西,以高度可测试的方式在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。

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

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

测试将再次测试页面模型的接口。实现将使用编码的UI编写。

如果您在网站中使用MVVM模式,那么您的页面模型最终将与视图模型非常相似。

最新更新