基于c/s非标准控件的自动化尝试和testcomplete介绍

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

第一部分 探索
 

1.1 自动化测试的原理
  自动化测试的原理就是无人值守的情况下开展对目标软件的测试,关键在于两点:对软件的行为进行控制、检查软件的预期结果来判断软件运行是否正常。

 

1.2 当前的测试软件和技术
  UI级别的测试工具:这类软件通过识别软件的界面原色和记录用户的鼠标键盘操作来达到控制应用程序的目的。对于结果比较也是通过识别用户界面中的元素的状态来判断操作的结果。这些方法对于标准的windows控件是通用的,这种方法实现了一种黑盒式的自动化测试,所作的一切都是在模拟用户的操作。这种方法是建立在对软件的UI元素能自动识别的基础上的。

  当前的难点:对于非标准的windows控件,现有的工具无法自动识别,导致无法通过自动的方式驱动软件运行。要想对这样的软件进行自动化的测试,必须寻找一些其他的方法。

在不修改应用程序源代码的基础上,尝试了以下几种技术:

 

1.2.1 MSAA
   MSAA即Microsoft Active Accessibility,为在应用程序和帮助技术之间交换信息提供标准的、一致的机制。例如,MSAA允许程序把所有对象的类型、名称、位置、当前状态暴露给屏幕读者并通知屏幕读者任何windows事件导致的用户接口改变,这原本是微软为有视力障碍人士开发一些接口,但是后来发现这些接口也可以用于对GUI元素的控制从而实现自动化测试。Active Accessibility 的主要思想是提供一种以程序方式访问UI元素信息或操作这些UI元素的功能。支持这种功能的 UI(User Interface) 元素是可访问的。在大多数情况下,这意味着一个UI元素支持 IAccessible 接口。你也可以说在 Active Accessibility 的世界里,一个可访问的UI元素可表示为 IAccessible 接口。MSAA的核心功能由 OLEACC.DLL 提供的。每次当你调用一个函数来返回一个 IAccessible 接口指针,其与一个UI元素相对应,OLEACC.DLL就检查此元素是否内在支持 IAccessible。内在的支持意思是该元素的 IAccessible 是用程序实现的。
    当一个UI元素不能内在的支持 IAccessible 时,OLEACC.DLL 检查该元素的Windows 类名。如果该类是一个 USER 或者 COMCTL32 支持的类,OLEACC.DLL 就创建一个代理为 UI 元素实现 IAccessible 接口。标准控件默认都是支持IAccessible接口,自定义的一些控件,如果没有实现,是不能正确支持的。

   在不改变程序而想通过MSAA接口来实现GUI的自动化测试,是行不通的。

 

1.2.2 Automation UI测试框架
  其实Automation UI是对MSAA的扩展,是WPF的一部分,对.net平台下的程序支持很好,可是很容易实现自动化,但是同样,对于传统的win32程序,在不修改被测程序的情况下,是不适用的。

  但是Automation UI提出了一个自动化测试的框架,这个框架基本上可以分为三部分:用例执行接口,测试控制接口、被测程序,其中测试控制模块位于被测程序和测试用例之间,用于在被测程序和测试用例之间传递控制消息和数据。这样就可以实现测试用例和被测程序的分离,易于被扩展。

 

1.2.3 windows API
  通过windows API,如FindWindow,EnumWindow等函数,可以找到窗口handle,我曾经在QQMusic的界面上试过,大部分的window都能找到,但是一些自绘的区域,如播放按钮,切换的tab按钮等,是不能枚举出来的,但是可以找到这些按钮的父窗口,这样通过SendMessage函数并指定鼠标的position,还是可以模拟点击事件的。但是对于点击的结果没有很好的方法判断。

 

