【海云捷迅云课堂】初识自动化测试
云课堂专题
海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情回复。
什么是自动化测试?
身处IT行业一定听过或者接触过自动化测试。
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通俗理解类似工厂里使用机器替代流水线工人完成一些重复的工作。
自动化测试的优势显而易见。有了自动化测试,测试人员可以从简单重复劳动中解放出来,甚至也有人会觉得这样就不需要测试人员了。但在实际测试工作中,自动化测试仍然需要测试人员深度参与。
首先,自动化测试的本质是先编写一段代码,然后使用代码去测试另一段代码。而自动化测试用例编写本身属于一项开发工作,需要测试人员投入大量的时间和精力。
其次,并非所有项目都适合做自动化测试。自动化测试的主要作用不是发现产品的缺陷,而是基于产品稳定的情况下确保产品可以正常上线,产品的主流程没有缺陷。当自动化测试的维护成本高于其节省的测试成本时,自动化测试就失去了价值与意义。
什么产品(项目)适合做自动化测试?
- 需求稳定,不会频繁变更
自动化测试主要是基于产品稳定的情况下确保项目可以正常上线,项目的主流程没有缺陷,如果需求不够稳定频繁变更的话,这样就会大大增加自动化测试用例的维护成本。
- 研发和维护周期长,且后续需进行频繁的回归测试。
就目前实际情况来看,软件产品可能比软件项目更适合做自动化测试。
首先,软件产品的生命周期一般都比较长,通常会有多个版本陆续发布,每次版本发布都会有大量的回归测试需求。同时,软件产品预留给自动化测试开发的时间也比较充裕,可以和产品一起迭代。
而对于软件项目,如果是周期较短的一次性项目,即使技术上自动化测试的可行性很高,但从投入产出来看并不建议实现自动化。因为花了大量时间和精力实现的自动化可能执行不了几次项目就结束了,就好比你只是心血来潮想在家跑下步,就没必要买一台跑步机,不然留着也只会落灰占位置了。
所以,针对项目周期较短还是选择人工测试发现缺陷为主即可。而对项目周期较长且有持续迭代的情况时,可实现半自动化,即针对相对稳定的软件功能选择自动化测试覆盖,而对不够稳定的功能或新增的功能则进行人工测试。
- 需在多种平台上重复运行相同测试的场景
对于界面测试,在需求支持的不同的浏览器版本上执行同样的测试用例。
而对于不同客户的定制版本,可用自动化覆盖基本一致的主体功能,再人工测试对应的定制版本功能。
- 某些测试通过人工测试无法实现或成本太高
对于所有的性能和压力测试,很难通过手工方式实现。比如,某一个项目要求进行一万并发用户的基准性能测试(Benchmark test),难道真的要找一万个用户按照要求来操作被测软件?又比如,对于 7×24 小时的稳定性测试,难道要找一批用户一直操作被测软件?这个时候,就必须借助自动化测试技术了,用机器来模拟大量用户反复操作被测软件的场景。当然对于此类测试是不可能通过界面操作来模拟大量用户行为的,而是基于协议的自动化测试技术。
- 被测软件的开发较为规范,能够保证系统的可测试性
某些用例的自动化必须要求开发人员在产品中预留可测试性接口,否则后续的自动化会很难开展。
如果要实现稳定的自动化测试,被测软件的开发过程就必须规范。比如,界面上的控件命名如果没有任何规则可寻,就会造成UI自动化的控件识别与定位不稳定,从而影响自动化测试的效率。
- 测试人员对自动化测试方面足够了解且有开发基础
如果测试团队的成员不了解自动化测试且没有任何开发基础,那推行自动化测试就会有比较大的困难,甚至会可能出现事半功倍的情况。
如何开始着手进行自动化测试?
自动化测试基本流程如下:
- 可行性、测试需求分析
根据实际需求分析测试点,抽样分析,确定对应项目阶段是否有时间、是否有必要、是否可实现自动化测试,以及具体哪些功能需要实现自动化。
- 确定自动化测试方向,制定测试计划、方案
根据测试需求,确定自动化测试的类型(UI、接口等),制定对应的测试计划及方案。包含测试范围及时间点、自动化测试的方式(编程语言:Java、Python等,工具:jmeter等)、自动化测试框架(pytest,unittest,RF等)选择等。
- 测试框架搭建,测试用例代码的设计
基于原有功能测试用例挑选适合进行自动化的测试用例或者重新设计测试用例,选择测试用例存放方式(excel或配置文件),确保需要实现自动化的功能点都有对应的测试用例可寻。与此同时,根据确定的测试框架准备好测试环境(如:编写代码工具、需要安装对应版本的第三方包、持续集成环境等)
- 按照统一规范编写代码,并合并、联调整体的代码
根据实际项目统一编码规范,按照规范依据对应的测试用例编写、调试代码,待代码均编写完毕后合并并进行联调。
- 执行自动化测试,生成测试报告,分析测试结果、记录测试问题并跟踪
将测试代码部署到Jenkins集成定时运行,分析测试报告中状态为不通过的项是否为有效的平台缺陷,如果为有效缺陷就提交开发人员修复并跟踪;如果不是缺陷,则检查自动化测试代码或者测试环境是否异常。
- 自动化代码的维护
对于变更功能则调整或优化对应的自动化代码,新增的功能则需要新增对应的自动化测试用例和测试代码,确保自动化代码与对应测试点匹配。