译者 | 李睿
审校 | 梁策 孙淑娟
在对已开发代码进行质量和可靠性分析时,测试的作用至关重要。代码质量的任何小瑕疵都可能导致项目遭遇重大失败。由于它的重要性,许多DevOps(开发运营)团队在开发流程的早期就已启动测试——不仅仅是在开发项目结束时,或质量保证人员(QA)在部署前完成最后检查之后才进行。
数据统计机构Statista公司表示,DevOps的采用率在持续集成(CI)/持续交付CD工作流程中达到了惊人的62%,在开发环境中达到了60%。随着越来越多的行业采用最新技术,人们正在见证企业以不同程度将之采用。
本文将介绍为什么在DevOps流程的早期测试代码至关重要,还将通过示例重点介绍DevOps测试的特定方法和具体实践。我们先从基础开始:
传统测试是怎样开展的?
传统的软件测试通常包括回归测试,其中每个功能测试都在更新完成后进行。通过持续交付,开发人员可以在准备好后立即部署更新。这通常意味着新功能需要频繁部署。
开发人员通过采用频率更高的A/B型测试,来确保这些新功能不会破坏现有代码中的任何内容。开发人员将为一部分用户发布一个功能版本,然后为另一部分用户发布另一个版本,然后返回旧版本。
直到所有版本都得到部署,并且可以确定哪个最佳,或者直到原始版本被证明比其他迭代更好,这个过程将一直持续。
传统测试方法的问题
传统上,开发人员执行单元测试或功能测试。这些测试适用于源代码,但不包括任何与系统上线后功能运转状况的内容。对于每次变更正式上线时的表现,这些传统测试并没有给出太多反馈。
DevOps则是一种新尝试:当企业将测试纳入其开发和运营流程时,开发和运营这两个团队开始更紧密地合作。
DevOps测试怎样开展?
DevOps的过程是将开发人员的产品尽快送到用户手中。测试是该过程的一部分,对于防止正式环境出错至关重要。
不过,在执行出色的DevOps流程中,测试不会单独进行。相反,测试工程师从第一天起就与开发人员一起协作。这样即使某些内容发布还没有准备好,或是没有通过质量保证(QA),也可以在上线之前修复。
测试自动化工具能帮企业改善其反馈循环,将周期时间和质量保证工作量减少一半。其基本理念是,如果企业将他们的开发(Dev)和运营(Ops)团队聚合在一起,他们可以更快、更可靠地交付软件,并减少资源使用。
这可能是比快速上市或持续交付更大的好处。我们讨论的测试问题,无论其速度或部署方法如何,都将带来更好的结果。
DevOps测试的商业利益
1.错误数量更少
错误总是会导致问题——它们不仅会让用户感到不满,还会付出生产力损失和高员工流动率方面的代价。进行自动化测试可以确保企业的开发团队在发布之前对其版本充满信心。
这意味着缺陷会被及早发现,并在成为大问题前被解决。同时,在开发周期的早期发现这些问题,也意味着在以后需要更新或升级时减少麻烦。
2.软件交付更快
无论是快速发布错误修复还是重大升级,自动化测试过程都将帮助企业更快发布软件。因为团队可以自动完成QA流程,企业无需等待人工开展。
而对于某些开发框架,员工只需具有一定软件开发知识,就可以从头开始创建全功能测试。企业功能越早交付,就越早看到客户的满意度结果,从而获得更高的收入。
3.上市时间加速
上市时间加速不仅仅是企业能够迅速地将功能呈现在客户面前。因为如果每个新版本都漏洞百出,那么企业的业务也会因此受到影响。相比保护品牌和声誉,战胜竞争对手获得更多市场份额,快速上市变得更加关键。
4.版本更可靠
可靠性是企业最重要的资产之一。版本如果有问题也会对其品牌和声誉造成无法弥补的损害,更不用说客户保留率。事实上,根据Failory公司的调查,即使应用程序中只有少量错误也会对客户的满意度产生50%的负面影响。DevOps测试确保软件版本更可靠,没有Bug和错误。
标准的DevOps测试实践怎么展开?
对于现代软件开发,DevOps测试毫无疑问是不可或缺的——它是更先进的工具可以发挥重要作用的领域之一。对于改进DevOps流程和提高质量的方法,需考虑以下三件事:测试驱动开发(TDD)、自动化和开源软件。
- 测试驱动开发——与DevOps的任何部分一样,测试应该贯穿整个应用程序设计。测试驱动开发不是在编写代码之后构建测试,而是在代码编写时同步进行,从而推动团队快速前进。
- 自动化——自动化测试有助于以更低成本交付优质产品。通过利用像Jenkins这样的开源工具,企业可以通过将自动化集成到现有的DevOps流程中来创造更多价值,而不是围绕它创建一个全新的流程。最重要的是,哪怕企业QA人员不堪重负,自动化测试也将有助于继续推进开发。
- 开源软件——自动化测试软件并不少,尽管存在像Selenium WebDriver这样的免费替代方案,提供具有更大灵活性和更高性价比的功能,许多企业仍然依赖专有解决方案。
全球流行的五大DevOps测试工具
1.Selenium
Selenium是一个采用Java、Python和其他语言编写的不同软件测试框架。它适用于通过自动与用户界面(UI)交互来编写基于Web的测试应用程序。Selenium支持不同的浏览器,例如Firefox、Chrome和Internet Explorer。它可以用各种编程语言编写测试,如Java、C#和Python等。
2.Appium
Appium是一个高级的、开源的测试自动化框架,用于编写自动化测试,尤其适用于原生和混合移动应用程序。Appium允许企业使用Java、Python等客户端语言创建测试。该框架支持多个应用平台,包括iOS和Android。使用Appium的优点是不需要有root手机就可以运行自动化测试。但是,Appium仅适用于真实的移动设备,不支持模拟器。
3.SoapUI
SoapUI是一个免费的开源Web应用程序测试工具,提供功能、回归和负载/性能测试。企业可以用它来创建自动化测试,来检查RESTful Web服务。它带有用于创建SOAP和HTTP测试以及数据驱动测试功能的内置库。用户界面易于访问并具有丰富的功能集。它通过自定义库支持多种语言,如Java、C#、Perl、Python等。
4.Jenkins
Jenkins是最流行的持续集成和交付工具之一。如果不熟悉配置管理,它也是一个很好的入门工具,因为它的用户界面比其他同类产品更简单。Jenkins基于Java构建,这意味着它支持所有主要操作系统(Windows、Linux和macOS),并且可以在任何具有强大网络支持的云平台上良好运行。
5.JMeter
JMeter是一个高性能的Java桌面应用程序,旨在测试功能行为和测量性能。最初设计用于测试Web应用程序,它已扩展到其他测试功能。该软件在BSD许可下免费提供,并且是开源的。JMeter与所有支持JavaSE(操作系统特定包)的操作系统兼容。构成JMeter的所有文件都是可移植的,你可以在任何环境中运行,而无需安装客户端或服务器组件。
结语
DevOps测试自动化有两种基本方法。第一个是测试驱动开发(TDD),首先编写测试,然后基于它们编写代码。第二个是行为驱动开发(BDD),企业可以在其中开发反馈软件应如何运行的测试,而不仅仅是确保其正常工作。
驱动开发(BDD)似乎最适合DevOps测试,因为DevOps的重点是使软件开发人员与运营团队保持一致,以便他们可以更快地一起部署。驱动开发(BDD)允许两个团队的成员和测试人员在一组测试中工作,描述了他们的更改如何影响整体系统行为。
因此,如果已经在践行DevOps,那么没有理由不践行驱动开发(BDD)。
原文标题:Testing in DevOps – The Basic and Critical Things You Need to Know,作者:Manav Jain