1.2.4 进程注入,HOOK API
  想法是这样的:如果能hook住每个功能所对应的windows调用函数序列,就可以记录软件的运行方式,然后通过这些记录的信息完成自动化的操作。这种方法实现的关键点有两个:如何hook所有的函数调用以及如果进行结果比较。对于dll中的导出函数,通过一些特殊的技术,可以跟踪这些函数的执行,如可以跟踪kernel.dll中的window API,来监视应用程序的资源分配、内存分配等信息。但是对于一些非dll导出函数,如自定义的一些类中的函数,无法获取信息。而仅仅是标准的windows API函数是不能满足测试需求的。还有一个就是结果比较,如果无法知晓程序内部数据的获取方式和内部数据的数据结果,也是无法进行运行结果的判断的。

 

 

通过以上的尝试,可以得出一个结论:对于基于非标准windows控件的应用程序来说,开展自动化测似需要得到应用软件的额外支持,即:应用软件需要在设计的时候就考虑到对测试的支持、测试是软件研发的一部分。

 

对于非标准控件,如何实现自动化测试?

 

  来看看自动化测试的一个典型的流程:编写测试用例——执行测试用例——驱动被测软件并记录被测软件的状态——生成测试报告。由此可以看出需要三个典型的模块来支持自动化测试:用例编写管理模块、测试驱动执行模块、测试报告生成模块(输出测试结果)。其核心是驱动执行模块,驱动执行的主要功能就是控制被测软件的运行并得到程序运行时的一些内部程序的状态。如果要实现这个功能,需要在被测软件的内部植入一个测试代理用来获取程序的控制权和内部数据。具体可以针对被测软件设定一些测试点,针对这些测试点在程序内部编写测试使用的API,通过调用这些测试使用的API就可以开展自动化测试。

 

 

 

 

第二部分 一些思考
   2.1 理想与现实
理想的目标是尽可能多地把测试任务自动化。我们认为无人值守的测试执行才是理想的测试,因此我们编写测试脚本实现那些复杂的手工测试用例。然而,有些测试用例是很难实现可靠的自动化的,不值得花费大量的精力去实现。很多时候,我们的脚本会漏掉一些BUG,因为在编写测试脚本时不会想到那些情况,并且有些测试用例对于人工执行而言是很容易的事情,但是对于计算机而言则很容易出错。

  2.2 观察、研究、自动化
  测试人员不但要熟悉业务的流程,还要熟悉业务所使用的技术,在测试的过程中分析哪些东西可以自动化,哪些不适合自动化。这些东西都不是靠一个测试工具就能够实现的。

  2.3 一半是人,一半是机器
  不同的测试工具,适应不同的测试环境,我们磨利了我们的工具之后,工具才能让我们变得更强大。在平时要注意收集一些有空的测试工具也提高测试的效率,如利用perlclip可以轻松产生任意长度的字符串。

 

 

第三部分  介绍一个自动化测试工具 TestComplete
3.1 什么是testcomplete
  TestComplete是一个可以运行针对win32,.net,WPF等程序的自动化测试环境。并且还集成了对网页、web服务器、web services的测试。支持对用vc、vb、delphi、C++Builde、java、等语言编写的应用程序。

 

3.2 TestComplete对GUI自动化的支持
  TestComplete支持录制回放机制的GUI测试。经过使用对比,发现TestComplete的录制级别相当于QTP的lower level级别,即鼠标键盘级别的录制。相对于QTP来说少了一层抽象机制,在对象管理方面不够方便。

 

3.3 TestComplete对白盒测试的支持
  对于像QTP等测试工具来说,自动化只限于“表面”,即应用程序的UI层,但不能深入到应用程序的内部,也即对应用程序的测试是黑盒的。TestComplete增加了深入到程序内部的能力,即使用TestComplete可以直接调用应用程序的代码,实现一种白盒方式的自动化测试。在此,TestComplete提出了两个概念,open Application、Connected Application

 

3.3.1 Open Application
  默认的,对于标准的vc、vb控件,基于.net、java等平台的程序,通过在编译的时候增加一些选项,TestComplete提供了一种可以 “看到程序”内部的方式。实现依靠的技术点是MFC,ATL等标准库的包装类(wrapper),编译过程中的debug信息,.net和java平台的reflection机制。

  通过这种机制,可以实现一些标准程序的自动化白盒测试


 

