什么是自动化测试
自动化测试,顾名思义,自动完成测试工作。通过一些自动化测试工具或自己造轮子实现模拟之前人工点点的工作并验证其结果完成整个测试过程,这样的测试过程,便是自动化测试。自动化测试,看上去很美,感觉好像是第一次工业革命,它开创了以机器代替手工劳动的时代,实则不然。因为每一个自动化测试的case都是从手工测试做起的,如果没有手工测试的基础,是没法进行自动化测试。
自动化测试是将自动化工具和技术应用于软件测试,旨在减少测试工作,自动化测试是将自动化工具和技术应用于软件测试,旨在减少测试工作,更快,更经济地验证软件质量。有助于以更少的工作量构建质量更好的软件体;许多公司多多少少都在做自动化测试,但手动测试仍然占主要的比例,因为有些团队不知道如何在开发过程中更好的利用自动化测试来替代手动测试。
手工测试通常是工程师仔细的执行预定义的测试用例,将执行结果与预期的行为进行手工比较并记录结果。每次源代码更改时都会重复这些手动测试,由于都是人为参与,这个过程中很容易出错。在组织中引入自动化测试时,需要投入大量财力和时间。然而,一般没有太多的财务回报,至少在小规模开始时没有。因此许多公司选择开源测试自动化工具,特别是在开始引入自动化测试的阶段。通常,软件公司害怕投资自动化测试,不是因为负担不起这个投入,而是因为他们担心的回报不会像预期的那样,或者根本不会产生积极的投资回报率。
为什么要做自动化测试
1、自动化测试节约成本(根据项目)毕竟自动化测试确实解放了一批人力(人力成本才是IT公司最大的成本),可以让机器没日没夜的执行一些重复劳动。
2、有些测试项目手工很难实现(手工成本较高) 。比如12306的压力测试、负载测试,同时找那么多人去测试不现实可以通过机器去模拟。
3、项目质量流程需要比如版本管理需要buildverify,以保证checkin的code不会影响版本库。类似于smoketest。
自动化测试优缺点
一、优点
1、自动化测试可以替代大量的手工机械重复性操作,测试工程师可以把更多的时间花在更全面的用例设计和新功能的测试上;
2、自动化测试可以大幅提升回归测试的效率,非常适合敏捷开发过程;
3、自动化测试可以更好地利用无人值守时间,去更频繁地执行测试,特别适合现在非工作时间执行测试,工作时间分析失败用例的工作模式;
4、自动化测试可以高效实现某些手工测试无法完成或者代价巨大的测试类型,比如关键业务7×24小时持续运行的系统稳定性测试和高并发场景的压力测试等;
5、自动化测试还可以保证每次测试执行的操作以及验证的一致性和可重复性,避免人为的遗漏或疏忽。
二、缺点
1、自动化测试并不能取代手工测试,它只能替代手工测试中执行频率高、机械化的重复步骤。你千万不要奢望所有的测试都自动化,否则一定会得不偿失;
2、自动测试远比手动测试脆弱,无法应对被测系统的变化,业界一直有句玩笑话“开发手一抖,自动化测试忙一宿”,这也从侧面反映了自动化测试用例的维护成本一直居高不下的事实。其根本原因在于自动化测试本身不具有任何“智能”,只是按部就班地执行事先定义好的测试步骤并验证测试结果。对于执行过程中出现的明显错误和意外事件,自动化测试没有任何处理能力;
3、自动化测试用例的开发工作量远大于单次的手工测试,所以只有当开发完成的测试用例的有效执行次数大于等于5次时,才能收回自动化测试的成本;
4、测试的效率很大程度上依赖自动化测试用例的设计以及实现质量,不稳定的自动化测试用例实现比没有自动化更糟糕;
5、实行自动化测试的初期,用例开发效率通常都很低,大量初期开发的用例通常会在整个自动化测试体系成熟,和测试工程师全面掌握测试工具后,需要重构;
什么样的项目适合做自动化测试?
1、需求稳定,不会频繁变更;
2、研发和测试周期长,需要频繁执行回归测试;
3、需要在多种平台上重复运行相同测试的场景;
4、某些测试项目通过手工测试无法实现,或者手工成本太高;
5、被测软件的开发较为规范,能够保证系统的可测试行。
自动化测试基本流程
1、制定测试计划
在展开自动化测试之前,最好做个测试计划,明确测试对象、测试目的、测试的项目内容、测试的方法、测试的进度要求,并确保测试所需的人力、硬件、数据等资源都准备充分。制定好测试计划后,下发给用例设计者。
2、分析测试需求
用例设计者根据测试计划和需求说明书,分析测试需求,设计测试需求树,以便用例设计时能够覆盖所有的需求点。一般来讲,基于Web功能测试需要覆盖以下几个方面:
1)页面链接测试,确保各个链接正常;
2)页面控件测试,确保各个控件可靠;
3)页面功能测试,确保各项操作正常;
4)数据处理测试,确保数据显示准确、处理精确可靠;
5)模块业务逻辑测试,确保各个业务流程畅通。
3、设计测试用例
通过分析测试需求,设计出能够覆盖所有需求点的测试用例,形成专门的测试用例文档。由于不是所有的测试用例都能用自动化来执行,所以需要将能够执行自动化测试的用例汇总成自动化测试用例。必要时,要将登陆系统的用户、密码、产品、客户等参数信息独立出来形成测试数据,便于脚本开发。
4、搭建测试环境
自动化测试人员在用例设计工作开展的同时即可着手搭建测试环境。因为自动化测试的脚本编写需要录制页面控件,添加对象。测试环境的搭建,包括被测系统的部署、测试硬件的调用、测试工具的安装盒设置、网络环境的布置等。
5、编写测试脚本
根据自动化测试用例和问题的难易程度,采取适当的脚本开发方法编写测试脚本。一般先通过录制的方式获取测试所需要的页面控件,然后再用结构化语句控制脚本的执行,插入检查点和异常判定反馈语句,将公共普遍的功能独立成共享脚本,必要时对数据进行参数化。当然还可以用其他高级功能编辑脚本。脚本编写好了之后,需要反复执行,不断调试,知道运行正常为止。脚本的编写和命名要符合管理规范,以便统一管理和维护。
6、分析测试结果、记录测试问题
应该及时分析自动化测试结果,建议测试人员每天抽出一定时间,对自动化测试结果进行分析,以便尽早地发现缺陷。如果采用开源自动化测试工具,建议对其进行二次开发,以便与测试部门选定的缺陷管理工具紧密结合。理想情况下,自动化测试案例运行失败后,自动化测试平台就会自动上报一个缺陷。测试人员只需每天抽出一地你该时间,确认这些自动上报的缺陷,是否是真实的系统缺陷。如果是系统缺陷就提交开发人员修复,如果不是系统缺陷,就检查自动化测试脚本或者测试环境。
7、跟踪测试BUG
测试记录的BUG要记录到缺陷管理工具中去,以便定期跟踪处理。开发人员修复后,需要对此问题执行回归测试,就是重复执行一次该问题对应的较薄,执行通过则关闭,否则继续修改。如果问题的修改方案与客户达成一致,但与原来的需求有所偏离,那么在回归测试前,还需要对脚本进行必要的修改和调试。
8、自动化脚本的维护
如果系统发生变更时,对自动化测试脚本和相关文档包括《自动化测试用例》、《自动化脚本设计说明书》进行维护,以适应变更后的系统。
下图是自动化测试的基本流程图,以及每个阶段的任务负责人,输出等
常见自动化测试框架
1、接口自动化框架
a.java+testNG/Junit+Maven/Ant/Gradle+Jenkins+MySQL+testlink/redmine
b.python+unittest/pytest+Git+Jenkins+MySQL+testlink/redmine
c.python+rebotframework+unittest/pytest+Git+Jenkins+MySQL+testlink/redmine
d.jmeter+Maven/Ant+Jenkins+MySQL+testlink/redmine
2、UI自动化测试框架
a.java+selenium/appium+testNG/Junit+Maven/Ant/Gradle+Jenkins+MySQL+testlink/redmine
b.python+selenium/appium+unittest/pytest+Git+Jenkins+MySQL+testlink/redmine
c.python+rebotframework+unittest/pytest+Git+Jenkins+MySQL+testlink/redmine