软件测试是对项目研发过程的产物(文档,代码等)进行审查,保障产品质量的过程。我们可以通过手工测试,自动化测试,工具扫描等方法完成这个任务。其中,自动化测试是当前重要的一种测试方法,具有响应速度快、稳定性高、人工干预少的特点,很好的契合了高响应、海量数据验证等需求的测试任务。数据驱动是自动化测试的灵魂,数据驱动的应用程度直接决定了自动化测试的水平和质量。
如果你有100亩麦子需要收割,你会怎么做?方法一:拎起镰刀或者雇几个人拎起镰刀割麦子。方法二:制造或者购买一台收割机,然后开着收割机割麦子。显然,这两种方法都能完成任务,但是,方法二具有重资产、高效率的特点。
测试就如同这割麦子,完成麦子收割是测试任务,手工收割和收割机收割对应手工测试和自动化测试两种方法。这两种方法各有利弊,手工测试具有上手易(一把镰刀就行),适应性强(不论平地、梯田,还是丘陵都ok)的特点,自动化测试具有效率高(收割速度快)、质量稳定(机器不容易犯错)、不疲劳(机器不用休息)的特点。对于那种对测试质量要求稳定,测试反馈要求快,需要反复验证和海量数据验证的测试任务,自动化测试技术可以很好满足这类测试任务的要求。
测试数据如同机油,是收割机运行的燃料。数据驱动是自动化测试的核心,如同机器的发动机,是机器运行的动力源。没有测试数据这个燃料和数据驱动这个动力源,收割机就是一台没有灵魂的废铁无法运转,自动化测试也就无从谈起。
测试数据作为测试的输入,测试数据准备的质量直接决定到测试范围是否全面,测试程度是否充分,最终影响测试过程的质量。
测试数据从来源可以概括为源自存量数据和源自新增数据两类。源自存量数据是指利用原有系统运行积累的生产数据,经过脱敏、加工后生成的测试数据。这个原有系统可以是系统自身(升级优化前的系统、重构前的系统、手工记录的业务数据等),也可以是业务关联系统(业务上游系统、交互系统等)。这类测试数据的特点是数据已经存在,可以直接使用,缺点是这类数据是通过正常的业务逻辑积累产生的,通常是还是高频交易产生的数据。这类数据天然具有局限性,无法覆盖系统的所有业务场景,如:异常操作、低频交易等。
源自新增数据是指根据业务需求、系统设计,创造出来的符合业务需求的数据。该类数据是测试人员通过分析业务需求、系统设计,针对项目业务需求(含高频交易和低频交易)、异常处理、边界值检验等人为创造的数据。这类测试数据的特点是测试数据经过系统性分析,覆盖面较广,代表性较强。不足之处在于数据都需要人工创造,当系统较为复杂或者规模较大时需要的测试数量较多,人工制造成本较大。
基于这两个数据来源,我们结合业务需求,就可以完成项目测试数据的准备工作,通过分析、筛选、提炼,最终沉淀为本次测试所需的测试数据。
数据驱动测试是自动化测试的灵魂,在数据驱动测试的思想中,自动化案例就是流水线,测试数据像水一样通过流水线,触发系统做出响应。然后,通过配置在流水线上的断言,检查点,比对系统响应是否符合预期响应。符合,则表示该功能场景正常,不符合,则预示该功能处理存在异常。显而易见,测试数据是至关重要的。那么自动化测试中的测试数据都从哪里获取呢?自动化测试数据本质上和手工测试数据类似。但是,由于自动化测试是程序自动运行,相较于手工测试数据天然具有需求量大、需求范围广、数据来源多等特点。传统的手工准备数据从数量上和来源上无法满足自动化测试运行所需的庞大数量要求,这时,我们需要在手工准备数据的基础上引入自动化的数据生成方法。大体上自动化测试数据可以归为四大类,八小类,详见下表。
表-1自动化测试数据来源
自动化测试所需要的测试数据部分仍可通过手工制作,主要为固定标签类值和数据资源池两类。固定标签类值即该字段有明确的取值列表,如银行卡账户类型(0-I类、1-II类、3-III类)、是否属地(0-本地、1-异地)、客户类型(G-政府、B-商户、C-个人)等。数据资源池即将某些可以重复使用且数量少的数据,存储在数据库、CSV文件、text文件、ini文件等介质中供程序反复抽取使用,这个数据池子我们称为数据资源池。如身份证号、手机号、卡号、商户号等这类离散数据。
通过自动化方式准备测试数据,主要可以分为查询、修改、新增这三类。查询类测试数据可以通过联机查询和sql查询两种方式获得,查询类测试数据说明测试数据本身是存在的,需要通过筛选条件甄别出本次需要的数据,作为测试数据。联机查询和sql查询的区别就在于我们所需的数据是否有现成的查询接口可用,若无,则需手动编写sql语句完成数据筛选修改类数据也是一种已存在的数据,修改类数据和查询类数据的区别在于查询类测试数据的源数据满足测试需要可以直接使用,而修改类测试数据的源数据无法满足测试需要不能直接使用,需通过修改某些属性才能满足测试要求。因此需要通过修改操作对源数据进行二次修改,联机修改和sql修改的区别在于是否有联机修改接口可供使用。
新增类测试数据说明当前环境中无满足测试需求的源数据或者修改源数据无法满足测试要求时,需新增测试数据。比如银行账户类数据,由于涉及客户信息校验、记账校验等,单纯的插入一条数据很难通过系统校验,我们通常直接通过系统开户交易直接新增数据。比如新建系统无存量数据,或者环境中缺乏某些稀有类型的数据时,我们需要新增交易添加铺底数据。
市面上有各种形形色色的自动化测试工具,诸如jmeter、postman、metersphere等等。测试人员在接触自动化测试之处,容易沉迷于了解,掌握更多的测试工具,忽略提升自动化测试认知水平,而陷于初级自动化测试的陷阱,疲于学习而无法提升自我。本文致力于提升大家对自动化测试的认识,引导大家向更高层次的自动化测试发展,提升测试人员整体价值。