自动化测试框架的实现.

  • 格式:doc
  • 大小:372.50 KB
  • 文档页数:9

自动化测试框架的实现

一、 背景

为什么要做自动化测试?

1. 提高测试效率和降低测试成本

2. 实现快速的回归测试,加快测试进度从而加快产品发布进度

3. 更多的测试,提高测试覆盖率

4. 提高测试的可靠性,避免人为因素

为什么要做自动化测试框架

实现自动化就是为了能够提升测试效率,不具备可维护性、复用性差将成为告知自动化测试失败的最致命因素,付出巨大代价但起到的效果甚微。基于以上因素并结合行业发展思路,在正式实施自动化之前,必须搭建一套适合的自动化测试框架,将脚本能够有效的组织、连贯应用起来,提高测试脚本的可维护性和可读性。

二、 实现思路

1、 分层设计

进行测试的时候,首先保证基本功能点走通,验证页面功能点,然后测试系统流程的正确性,最后保证符合系统满足业务要求。对于自动化脚本,采用分层的思想,先实现最底层的操作组件,通过调用操作组件进行组合,实现对业务流程的验证。不同的业务流程,对于底层的操作组件是可以复用的,只是调用的业务逻辑的差异,或者是测试数据的差异性。例如,可以将摸个模块的增加操作作为一个底层的操作组件,实现流程测试的时候,可以将这些操作组件组合起来。

尽可能做到各脚本之间具备独立性,不相互依赖,便于进行各种基本场景的组合运行。

2、 脚本分离设计

对某个功能进行自动化测试,实际上就是对这个功能涉及的对象进行操作,输入测试数据来验证其结果的正确性,复杂的验证点需要编写业务逻辑。如果全部用脚本的方式编写,针对每一条测试数据就需要编写一份脚本,脚本量相当巨大,同时任何改动(程序、测试用例、GUI 对象)都需要调整大量的脚本。

为了达到可维护性、可复用性,将对象、操作、测试数据、业务逻辑剥离、分开管理,通过调用关系去组合实现不同的测试用例。

3、 封装基础函数、基本的业务逻辑

通过对基本业务逻辑的封装、调用,实现快速的脚本开发,如每个脚本都需要连接数据库,或读取CSV ,或给出测试报告,这些基础函数,可以封装起来,不同的页面需要调用的时候,只需要传入这个页面相应的对象名称,调用封装的函数执行即可。可以大大减少脚本量,也更易于维护。

又如一个模块不同页面,都包含增删改查,可以将这些基本的业务逻辑封装起来,脚本中重复调用的时候,也是可以调用对象名,实现重复的操作,这样可以大大减少脚本量,也更易于维护。

4、 执行体系

有效的执行体系可以批量、定制执行、自动运行,自动化测试真正达到提升测试效率,需要实现无人的情况下批量自动执行,并且可以定制执行。

5、 异常处理

脚本执行过程中,因程序错误或环境问题、脚本自身问题经常会出现非预期的错误:如意料外的弹出窗口、发现错误的数据、未找到对象等,有些情况下当前用例出错,并不影响后续用例的执行,需要支持异常处理机制,终止执行或者终止当前用例,继续后续用例的执行,亦或者跳过当前步骤,继续执行后续操作,并输出当前的错误报告。

6、 数据还原

自动化测试执行后,需要不断循环,执行测试后,应该将测试数据删除,恢复到初始状态,不影响接下来的测试工作。

7、 脚本管理

自动化脚本比较多,需要进行脚本管理,随着版本的更新,自动化脚本也需要不断的增加和更新,这样需要对脚本进行管理。

8、 测试数据调用

由于自动化测试需要反复执行,调用大量的测试数据,通过读取CSV 的方式,批量的调用测试数据,从而实现数据的参数化。

9、 结果体系

针对每个测试用例,输出测试用例内容和执行结果,也可以考虑输出执行日志,从而能更详细的看到执行过程

三、自动化测试框架

模型

流程

1.eclipse 来写测试代码

2. 提交 svn (测试代码check ,可选)

3.hudson 会检测(svn 是否有更新),检测到更新就通过同步更新到其它slave

机器(也可以每天定时执行 。

4.maven 执行test

5.grid 把test 分发到各个slave 测试机(有不同的浏览器).

6. 报告显示在指定的html 页面,包括测试用例,测试结果,测试时间等信息。

机器部署

支持的系统平台和浏览器

四、编写测试代码

1. 用firefox 中的selenium IDE录制最初的脚本,然后导出为JAVA 代码,在Junit 里进行进一步的开发;

2. 编写代码

打开测试站点

public void setUp( throws Exception {

// 打开测试站点 addr 代表服务器地址 port 代表端口号 browser 代表服务器 web

代表测试站点地址

selenium = new DefaultSelenium(“addr", port, “browser",

“web";

// 打开测试站点

selenium.start(;

}

Case:测试搜索功能, 打开网站,输入hello ,点击搜索,验证打开页面标题是否正确。 Public void testHello( throws Exception

{

selenium.open("/";

selenium.click("kw";

selenium.type("kw", "hello";

selenium.click("su";

assertEquals(“hello ”

,selenium.getTitle(;

}

3. 测试数据

测试数据通过读取CSV 的方式,解决数据的参数化。

4. 代码分层

将页面抽象出来,与测试用例分离,以减少页面改动,要大量修改代码的情况。

5. 提交svn

在提交svn 前一定脚本测试通过

五、测试执行

1.Hudson 上新建一个job

选择执行机器及项目的svn ,如下图所标

执行,观察命令行输出 六、测试报告 测试结果保存到数据库中,以 html 形式展现,打开网页,即可看到测试运行结果,包括测 试用例,测试结果,浏览器,执行时间等。 七、自动化测试方法 自动化应该在回归测试或者软件基本功能或者流程已经成型的条件下而且以后变动不 大的情况下,开始进行的。 1、 自动化单元测试 自动化测试可以模拟手工测试,进行单元测试,验证页面功能点是否通过,执行用例, 覆盖系统的各个功能点,但是考虑自动化做单元测试,相比手工进行,会花费更多的时间, 所以我们不使用自动化来做单元测试, 而是做到使用自动化可以进行冒烟测试, 保证基本功 能点是跑的通,就可以了。 2、 自动化系统测试 自动化将用来执行流程用例, 可以自动化团队自行编写流程用例, 用自动化来执行系统 流程测试,可以提高测试效率,降低测试成本。 八、总结

整个测试平台完成了从脚本的编写,构建,编译到执行,最后给出测试报告,基本满足 了我们做自动化测试的目标,希望今后能更加完善,从而帮助我们提高测试效率,更好的达 到自动化的目标。