[原创]AjaxControlToolkitTests自动测试框架完全解析之一:架构篇

简介:

最近在学习ASP.NET AJAX,自然要免不了要学习AjaxControlToolkit,而从第一次打开AjaxControlToolkit这个解决方案开始,第一个吸引我的确是它提供的那套超赞的自动测试框架,于是乎还没来得及学习AjaxControlToolkit提供的那些丰富的AJAX控件,就先琢磨起了它的 ToolkitTests项目,仔细研究一遍其自动测试框架以后,感觉收获颇丰,于是准备发几篇随笔分析一下这个自动测试框架的实现细节。这篇文章,我们先从整体架构的角度来说说ToolkitTests,分析一下它的组成结构,它是如果运行起来的,都使用了那些技术等。

理解本文所需的准备那么,还没安装过AjaxContorlToolkit的朋友,去 这里下载安装就行了,我安装的是VS2008这个版本,如果你还在用vs2005,那么可以从 这里下载安装早期版本即可,对于研究自动测试框架,这两个版本没有什么区别。关于AjaxContorlToolkit 的安装,就说这么多了,如果安装有问题,就baidu一下其他相关的帖子吧!如果以前没玩过这个东西的,还是先看看其运行起来的效果再看本文可能更好些。


toolkitTests00212.png

ToolkitTests自动测试框架的物理文件核心部分就这两个文件:Default.aspx,TestHarness.js ,另外相关的还有Default.master和Default.css,这里忽略不谈。框架的核心功能都写在前面那两个文件里,这个自动测试框架几乎完全是靠客户端的JavaScript实现的,其中TestHarness.js 文件定义了几乎所有的客户端逻辑,但是也离不开Default.aspx的配合。

这个框架涉及到的技术主要有JavaScript、HTML、DOM、ASP.NET,虽然其实现细节并不是完全面向对象的,不过其内在的架构设计思想可以理解为是完全面向对象的,而从面向对象的角度来思考,也可以帮助我们更容易理解整个框架的结构和设计思路,所以我们就先从抽象的OOAD的角度来分析整个框架的设计,经过分析整理,我认为整个自动测试框架是在如下几个对象(这里的对象是广义上的,不具体指某个类的实例)的相互协作实现的,TestHarness、TestSuit、TestCase、TestStep、TestInterface、TestResults以及 AutoTestMainForm、TestItem;配合下面的关键抽象图,我们分别说明一下各个对象在整个框架中扮演的角色和作用。
toolkitTests001.png
TestHarness:这个对象相当于整个自动测试的manager,它站在最高的位置统一协调指挥整个自动测试框架的运行。
TestSuit:这个对象表示一个测试套件,一个待测试的目标对象(TestItem)对应一个测试套件。
TestCase:这个对象表示一个测试方案,一个待测试的目标对象(TestItem)对应多个测试方案,或者可以理解为一个测试方案对应某一个待测试的功能,而每个待测试的对象都有很多功能待测试。
TestStep:这个对象表示一个测试步骤,每个测试方案可以包含一个以上的测试步骤。
TestInterface:这个对象是TestHarness的一个辅助对象,其主要作用就是负责封装显示测试结果的逻辑功能。
TestResults:这个对象是配合TestInterface完成其功能的辅助对象。
AutoTestMainForm:这个对象表示测试框架的主界面,其主要作用就是加载测试套件,显示测试结果,触发测试开始运行。
<Interface>registerTests:这是一个接口,是自动测试框架与可自定义的待测试对象之间的接口,自动测试框架通过这个接口实现热插拔待测试对象。

上面介绍的都是自动测试框架的内部对象,其结构还是比较清晰的,最核心的部分就是1个TestHarness对应N个TestSuit,1个 TestSuit对应N个TestCase,1个TestCase对应多个TestStep,记住这几个对象间的抽象关系,对你理解整个框架非常有帮助。