3.3.2 Connected Application
  一个应用程序可以通过编译选项是程序内部的一部分数据对外开放,但是对于很多自定义的对象,仍然对外是不可见的,即对于自动化的工具来说,是不可测的。鉴于此,TestComplete提出了Connected Application的概念,类似于普通的打桩、代理,具体做法为:在程序的内部,为自动一的对象生成一个包装,然后以注册到TestComplete中,就可以在TestComplete的脚本中调用这些对象进行测试。TestComplete用COM的方式实现这个过程

 

 

3.4 其他
   TestComplete还可以对应用程序进行单元测试等其他类型的测试。没有QTP容易上手,但是比QTP更能深入到应用程序的内部

3GPP LTE/NR信道模型 CDL(Clustered Delay Line):簇延迟线模型,包括CDL-A、CDL-B、CDL-C三个用于NLOS的信道模型,以及CDL-D、CDL-E两个用于LOS的信道模型。 阅读详情

相关推荐

我用 Claude Code 给 Spring Boot 老项目做了一次代码 Review:查出 4 类隐藏问题

接手 Spring Boot 老项目时,真正麻烦的往往不是编译报错,而是分散在业务代码中的空指针、N+1 查询、异常吞没和并发隐患。本文记录一次使用 Claude Code 辅助代码 Review 的完整流程,并给出提示词、Java 示例、修改方案和人工复核方法。

海波的专栏 400

windows端,C/S端自动化测试工具比较

python库: 1.pyautoit 通过捕获界面元素,也可通过坐标进行操作 2.pyautogui 通过获取图片坐标,使用鼠标和键盘进行操作 资料地址: https://hugit.app/posts/doc-pyautogu...

weixin_33968104的博客 3646

NVIDIA DGX Spark实战:如何在桌面上轻松运行200B参数大模型?

本文详细介绍了如何利用NVIDIA DGX Spark在桌面端轻松运行200B参数大模型。通过实战演示,从系统初始化、模型获取部署到内存管理与性能调优,重点解析了其统一内存架构如何解决本地推理的显存瓶颈,并探讨了进行轻量化微调(如LoRA)的可能性,为AI开发者和研究团队提供了高效的本地化大模型操作方案。

weixin_29054195的博客 886

Detours使用说明

 Detours使用说明 1 介绍... 12 Detours API hook. 12.1 hook DLL 中的函数... 22.2 hook自定义c 函数... 32.3 hook类成员函数... 42.4 DetourCreateProcessWithDll 52.5 Detouring by Address. 5 1 介绍  Api hoo

1万+

Jitsi Meet保姆级自建教程:5分钟搞定私有化视频会议服务器(含Docker部署避坑指南)

本文提供了一份详尽的Jitsi Meet私有化视频会议服务器自建教程。通过Docker Compose部署方案,在5分钟内即可搭建基础服务,并深入解析了SSL/TLS证书配置、TURN服务器优化等关键步骤,确保部署的安全与可扩展性,为企业构建自主可控的远程协作平台提供完整指南。

weixin_29305337的博客 621

浅析MOS管导通过程及RC吸收电路设计要点

RC吸收电路 米勒电容 MOS导通过程

liangbo1999的博客 2万+

淘宝面试

春节的时候接到猎头的电话,说是推荐淘宝某个职位,在杭州。后来几天淘宝的一个主管打来电话,聊了一下,聊得还可以,让过去杭州面试一下。由于杭州离我家比较近,我也有意向过去,于是就请了一天假。早上9点的飞机,11点到杭州,从机场到淘宝公司,大约12点半左右,淘宝下午1点钟才开始上班,于是就找了一个名字叫“九百碗牛肉面”的地方吃了个饭,不得不说,里面的东西又贵又难吃...下午两点去面试,先

3307

DLMS—Cryptographic algorithms—(Green-Book)加密算法

密码学是数学的一个分支,基于数据的转换,并且可以用来提供多种安全服务:保密性、数据完整性、认证、授权和不可否认性。密码学依赖于两个基本组成部分:算法(或密码学方法)和密钥。算法是一个数学函数,而密钥是在转换过程中使用的参数。密码算法和密钥用于对数据应用密码保护(例如,加密数据或生成数字签名),以及移除或检查保护(例如,解密加密的数据或验证数字签名)。密码哈希函数:这类函数不需要密钥(尽管它们可以以使用密钥的模式使用)。哈希函数通常用作算法的一个组成部分,以提供安全服务。见9.2.3.2节。对称密钥算法。

