chromium开源项目部分的自动化测试,对于学习自动化测试很有帮助,自动化能涉及到的部分,或多或少都有覆盖。对于像浏览器这样的产品,尤其chrome(chromium)这样的新概念浏览器,投入在里面的自动化测试,力度非常大。好不容易赶上一个不加班的,简单的研究了一下;对一个产品来说项目工程不小,只能按自己的理解去关注自动化的部分。

  白盒部分:

  和很多国外的产品一样,白盒测试部分比重很大,整个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主界面的测试相关;