`
ruilin215
  • 浏览: 1148316 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

自动化测试框架: 控制界面的关键

阅读更多

前面讲到要做一体化自动化测试框架,那么,最重要的是要解决什么呢?

相信了解Windows编程的人员,都能发现这个问题所在。在窗体中,写下代码,控制每一个控件的输入是非常简单的事。但是,一旦显示了一个模态窗体,原有的流程代码会不再往下执行,而是停留在新窗体中,等待消息相应。这就是我们代码控制界面的关键问题。

这是什么道理呢?

我使用的是Delphi系统,所以我可能使用VCL框架来解释这个问题。但是其他语言同样适用。

在Windows程序中,WinMain是入口。而WinMain的处理,就是一个典型的死循环,先从消息队列中取出消息,然后再给各窗体派发消息。

为了方便理解,我们将这个模型简化,就是一个死循环A。中间在处理任意的代码。

现在,由于调用了某一段处理,进入了另外一个死循环B。当代码从A函数进入了B,那么当然,A循环下面的代码当然只能停留下来,直到B循环结束。

而在Windows界面中,模态窗体就是一个消息死循环。当Windows弹出一个模态窗体的时候,其消息队列独立处理,不再走整个应用程序的消息循环。

现在比较明白了,不能方便控制界面的原因在于Windows应用程序并不是流程化的,而是消息驱动的。

明白了这个道理,就有可能找到突破口。我想到了钩子。在Delphi中使用钩子,推荐使用FastCode。

既然程序从A循环进入到B循环,我不能继续执行A循环的代码,那么,可不可以在进入B循环后,继续执行A的代码呢?

这应该是可行的。关键在于我必须做到B循环中,能够调用到我的代码。

在Delphi的一般窗体,你可以通过使钩子Hook住TForm的DoShow方法。那样,窗体不管是否是ShowModal的,都会触发,然后通过给此窗体发送一个特殊消息,并在此窗体中,使用钩子,处理此消息。那么就可以在窗体完全显示之后,真正处理你的任务了。这里有一个技巧,窗体真正显示,并不是调用DoShow的时候,而是经过Windows的消息循环,完全处理好所有显示相关消息之后。这里,通过消息循环机制,给它发送一个额外消息,那么可以保障,触发你的任务的时机,是在窗体处理完原有消息之后。

当然了,在VCL中,并不是这么简单就能处理所有问题。最主要的是那些标准Windows窗体,比如MessageBox,OpenDialog。这些窗体不是由TForm组合而成的。所以对象和消息机制都不一样。需要单独处理。

这里有一种方式,是通过定时器,定时查询活动窗体状态。如果检测到非标准Windows窗体,手动触发你的任务。也是一种权衡解决方式。

由于代码版权问题,我这里不能贴出这些代码,不过主要意思应该都讲清楚了吧。

总结以下这个关键点:

  1. 消息机制和流程代码的冲突,是根本原因
  2. 简单的模型,就是循环嵌套循环问题
  3. 使用钩子,在循环开始处,触发任务

这样,基本就可以控制界面了。

分享到:
评论

相关推荐

    WEB自动化测试框架文档.doc

    【文档标题】:“WEB自动化测试框架文档.doc” 【文档描述】:该文档详细阐述了WEB自动化测试的关键思路、编码基础和框架介绍,旨在提供一套有效的自动化测试解决方案。 【标签】:“WEB自动化测试框架文档.doc” ...

    python+UI自动化测试框架

    Python UI自动化测试框架是软件测试领域中一种高效、灵活的工具,它可以帮助测试人员实现对图形用户界面(GUI)的自动化测试。本框架基于Python编程语言,结合了Selenium WebDriver库,unittest测试框架,...

    基于python的接口自动化测试框架(带演示案例版)

    在【基于python的接口自动化测试框架(带演示案例版)】中,我们可以看到一个完整的测试解决方案,它可能包含了以下关键知识点: 1. **Python基础**:Python的基础语法是构建自动化测试框架的基础,包括变量、数据...

    基于python的接口自动化测试框架讲解用PPT

    ### 基于Python的接口自动化测试框架知识点详解 #### 一、接口自动化测试框架概述 1. **测试金字塔模型**: - **定义**:采用金字塔形状展示不同层次的测试类型及其相对比重的一种模型。 - **层级划分**: - **...

    WebUI自动化测试框架

    总结,WebUI自动化测试框架是提升软件质量的关键手段,通过合理选用和实施,可以显著提升测试效率,保证产品的稳定性。在具体实践中,应根据项目特点选择适合的框架,并不断优化测试流程,以实现最佳效果。

    基于Python+Selenium的web自动化测试框架的设计与实现.doc

    软件自动化测试框架的关键点包括软件自动化测试生命周期、如何建立高质量的自动化测试过程等。本文对这些关键点进行了详细的阐述和实现。 5. Selenium的应用 Selenium是一种常用的自动化测试工具,可以用来测试UI...

    自动化测试框架的设计原则

    选择合适的脚本语言是自动化测试框架设计的关键一步。常见的自动化框架开发语言有 C、C++、Java、TCL、Perl、Ruby、Python 等。每种语言都有其优缺,需要根据具体情况选择合适的语言。例如,C 或者 C++ 可以提高自动...

    基于appium+java 的APP UI自动化测试框架.zip

    【描述】"基于appium+java 的APP UI自动化测试框架"暗示了这个项目的核心是实现APP用户界面(UI)的自动化测试,利用Appium的跨平台特性,通过Java编写测试脚本,来模拟用户的各种操作,如点击、滑动、输入等,以...

    App-UI自动化测试框架

    在构建App-UI自动化测试框架时,Python语言与Selenium、Appium、Pytest和YAML等工具结合,可以提供高效且灵活的解决方案。这里我们将深入探讨这些技术以及如何利用它们来实现Android应用的自动化测试。 首先,让...

    web版本自动化测试报告

    2. 编码实现:选择合适的自动化测试框架,将测试用例转化为可执行的代码。 3. 执行测试:运行自动化测试脚本,记录测试结果。 4. 结果分析:对比预期结果与实际结果,找出失败的测试用例,分析原因。 5. 报告生成:...

    基于 Web 的自动化测试框架

    ### 基于 Web 的自动化测试框架 #### 摘要与关键词解析 本文主要讨论了一种基于Web系统的自动化测试框架的设计与实现。随着互联网技术的发展,Web应用日益增多,其复杂度也在不断提高,这使得传统的手动测试方式...

    高效自动化测试平台入门到精通

    3. 自动化测试框架:如Selenium、Appium、Junit、TestNG等,它们提供了一套结构化的环境来编写和执行测试用例。了解这些框架的使用和配置是成为自动化测试专家的基础。 4. 编写测试脚本:使用编程语言(如Java、...

    分布式自动化测试平台

    - **简介**:Holmos是一个基于Selenium WebDriver的自动化测试框架,由Java语言编写。 - **特点**: - 集成了Selenium的核心能力,支持多种浏览器。 - 提供了一套丰富的API,方便进行复杂的测试脚本编写。 - **...

    python通用UI自动化测试框架源码 2.0

    Python通用UI自动化测试框架源码2.0是一个旨在简化UI自动化测试的工具,适用于各种软件或Web应用的测试。这个框架的核心目标是提高测试效率,降低维护成本,通过抽象元素操作、检查点验证和回退策略,使得测试用例...

    轻量级自动化测试框架

    学习QTP自动化测试框架时,通常需要掌握以下几个关键知识点: 1. **对象模型和识别**:理解QTP如何识别和描述应用程序的对象,以及如何在对象库中管理它们。 2. **VBScript基础**:虽然QTP的录制功能强大,但深入...

    自动化测试框架

    自动化测试框架是软件开发过程中的重要工具,它能够提高测试效率,减少手动测试的工作量,保证测试的准确性和一致性。本框架以“QC+QTP”为核心,结合了Quality Center(QC)的质量管理功能和QuickTest Professional...

    自动化测试练习源代码.zip

    自动化测试框架是用于组织和执行测试用例的结构,如Selenium WebDriver、TestNG、JUnit等。它们提供了一种结构化的方式来编写和运行测试,支持断言、报告、数据驱动测试等功能。 6. 页面对象模型(POM): POM是...

Global site tag (gtag.js) - Google Analytics