最后我们还剩下一个自动测试框架外面的对象,就是待测试的目标对象TestItem,它是一个实现了registerTests接口的对象,只有实现了这个接口,它才能被自动测试框架调用并执行其在内部实现接口时定义的多个TestCase,以及每个TestCase内部的TestStep。

至此,我们已经从概念上完整地介绍了整个架构,其实整个框架非常简单,其只对外提供了一个注册测试套件的接口,一个测试套件包含的是一个待测试案例要执行的所有测试方案,每个方案又可能分成若干个测试步骤;整个框架的运行过程大概如下:开始的时候,启动框架程序 AutoTestMainForm,其会通过某种可配置方式加载所有待测试对象,然后在AutoTestMainFrom界面有一个RunTests按钮,点击这个按钮触发开始执行自动化测试,通过TestHarness的统一协调,将所有待测试的TestItem通过每个TestItem实现的 registerTests接口,将其转换成TestSuit,然后得到一个TestSuit队列,再开始逐个调用TestSuit队列里的元素,执行自动化测试,自动化测试的结果通过TestInterface逐个显示在AutoTestMainFrom界面的结果区域。 下面通过一个时序图理解一下这段话,帮助大家最终透彻地理解整个自动测试框架的运行过程。
toolkitTests003.png

上面已经从概念上完整地介绍了整个 AjaxControlToolkitTests自动测试框架的架构和运行过程,其中涉及到的一些具体的抽象对象在实际的框架实现上可能有不同的表现形式,不过其具体的实现方式可以有很多种,但是其背后的思想才是精华,这篇文章关注的就是精华部分,下一篇文章我们会结合 AjaxControlToolkitTests项目,具体讨论其实现细节,虽然看似简单,但是其中还是有很多有意思的东西值得我们深入研究的,AjaxControlToolkitTests与以往我们所熟知的NUnit类型的单元测试框架最大的不同就是它的测试目标对象是在客户端浏览器上运行的ASP.NET AJAX控件,所以它的实现和运行过程都离不开浏览器,这也是它为什么几乎全部用JavaScript来实现的原因,也正是其有意思的地方!大家看过这篇文章可以思考一下,如果测试对象是网页上的元素,还得实现完全的自动化测试,也就是说要模拟用户与浏览器的交互行为,如果是你来实现,该怎么做呢?

最后,看楼主我徒手码了这么多字,不推荐一下是不是过意不去呀!那就请猛击这一行吧!by 鼠标左键


