回答
这是我这样做的方式。绝不是最好的或唯一的方法。
我有一个基本的功能和启动一个静态的公用事业类/关闭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的是在“页面”或“应用程序的屏幕”分隔基地。这有时会被编码UI拧紧,你的*。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();
}
}
最后我在测试中形成
[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();
}
}
我的codedUI测试文件也做不同类型的测试(正面,负面,压力,...)单独的测试文件然后我将它们组合在一个有序的测试
我使用多个项目。一个General包含其他项目的常用方法和通用UIMaps(对General项目具有各自的依赖关系)。
然后我为每个想自动化的桌面或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();
也许这不是最好的工作方式,但目前这是我的方式。
为我的英语道歉。我希望它能激励你。
我强烈推荐使用类似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
页面模型表示正在测试的页面(或者如果进行更现代的Web开发,则控制在测试下)。这些可以使用测试驱动方法编写,而UI实际上尚未开发。
创建帐户视图将包含用户名,密码和确认密码输入。
创建帐户页面的模型应该用于设置输入验证页面状态,点击注册按钮等
的测试将再次测试页面模型的接口方法。该实现将使用编码UI编写。
如果您在您的网站中使用MVVM模式,您的页面模型最终会看起来非常像您的视图模型。
- 1. CodedUI测试生成器选择项目
- 2. Gradle Android - 遗留测试项目结构的测试覆盖率
- 3. F#项目可以用作codedui测试的主要项目/主机吗?
- 4. 使用CodedUI测试测试YahooSite
- 5. 使用CodedUI测试测试WPF应用程序,编码的ui测试项目应共享解决方案吗?
- 6. 单元测试输出和项目结构建议--- CMake + Google测试框架
- 7. 单元测试目录结构
- 8. PyCharm - 项目结构测试和自动进口
- 9. GO单元测试结构化REST API项目
- 10. 用于硒测试的Python项目结构
- 11. 使用groovy从我的项目结构加载测试资源
- 12. C++结构测试
- 13. Ant为测试项目构建
- 14. 如果您没有Visual Studio Enterprise,是否可以创建CodedUI测试项目?
- 15. 无法构建使用Google测试的测试项目
- 16. CodedUI上的性能工具测试
- 17. 升级CodedUI测试到VS 2015
- 18. 在CodedUI测试中更改URL
- 19. CodedUI测试“刷新页面”错误
- 20. CodedUI测试:识别html实体字符
- 21. 添加App.Config中到2015年VS项目CodedUI打破测试执行的测试代理2013
- 22. Subversion项目结构?
- 23. Django项目结构,
- 24. Maven项目结构
- 25. CUDA项目结构
- 26. Android项目结构
- 27. Knockout.js项目结构
- 28. NUnit项目结构
- 29. AngularJS项目结构
- 30. GWT项目结构
非常感谢Zaq。 – stasde