一个bug是bug,多个bug能work 1711

实现vbs中传递不定参数

今天被问到一个问题:写一个函数,但是这个函数的参数个数是可变的,该怎么写?我记得c中是有可变参数的写法的,java中也有,由于对vbs不是很熟,只是了解九牛之一毛,于是想当然认为vbs也有。google一把,发现vbs真的没有这个功能。没办法,没有标准的方法,咱就模拟一个,所谓曲径通幽,过程虽然曲折,但是达到目的就行,下面就是用byref和数组模拟的一个可变参数函数:function   test

2029

Cadence仿真MOS电容C-V曲线:从电路图到参数扫描的完整流程

本文详细介绍了使用Cadence Virtuoso仿真MOS电容C-V曲线的完整流程,从电路图绘制到参数扫描,再到结果分析与问题排查。通过实际案例和实用技巧,帮助工程师快速掌握MOS电容特性分析的关键步骤,提升集成电路设计效率。

weixin_29271263的博客 431

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 632

客户端的gui自动化测试

   最近一段时间在搞c/s客户端的自动化测试。在中国的大部分企业,自动化测试刚刚起步,大部分人都认为会使用一些商业的或者开源的自动化测试工具,如QTP之类,就算是进行自动化测试了。大谬也!  自动化测试按照基本步骤来说,其实就分为两部分:1 控件的自动化识别,2 结果的自动化比较。至于大家熟悉的suite,自动化测试报告等部分,则是以以上两部分为基础封装起来的,属于易用部分,不属于基础部

1858

2026年运维工程师常见面试选择题

这篇文章总结了30道Linux运维面试常见问题及解析,涵盖基础命令、系统监控、故障排查、数据库、缓存、容器编排等多个方面。主要内容包括: 基础命令使用:如df查看磁盘、free查看内存、top监控进程等 系统监控与故障排查:负载判断、端口检查、进程管理等 中间件相关:Nginx状态码、MySQL主从复制、Redis缓存问题 容器技术:Docker优势、Kubernetes作用 运维理念:高可用、监控告警、发布策略、备份容灾 工作原则:故障处理优先级、运维工程师核心能力 文章不仅提供标准答案,还解析了各命令的

不务正业的猿 194

深入剖析cppUNIT

一、单元测试与CPPUNIT简介几乎每个开发人员都写过测试代码,但是往往这些代码不系统,也没有良好的管理,同时在测试代码编写过程中也有很多重复的劳动,比较繁琐。在一个软件开发过程中,往往会进行很多修改,迭代开发的模型随处可见,如何验证程序的功能、性能和结构是否符合要求是一项重要的工作。 单元测试是属于白盒测试和结构性测试,一般由开发人员开展,当然如果有好的测试工具支持,测试人员甚至最终

1836

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Checking if sessions are properly configured: Failed解决方法

安装testlink的时候,出现了这个错误提示:Checking if sessions are properly configured: Failed 解决方法为: 打开php.ini,找到session.save_path配置参数,如果前面有分号,把分号去掉,在windows下,此参数的默认值为session.save_path = "C:/temp",如果c:/temp文件夹不存

901

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

开发人员和自动化测试

这两天想把自己qzone中的日志全部删除,但是一百多篇日志,删除起来还是很麻烦,于是我想,写个脚本吧,让电脑帮我干这些简单乏味的工作。想起了以前曾经看过几天的watir,一个web自动化测试工具,嗯,就是它了。说干就干,用IEDevelop查看一下网页的结构,准备写脚本。但是一看,就傻眼了,大量的css布局,iframe嵌套,动态创建html代码,找起对象来,特别的难受,试了有半个小时,还是找

638

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

