最近对测试框架进行了重构,也对其中原有的一些设计进行了反思。其中不免有一些自我感觉得意之处,因此写出来和大家分享。这是一个重构的过程,所以将以重构的思路来讲述。
重构对于一个系统来说,往往是必要的。他的必要性往往不在于重构的好处,而在于系统的成长的趋势。一个好的系统在初步阶段,在很多方面都会存在成长的空间,就如人在小时候长身体一样,如果补充的营养跟不上,一生都可能会受到影响。
对于我们这个系统来讲,目前也正是初步使用验证阶段,所以重构的可能性非常大。当然了,如果从成本角度来看,在系统重构的时候,必须对系统的使用做严格的管理。幸好我们在早期对这方面比较谨慎,使用范围没有盲目扩展。因此重构所带来的影响会被缩小到最小范围。
那么先来说说这次重构的目的。在原先的框架系统中,设计思路是在Delphi中编写自动化测试,代码通过调用控件的适配接口,最终完成对界面的操作。而这些代码,也被编译到DLL中。这里面就有一些问题:
-
每一次修改,都必须重新编译。
-
由于DLL被程序Load,不可直接覆盖(替换),所以必须重新启动目标测试系统。
-
基本上不可以部分执行脚本。
-
自动化代码和自动化框架代码同时暴露给用户
再一次说明一下原先的设计。原先的设计中,自动化代码将作为DLL的一部分被编译进去,而这个DLL会作为程序系统的一部分被装载。本来我想用图形来表示,突然感觉其实可以多多用表达式来表示,我想做一个尝试,这样可以免去图片的麻烦。下面是系统的表示:
被测试系统(自动化框架(自动化代码))
其中括号表示包含关系。可以看到,最终只有一个系统在运行。
在这里关注一下列出的问题重点,这在重构过程中非常重要。因为重构并不是盲目的。需要做到目标准确不偏移。简单点说就是将好刀用在刀刃上。并且要保障重构的结果能呼应最初的目的。并且这次重构属于系统级别的重构,重点不是一些类的调整,而是整天解决方案的革新。
为了解决这些问题,我们思考从脚本入手,进行自动化测试框架的重构。但在做之前,必须考虑好重构系统的稳定性如何保障。系统级别的重构和单元级别的重构的保障机制应该是不一样的。这不得不提到单元测试,但仅仅是单元测试是无法保障的。
第一、系统中大部分类可能都有所改变。针对原先的单元测试必须重新编写。
第二、系统级别的测试不能被单元测试替代。因此非常有必要持续进行。
这里,我并没有做方法上深入探究,但是测试这件事必须做。电脑暂时做不了的事,人来做。我们在单元测试的基础上,持续迭代地对重构后的系统进行系统测试,这样能尽量快速地发现重构中失误所在。
后来发现,在重构过程中,对新的方法编写测试用例更加有效。因为重构往往是在时间紧急的情况下进行的,所犯错误可能比初期编码阶段更容易。这个阶段,旧的单元测试代码和新的单元测试代码能够很好提升系统的稳定性。
现在讲一下重构的过程。重构的目标是,将自动化代码的编写改变为XML的配置。自动化框架通过读取配置,并解析每一段脚本,自动执行。我们先不谈其中的实现技术细节,而是先来谈谈这样的好处。
- 脚本是解释性的,因此框架DLL不需要重新编译。
- 脚本由于成为配置,那么其管理也就变得更加容易和简单。
- 可以让测试人员,完全只是关心业务上的脚本。
- 从配置中,可以方便地记录每一步的执行内容。原先的编译方式,失去了很多信息。
- 配置可以动态组织,这样有可能实现部分脚本的执行。
重构,就是发现问题到解决问题的过程。相对于设计的不同,在于重构是在现有设计的基础上发现问题。
下面说说实现过程中的细节。在这个过程中,最关键的是脚本的解析。由于之前,针对所有控件,都已经有了封装的接口,因此在这个基础上,我们考虑到采用SOAP的实现思想,通过对接口方法的Invoke,来实现最终的脚本执行。
要实现这个Invoke的过程,就必须深入了解一下Delphi是如何实现SOAP的。这当然是另外一个话题了。有兴趣的可以看一下Invoker.pas中的代码。要实现Invoke的过程,可以有两个选择:
- 完全参考SOAP的调用约束
- 自己定义结构,自己解析转换参数,实现Invoke
我实际是选择了后者,虽然说对于我理解Invoke原理有了很大帮助,但后来还是证实我的选择不是最好的。先不管这个了。
完成了Invoke的过程,下面就是脚本的设计了。我为脚本的设计,增加了几方面的内容:
- 定义TestWindow的概念,表示每一个被测试和编码的窗体。
- 定义TestStep的概念,表示对用户界面发出的每一次命令。
- 定义TestPackage概念,表示多个TestStep的组合。
- 定义TestWindow和TestStep之间的关系。TestWindow包含多个TestStep。每一个TestStep包含多个TestWindow,表示这个命令可能触发的新的测试窗体。
定义这些概念是非常有意义的。可以帮助我们清晰地理解系统,也非常便于以后的技术交流。这也说明了自动化测试框架本身设计的完善和进步。
在定义完成这些概念后,就是完成一个脚本的配置工具。并在这个编辑器上实现脚本的调试和日志功能。调试方面,我们选择了HTTP的调用方式。其实可以选择很多其他方式。一来HTTP的方式,实现起来很简单。二来支持HTTP后,调用自动化测试,只需要通过HTTP就可以了。FinalBuilder和一些Shell都支持这种方式。这对于以后的自动化调用是非常有意义的。
现在系统的架构变了。不再是原先的一个系统了,因为这里引入了一个辅助系统,可以称之为自动化的IDE。再使用上面的方式,我们描述以下系统:
被测试系统(自动化框架)= IDE(自动化脚本)
等号表示系统交互是双方向的。IDE向系统发送脚本,系统向IDE发送LOG。
好了,这次重构基本都完成了。整个过程的中心在于脚本的结构迁移。而重构的前因和结果也都进行了对比。虽然说很多方面的细节也许并没有考虑清楚。但是这次框架设计的重构,还是非常有价值的!而且整个重构的过程,更是框架本身的完善过程。
希望自动化测试框架越来越好!
分享到:
相关推荐
软件测试中自动化测试框架:设计的重构单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定...
原先的框架系统,思路是将自动化代码,通过调用控件的 最近对测试框架进行了重构,也对其中原有的一些设计进行了反思。其中不免有一些自我感觉得意之处,因此写出来和大家分享。这是一个重构的过程,所以将以重构...
为了解决这些问题,自动化测试框架的概念应运而生,旨在降低实施和维护成本,让测试团队专注于设计测试用例而非测试脚本的开发。 #### 常见的自动化测试框架类型 自动化测试框架由一系列假设、概念和实践组成,旨在...
基于脚本的自动化测试框架是实现这一目标的有效工具,它允许开发者和测试工程师编写可重复执行的测试脚本,以验证软件的功能和性能。本文将深入探讨这一主题,旨在帮助读者理解和掌握基于脚本的自动化测试框架的核心...
该项目是一款基于Python的接口和Web自动化测试框架设计源码,包含54个文件,涵盖37个Python脚本、10个PNG图像文件、2个YAML配置文件、1个.gitignore文件、1个LICENSE文件、1个Markdown文件、1个YAML文件和1个TXT文件...
这些框架包括JUnit(Java)、NUnit(.NET)、PyTest(Python)等,它们都支持自动化测试,使得开发者能够对代码进行持续验证。 测试模式是指在测试过程中经常出现的可重复使用的设计策略,这些模式可以帮助我们编写...
Appium作为一个功能强大的移动端自动化测试框架,其最大的优势在于它对多平台、多架构以及多编程语言的支持。它不仅提供了一系列的技术来实现Android和iOS等移动操作系统的自动化测试,还因为它开放的源代码和与...
本篇文章主要介绍了Java接口自动化测试框架及断言详解,包括重构Get方法、JSON解析、使用TestNG方法进行测试断言等。通过本篇文章,读者可以了解Java接口自动化测试框架及断言详解的知识点,并且可以应用于实际项目...
本文将深入探讨软件回归测试自动化框架的构建原理、关键技术及实际应用案例,特别是以QuickTest Professional (QTP)为工具进行自动化测试框架的设计与实施。 ### 软件回归测试自动化框架的核心概念 软件回归测试...
因此,未来的自动化测试框架需要具备更好的设备兼容性和系统版本管理功能。 2、AI与机器学习:人工智能(AI)和机器学习(ML)技术的不断发展将为自动化测试带来新的思路和方法。通过利用AI和ML技术对应用程序进行...
从提供的文件内容来看,本文主要面向软件自动化测试的初学者,并结合自动化测试框架、实践经验和学习方法等给出了一系列忠告和建议。下面将详细梳理文件中提到的知识点。 ### 自动化测试基本概念 - **测试入门**:...
【异构粗粒度可重构处理器的自动任务编译器框架设计】 在当前的计算机科学领域,异构计算已经成为提升系统性能和效率的关键技术之一。异构粗粒度可重构处理器(Heterogeneous Course-Grained Reconfigurable ...
4. 使用自动化测试框架:如JUnit、TestNG等,利用框架提供的便利减少单元测试编写和执行的工作量,提升效率。 在编写单元测试时,还应注意以下几点: 1. 测试的独立性:测试应当独立于实际应用,避免依赖外部资源...
Python接口API自动化测试是软件开发过程中的重要环节,它能够有效地提高测试效率,减少人工错误,并确保产品的稳定性。本项目之前基于unittest测试框架,现在已转换为pytest框架,这一变化体现了对更强大、灵活测试...
这一实践涵盖了多种技术和工具的综合应用,旨在构建一个高效、可靠且可维护的自动化测试框架。以下是对这一主题的详细阐述: 一、自动化测试的重要性 在企业级Web应用开发中,手动测试往往耗时且易出错,而自动化...
- **自动化测试**:建立一套完善的自动化测试框架是重构成功的关键之一,它能够保证在重构过程中不会破坏原有的功能。 综上所述,重构不仅是一项技术活动,更是提高软件质量、维护性和扩展性的有效手段。通过遵循...