当我们谈论自动化测试 , In 测试 , Views: 793 , Comments: 0 , Index: 3260 , 21 December 2012

Cockburn在《敏捷软件开发》中提到“沟通的成功依赖于发送者和接收者有可以引用的共同体验”,因此当我们提到自动化测试时,就一定需要有共同的词汇表。首先,什么是自动化测试?对一些人来说,一提到自动化测试,第一个闪过脑海的念头就是QTP、WebDriver等自动化测试工具,以及依据这些工具建立的针对功能或是UI的自动化测试测试脚本,但其实这些只是自动化测试中的一小部分而已,在我看来,所有“使用机器的能力”对测试进行部分或全部自动化的操作都应该被叫做“自动化测试”。无论是针对代码中的类或是方法建立的单元测试,还是针对产品建立的需要人工参与的diff的方式,都是自动化测试的具体方法。对测试来说,自动化测试不是一个存在的目标,而仅仅是一种用以达成测试目标的手段。我们希望从自动化测试中得到什么?自动化测试覆盖率?自动化测试覆盖率是用来衡量自动化测试所占比例的一种手段,但这仍然不是我们在项目中开展自动化测试的目标。我们在项目中开展自动化测试,目标只能是“通过自动化测试提高测试或是产品的质量”。因此,在谈论自动化测试时,可以被称为目标的,只能是下面这几项:

(1)在保证相同的测试覆盖率的情况下,减少人力资源的投入;
(2)在相同人力资源投入的情况下,增加了测试覆盖率;
(3)让测试的执行向上游移动,帮助开发者更早的发现产品中的问题,从而降低修复成本。

软件测试理念(三) , In 测试 , Views: 692 , Comments: 0 , Index: 3107 , 28 November 2012

Q: 如何做一名优秀的软件测试工程师?他至少具备哪些技术能力?

A: 软件测试工程师首先是一个软件工程师,也就是说他必须具备软件工程师的基本技术能力,比如对计算机结构系统(硬件,操作系统,内存,网络等)基本了解,再有就是算法数据结构,以及开发编程能力,最后就是对所工作领域的技术掌握。有了这些基本技术后,下面要掌握一些测试技术,比如黑盒白盒、等价类、边界值、功能测试、性能压力测试和安全性测试等。除了必须懂得技术硬技能外,要想成为一名优秀的软件测试工程师还必须有很强的软技能,这包括对产品质量的热情和沟通协调能力等。其中对产品质量的热情和专注尤为重要,因为兴趣是最好的老师,只有对所做的工作充满热情,你才会从平庸变成卓越。

Q: 怎么才能进行有效地探索性测试?另外很多优秀的软件测试工程师都能敏锐地嗅到bug,你认为如何训练这方面能力?

A: 探索性测试不仅需要对产品熟悉,还需要掌握开发产品采用的技术,最后就是自己经验的积累,这三者缺少一个都很容易把探索性测试变成漫无目的的测试。因为探索性测试是边运行测试、边了解产品和边设计新的测试。它根据当前测试步骤产生的结果,加以分析判断,然后使用策略决定下一步会最有可能发现产品中的bug。我曾写过一篇介绍探索性测试的文章,那里面用猜数字的游戏来解释探索性测试,猜数字的第二步也就是根据第一步猜的结果,来决定猜下一个数字所使用的策略非常重要。没有好的策略就会变成乱猜,而策略就需要你对游戏的规则、数字的特征以及二叉树查找等知识的积累和掌握。

WebDriver(一) , In 测试 , Views: 4719 , Comments: 1 , Index: 4846 , 14 November 2012

WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器native support来操作浏览器。所以对于不同平台,不同的浏览器,必须依赖一个特定的浏览器的native component来实现把WebDriver API的调用转化为浏览器的native invoke。

在我们new一个WebDriver的过程中,Selenium首先会确认浏览器的native component是否存在可用而且版本匹配。接着就在目标浏览器里启动一整套Web Service,这套Web Service使用了Selenium自己设计定义的协议,名字叫做The WebDriver Wire Protocol。这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等等等等。

WebDriver Wire协议是通用的,也就是说不管是FirefoxDriver还是ChromeDriver,启动之后都会在某一个端口启动基于这套协议的Web Service。例如FirefoxDriver初始化成功之后,默认会从http://localhost:7055开始,而ChromeDriver则大概是http://localhost:46350之类的。接下来,我们调用WebDriver的任何API,都需要借助一个ComandExecutor发送一个命令,实际上是一个HTTP request给46350端口上的Web Service。在我们的HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情。

不同浏览器的WebDriver子类,都需要依赖特定的浏览器原生组件,例如Firefox就需要一个add-on名字叫webdriver.xpi。而IE的话就需要用到一个dll文件来转化Web Service的命令为浏览器native的调用。

12 3 4 5 6 7