谷歌浏览器自动化测试浅析

发表于:2015-7-13 11:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:嫣梦    来源:51Testing软件测试网采编

  白盒部分:
  和很多国外的产品一样,白盒测试部分比重很大,整个chromium中的自动化测试,白盒部分超过25%或者更多(没有具体计算这个数字),白盒测试大概可以分为两个类别,单元测试和交互测试,它们的测试框架不同,分别是gtest和google mock。
  核心工程:
  核心自动化工程是automation,在chromium/src/chrome/test/下面,包含大部分自动化测试的代理部分,所有内部测试通过ENABLE_AUTOMATION进行编译的开关。这个代理架构上,是两个UI相关的的架构,一个是对外的chrome界面的自动化操作,一个是内部view的界面库测试。代理的提供者在其他的自动化项目中,automation下面的代理和非代理部分都有各自的提供者。chromium中的自动化其实是一套很不错的C++自动化架构,准确来说不是一套,但是大思路一致。其中:
  automation_proxy.h/.cc:
  自动化的总代理,用来和提供者automation_provider.h/.cc进行信息的交互,并且包含其他具体代理;代理是ipc的方式;
  browser_proxy.h/.cc:
  browser的代理,主要用来和browser的automation_provider进行交互,测试chrome界面的主要部分,包括tab的处理等;
  tab_proxy.h/.cc:
  tab的代理,用来和tab的provider进行交互,测试的应该是固定tab页内的js相关;
  automation_json_request.h/.cc:
  Json格式的数据传输,很多数据都是Json方式传输的;
  window_proxy.h/.cc:
  同样的道理,window相关的代理。
  主要自动化测试工程分为三类,功能、性能和执行,其中:
  功能包含:
  chrome_frame_project:chrome frame相关,主要是插件方面;
  browser_project:chrome主界面的测试相关;
  性能方面的项目有:
  test_support_ui_project:
  提供一些UI的基本操作(功能)和性能相关内容,主要是性能,收集几种最终要的性能数据;
  realibility_test_project:
  封装test_support_ui中的性能测试内容,对chrome进行稳定性测试,包括稳定性测试,crash收集,报告等;
  执行相关有:
  pyautolib_project:
  chrome相关的pythonUI测试框架,将uitest的C++导成python然后进行执行;
  webdriver_project/chromedriver_project:
  为外部网站测试提供支持,比如selenium,webdriver等;
  还有三个我觉得不错的和自动化有关的部分:
  breakpad的引入:
  crash的收集报告框架,在测试框架中引用它,对测试过程中出现的crash进行dump收集,并统一分析;
  IAccessible的实现:
  使用代理方式在views库中封装IAccessible的接口,共外部进行界面相关的获取;实现方式和我在MASS实现中提到的一样,继承统一基类,注册,然后分别实现自己的UI支持;
  memory_watch:
  chrome中的内存检监测小工具。
  IE&Chrome页面自动化对比
  IE和Chrome分别不同的方式对网站测试人员提供自动化支持,其中:
  IE:
  主要使用Ole和Com的方式完成自动化(个人认为这是90年代的巅峰技术之一),IPC通过内存方式实现(引用计数和边界检测),因此支持MSAA和新的UIA,无论是QTP还是windows平台上的一些自动化工具和selenium的ie driver最终都是这种方式实现对IE的驱动。
  另外,由于IE寄生在windows平台,所以可以通过进程和窗体直接获取IE的渲染句柄来做各种驱动和hook的操作
  Chrome:
  chrome对外提供网站自动化最早(貌似32之前)通过autolib的方式实现,当时是为了chrome的开发自己测试方便,导出成pyd文件直接通过进程ID控制。实际上是在chrome运行时设置一个channal的通道,进而实现内存共享来驱动浏览器运行。
  新的chrome沿袭了webdriver的方式,这种方法的核心是在通过chromedriver.exe和chrome之间建立一个socket的通信来实现各种驱动。selenium使用了chromedriver.exe对外的web服务重新封装了session的各种事件定义,目前selenium是比较成熟的web自动化测试框架。
  chrome&chromedriver的核心session请参考:https://code.google.com/p/chromium/codesearch#chromium/src/chrome/test/webdriver/webdriver_session.h&sq=package:chromium&type=cs
  使用selenium,最终是通过chromedriver.exe来启动浏览器,并定义socket的通信端口。所以无法像IE一样hook到各种事件和进程,也无法做页面的直接内存共享。当然如果需要可以修改chromedriver.exe或加session来实现。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号