大型多视图项目CodedUI测试最佳设计与执行方法咨询
嘿,你已经把UIMap的拆分逻辑规划得很合理了,这种按视图独立维护UIMap的方式,后期维护起来会省心很多!针对你困惑的「怎么运行这些测试」,我来给你梳理清晰的步骤:
第一步:把UIMap和测试类绑定
首先,你需要为每个视图创建对应的测试类,在类里实例化对应的UIMap,这样才能调用录制好的元素和操作。举个例子,针对Dir1 View1的测试类可以这么写:
[CodedUITest] public class Dir1View1Tests { // 实例化对应视图的UIMap private UIMap11 _uiMap11; // 测试初始化:每个测试方法执行前都会运行 [TestInitialize] public void Setup() { _uiMap11 = new UIMap11(); // 这里还可以加通用的准备操作,比如启动应用、导航到Dir1 View1 CommonFunctions.NavigateToView("Dir1View1"); } // 测试清理:每个测试方法执行后运行 [TestCleanup] public void Teardown() { // 比如关闭当前视图、重置应用状态 CommonFunctions.CleanupCurrentView(); } }
第二步:编写具体的测试方法
在每个测试类里,你可以结合录制的UIMap元素和手动编码,编写针对性的测试逻辑。比如验证View1里的按钮点击功能:
[TestMethod] [TestCategory("Dir1")] // 加分类方便后续批量运行 public void TestDir1View1ButtonClick() { // 1. 用UIMap里录制的元素定位按钮 var submitButton = _uiMap11.UISubmitButtonElement; // 2. 执行点击操作 Mouse.Click(submitButton); // 3. 验证操作结果(比如弹窗文本是否符合预期) var successDialog = _uiMap11.UISuccessDialogElement; Assert.IsTrue(successDialog.Exists, "点击按钮后未弹出成功弹窗"); Assert.AreEqual("操作成功", successDialog.Text); }
第三步:运行测试的几种常用方式
1. 用Visual Studio测试资源管理器
这是最直观的方式:
- 打开Visual Studio,顶部菜单栏选择「Test > Test Explorer」,调出测试面板
- 面板里会列出所有标记了
[TestMethod]的方法,你可以:- 右键单个测试方法,选择「Run Selected Tests」运行单条测试
- 右键测试类/分类,批量运行一组测试
- 点击面板顶部的「Run All Tests」按钮,运行所有测试
2. 命令行运行(适合CI/CD或自动化脚本)
如果需要在构建流水线或脚本里自动运行测试,可以用vstest.console.exe工具(Visual Studio自带,路径一般在C:\Program Files (x86)\Microsoft Visual Studio\[版本号]\Community\Common7\IDE\Extensions\TestPlatform这类目录下):
# 运行单个测试方法 vstest.console.exe "你的测试项目路径\Bin\Debug\YourCodedUITestProject.dll" /Tests:Dir1View1Tests.TestDir1View1ButtonClick # 运行某个分类下的所有测试 vstest.console.exe "你的测试项目路径\Bin\Debug\YourCodedUITestProject.dll" /TestCaseFilter:"TestCategory=Dir1"
3. 分组运行(按视图/目录)
你可以给测试方法加上[TestCategory]属性(比如示例里的[TestCategory("Dir1")]),然后在Test Explorer里点击「Group By > Test Category」,就能按目录分组选择运行测试了。
额外的小建议
- 你的
CommonScenarios.cs和CommonFunctions.cs可以用来封装通用逻辑,比如导航到某个视图、登录、清理测试环境等,所有测试类都可以直接调用,减少重复代码 - 每个UIMap只对应一个视图的元素,这种拆分方式非常好,能避免不同视图的元素命名冲突,后期修改某个视图的UI时,只需要更新对应的UIMap就行
- 测试方法要保持独立性:每个测试方法最好只验证一个功能点,并且通过
[TestInitialize]和[TestCleanup]保证每次测试的初始状态一致,避免测试之间互相影响
内容的提问来源于stack exchange,提问作者namiol
相关产品推荐
相关产品推荐