本文转自Justin博客园博客,原文链接:http://www.cnblogs.com/justinw/archive/2009/11/27/1611728.html,如需转载请自行联系原作者
相关文章
|
1天前
|
敏捷开发 开发框架 自然语言处理
深入理解软件测试中的自动化框架选择
【5月更文挑战第12天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速市场交付的关键组成部分。选择合适的自动化测试框架对于实现有效的测试策略至关重要。本文将探讨在选择自动化测试框架时应考虑的关键因素,包括框架的可扩展性、易用性、社区支持和集成能力。通过分析比较Selenium、Appium和TestNG等流行框架的特点,本文旨在为读者提供一个清晰的指南,帮助他们根据具体的项目需求做出明智的选择。
|
3天前
|
Java 中间件 测试技术
深入理解自动化测试框架Selenium的设计与实现
【5月更文挑战第10天】 本文旨在深度剖析自动化测试工具Selenium的核心架构与实现机制,通过对其设计理念、组件结构以及在实际软件测试中的应用进行详细解读,使读者能够全面理解Selenium在现代Web应用测试中的重要性和有效性。文章首先介绍Selenium的发展背景及其解决的问题,然后详细探讨其架构设计,包括各种驱动和API的作用,最后结合实际案例分析Selenium如何提高测试效率和准确性。
|
5天前
|
测试技术
测试基础 Junit单元测试框架
测试基础 Junit单元测试框架
11 2
测试基础 Junit单元测试框架
|
5天前
|
Java 测试技术 持续交付
自动化测试框架选型与实战:深入探索与应用
【5月更文挑战第8天】本文探讨了自动化测试框架的选型与实战应用,强调了其在软件质量保障中的重要性。选型原则包括考虑项目需求、技术栈、可扩展性和可维护性,以及社区支持和文档。介绍了Selenium、Appium、JUnit和Pytest等常用框架,并概述了实战应用的步骤,包括明确需求、搭建环境、编写测试用例、执行测试、分析结果、维护代码和持续集成。合理选型与实践能提升测试效率,保障项目成功。
|
8天前
|
敏捷开发 测试技术 持续交付
深入理解自动化测试:框架与实践
【5月更文挑战第5天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速交付过程的关键环节。本文将深入探讨自动化测试的核心概念、框架选择以及实际实施过程中的最佳实践。通过分析各种自动化测试工具和技术的优缺点,我们旨在为读者提供一种系统化的方法来构建和维护有效的自动化测试环境。
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试中AI驱动的决策框架设计与实现
【5月更文挑战第5天】 在软件测试领域,自动化测试已成为提升测试效率和质量的关键手段。然而,随着软件系统的复杂性增加,传统的自动化测试方法面临挑战,尤其在测试用例的生成、执行及结果分析等方面。本文提出一种基于人工智能(AI)的自动化测试决策框架,旨在通过智能化的算法优化测试过程,并提高异常检测的准确率。该框架结合机器学习和深度学习技术,能够自学习历史测试数据,预测高风险变更区域,自动生成针对性强的测试用例,并在测试执行过程中实时调整测试策略。此外,通过自然语言处理(NLP)技术,该框架还能对测试结果进行语义分析,进一步提供更深入的洞察。本研究不仅增强了自动化测试工具的智能性,也为软件质量保证提
|
13天前
|
数据管理 测试技术
深入理解自动化测试框架:以Selenium为例
【4月更文挑战第30天】 随着软件开发的快速发展,自动化测试已经成为保证软件质量和提升开发效率的重要手段。本文将深入探讨自动化测试框架的核心概念,并以广泛应用的开源工具Selenium为例,解析其架构、原理及在实际项目中的运用。通过实例分析与性能评估,旨在为读者提供一套系统的自动化测试解决方案,并探讨其在复杂应用场景下的优化策略。
|
13天前
|
敏捷开发 前端开发 JavaScript
深入理解自动化测试框架:以Selenium为例
【4月更文挑战第30天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快市场投放的关键步骤。本文聚焦于流行的自动化测试框架——Selenium,探讨其架构、核心组件以及如何有效地利用Selenium进行Web应用测试。通过分析真实案例,我们将揭示Selenium在实际项目中的应用优势与面临的挑战,并提出优化策略。文章的目的在于帮助测试工程师深入理解Selenium,提升其在复杂项目中的运用效率。
|
13天前
|
前端开发 IDE 数据可视化
深入理解与应用自动化测试框架Selenium的最佳实践
【4月更文挑战第30天】 本文将深入剖析自动化测试框架Selenium的核心原理,并结合最佳实践案例,探讨如何有效提升测试覆盖率和效率。文中不仅涉及Selenium的架构解析,还将提供针对性的策略来优化测试脚本,确保测试流程的稳定性与可靠性。通过实例演示,读者可以掌握如何在不同测试场景中灵活运用Selenium,以及如何处理常见的技术挑战。
|
13天前
|
JavaScript 安全 编译器
【TypeScript 技术专栏】TypeScript 与 Jest 测试框架
【4月更文挑战第30天】本文探讨了TypeScript与Jest测试框架的结合在确保代码质量和稳定性上的重要性。Jest以其易用性、内置断言库、快照测试和代码覆盖率分析等特点,为TypeScript提供全面的测试支持。两者结合能实现类型安全的测试,提高开发效率,并涵盖各种测试场景,包括异步操作。通过实际案例分析,展示了如何有效利用这两个工具提升测试质量和开发效率,为项目成功奠定基础。

推荐镜像

更多