数据驱动和关键字驱动的研究与应用
2017-01-20陈腊梅
陈腊梅
摘要:测试自动化是大型软件测试的一个重要测试环节,可以节省测试人力,对待测软件做最基本的评估,作用不可替代。但是自动化测试如果组织设计不到位,测试效果会比较差,已经做好的自动化成果也不能得到很好的应用。本文介绍的数据驱动和关键字驱动就是让测试数据从自动化脚本中分离出来单独维护,很好的解决了测试脚本的重用和维护问题。
关键词:自动化测试;数据驱动;关键字驱动;测试库
中图分类号:TP39 文献标识码:A DOI:10.3969/j.issn.1003-6970.2016.04.021
0 引言
用户需求月新日异,软件的升级和换代很频繁。软件新老版本数据、功能的兼容性是必须要保证的,所以软件测试中数据核查和比对是非常常见的测试内容。这项工作繁琐而重复,而且极容易出错,迫切需要实现自动化比对。
自动化测试的最基本要求是,测试内容重复、测试结构单一、测试用例变化比较小。可是我们实际面对要比对的数据却是多种多样的,导致自动化测试脚本频繁变更,增加了脚本的测试和维护成本。基于上述问题,本文参考现今比较流行的关键字驱动技术,实现了测试数据和测试脚本分离。这样测试人员只需要按照一定格式来编写数据,定义对应的测试动作(关键字)就能实现自动化比对。在软件测试的过程中,需要对软件产品的重要参数进行比对。如果需要比对的参数的数目巨大。手工测试的工作量就比较大。
本文研究了当前最主要的自动化测试方法,并在这些方法中找到最适合本软件的自动化测试方法。以实现自动化比对软件参数为例,本文介绍了几种自动化测试方法。重点介绍关键字驱动的自动化测试的基本理论,并且在实践中使用了关键字驱动自动化测试,分析了关键字驱动测试的优点和缺点,得出了其良好的可执行、可推广的特性。
1 测试脚本和测试库
自动化测试即是直接对被测对象编写测试脚本,实现自动化测试,如图:
如果被测对象比较复杂,测试脚本也要[模块化],从而实现脚本重用,即是测试库。如图:
这种通过编写测试脚本直接测试被测系统解放了繁琐的手工测试,无疑是一个重大进步。但是测试人员新增了测试脚本的学习维护工作,需要有比较强的编码能力,不适合自动化测试的推广和优化。
2 数据驱动
针对上面说的缺点,研究人员推出一种新的测试技术,即数据驱动。数据驱动简单的说:将测试数据从测试脚本中分离出来。熟悉被测系统业务的测试人员负责编写测试数据,具有编码能力但不熟悉业务的测试人员负责编写测试脚本,测试脚本分析、解释测试数据,调用已有测试函数,完成测试。
数据驱动的测试示意如下图:
在实际项目中,测试库和测试脚本一般都是由一个团队完成,这个团队熟悉编码技术,熟悉最前沿的测试继续,所搭建的测试框架能很好的把被测系统和测试数据有效的链接起来。
测试数据和被测系统是另外一个团队完成,这个团队熟悉被测系统的所有业务,能熟练编写有效的测试数据,能有效使用驱动脚本实现自动化测试。
本文要解决的自动化测试需求是:如果操作前参数编号一致,表示是同一个参数,参数值一致表示处理正确。测试数据格式如下:
数据驱动自动化测试的优点:
按照这种方式组织的自动化比对,测试人员只需要维护好如上表格。测试时执行一次脚本,即使有几千个参数,也能在几秒内完成测试。再借用robot framework实现原始数据的自动提取和测试脚本的自动执行,几乎可以完全脱离人工操作。
数据驱动自动化测试的缺点或限制:
数据与脚本分离方式的自动化测试的最大限制是,被测对象相对单一,执行操作必须完全一致,参数格式和个数有严格限制。例如表1中,如果对比的不是一个参数,而是参数编号和参数名都可能有变化,这种数据驱动方式就不太容易处理。
3 关键字驱动
相比数据驱动,关键字驱动的显著改进是把执行操作作为关键字单独列出来解析。对不同的关键字做不同的操作,这样就能摆脱数据驱动的关键束缚:只能执行一种操作。这样需要解析器不仅能解析数据还要能解析关键字。如图:
如果发生需求变化,需要同时进行单参数和多参数比较两种操作。多参数比较需要同时比较参数编号和参数名称(文中为参数1和参数2),再确认是否是同一参数,关键字驱动测试数据格式如下:
关键字驱动自动化测试的优点:
测试人员根据实际需要设计表格,测试脚本读取分析表格,执行测试用例。如果测试需求发生变化,可以追加定义关键字,追加测试库的编写,对原有测试脚本没有任何冲击,维护方便。
另外,由于测试数据完全独立与测试脚本和被测代码,所以测试数据完全可以在测试脚本代码实现以前就完成编写,并由此推动测试脚本的编写。
关键字驱动自动化测试的缺点和限制:
数据表格相对复杂,增加了脚本解析的难度。不过,Python语言具有强大的文本处理能力,分析处理这种格式的表格还是比较容易的。
在实践中,我们主要采用关键字驱动自动化测试方式来组织数据和编码实现。
4 实现介绍
在实际测试中,本文用python来实现文本和表格的解析和比对,实现测试库的编写。用robotframework搭建测试框架,调用测试库以实现文本的自动提取、分析、比对和测试结果的输出。
输出日志如下:
Test1 pass
Test2 pass
Test3 pass
……
Test300 pass
OUTPUT D:\测试比对结果\result.xml
5 总结
通过对比几种自动化测试方法,我们最终使用关键字驱动同时结合数据驱动方式来组织我们的自动化测试。脚本基本能做到一次成型,后继有新需求只是追加脚本,对原有脚本没有任何影响。
测试脚本和测试数据完全分离,实际测试人员只需要具备最基本的文本编辑能力就能完成所有测试任务。新脚本能完全兼容旧的测试数据,大大降低维护成本。类似本文描述的需求,各种产品、各种系统都可以参考,实现方便。