能解决问题的方法,才是真正的好方法

  前几天看电视,看到IBM的新广告:一个头头,带着一批人,边走边说:我们有全球的资源,我们是国际化的合作...等等等等,但是地下一个员工问:我们该怎么做呢?头头说:我,我还没有想好怎么做。相信很多人看过这个广告,不知道看过之后有何感想。  拿出一个切实可行的方案来,比任何的空谈都要有效果得多。如果空谈的是领导,作为员工,应该怎么做呢?真的能像电视里那样,转身离去吗?

456

自动化测试的境界

当初,袁绍与曹操共伐董卓之时,袁绍向曹操说:“如果大事不成,有什么地方可以据守?”曹操说:“你的意思如何?”袁绍说:“我南据黄河,北靠燕、代,集北方蛮族之兵,向南争夺天下,大慨可以成功吧!”曹操说:“我任用天下的贤能智士,加以正确指导,在什么地方都成。”袁绍认为的天下靠得是好地盘,曹操认为靠正确的方法和贤能人才 ,两个人的高下 一看便知。同样对于自动化测试来说,一提到自动化测试 ,很多人都认为

418

模型之外的那套装置:用 AI harness 完成一个三端同步应用

AI harness 指模型之外、让模型能持续产出可交付软件的全部工程装置。本文把它称作"支架"。它由五层构成:输入层规定模型读什么,反馈层规定模型怎么知道自己错了,观测层把界面与设备状态变成可读事实,记忆层让跨会话不失真,边界层规定哪些动作不许模型自行作出。支架的价值在六天里可以直接计量。

Leo的Matrix 183

如果用pytest命令启动测试脚本有哪些方法和参数呢?请详细解析

pytest的命令行启动非常灵活,它围绕“”、“”和“”三个核心维度,提供了一套强大的参数体系。

simpleness_的博客 227

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 154

附录一源码阅读路线与断点索引

本索引固定于Boot 3.5.7与Framework 6.2.12。先选择要解释的现象,再打开对应源码。表中观察对象是逻辑名称,不保证在所有重载中都是同名局部变量。抽象接口和注解用于阅读契约,不提供可执行方法体断点。

weixin_45476869的博客 164

大型高复杂度互联网项目管理经验心得

复杂项目,管理的核心不是管人,而是管理依赖和变更简单项目重点是排任务、盯进度;多端多关联系统的大型项目,大部分延期、故障根源都来自依赖失控、变更失控。项目经理首要工作是把看不见的依赖显性化,把随意变更变成受控变更,而不是单纯催开发进度。分批上线不是降低标准,而是拆分风险,小步可控很多人觉得分批上线麻烦,希望攒到一起发布。但集中上线会把所有风险集中在同一个窗口,一旦出问题,排查范围巨大、影响面广。分批发布本质是风险隔离,每一批只承载有限的变更,出问题更容易定位、回滚、止损。

zyx980193917的博客 193

[LLM Wiki理论与实践-09]将OpenWiki融入Coding Agent为你节省Token

针对OpenWiki的整合则将Coding Agent的执行模式升级为**先读知识库、再精准修改代码**。OpenWiki预置概念文档、测试说明、页面清单与更新时间,让Agent快速理解业务意图、定位相关代码与测试、判断信息新旧,减少Token与时间开销,降低理解偏差和跨文件遗漏,使改动更一致、可复现,文档与代码同步维护。

JaydenAI的博客 441

MyBatis 入门核心教程:原生接口与 Mapper 代理双模式实战

MyBatis 是 Java 生态中应用最广泛的半自动化持久层框架,它在封装 JDBC 冗余模板代码的同时,将 SQL 的编写权完全交给开发者,兼具开发效率与性能优化空间,是国内企业级项目的主流持久层方案。MyBatis 提供了两种核心开发模式:原生接口模式适合理解框架底层执行原理,Mapper 代理模式是企业开发的标准规范。本文从基础概念出发,完整覆盖环境搭建、两种模式的代码实现、底层原理、事务机制与高频问题排查,所有代码均可直接运行,适合系统入门与实战参考。原生接口模式。

2401_87069538的博客 980
上一篇: 网络游戏同步原理荟萃
下一篇: http协议简介
zhsp1029
博客等级 码龄21年 115粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值