过去的十几年,DevOps运动在中国得到了大范围的推广与发展,也涌现出了很多DevOps社区,它们在深度和广度上都推动着软件交付模式的变革。尤其是新冠疫情以来,企业的数字化转型需求愈加强烈和迫切,软件的迭代交付也更为频繁,给软件质量的把控带来了新的挑战,也提出了更高的要求。
正是在这样的背景下,以及基于投入产出的效果考虑,软件从业者们都意识到了测试的必要性,尤其是以接口为基础的自动化测试的必要性。
在过去一段时间,我所接触到的测试同行们中,大家普遍拥有做自动化测试的共识,但也都面临着不同的难题。有的是在等待领导决策,需要一些量化的评估指标;有的是一直在不同的技术框架下尝试和选择,比较碎片化,没有形成统一的自动化测试平台;有的是基于某个开源框架,通过大量代码开发自主建设,却在长期维护上需要持续投入较大精力……
MeterSphere开源持续测试平台提供了测试跟踪、接口测试、UI测试、性能测试等一站式能力。尤其在接口测试上,基于B/S架构,将传统的单纯依托代码开发或JMeter这样的单体工具的测试方式,转变为在线协作、可视化、简单拖拽的方式来进行接口自动化测试,极大地降低了自动化测试的学习曲线和准入门槛,也为接口自动化测试的持续维护提供了工具支撑,赋予团队和组织将测试用例、测试数据、测试执行记录和测试结果沉淀为资产的能力。
对于正准备开拓接口自动化测试的团队,MeterSphere提供了从接口定义到单接口用例,再到跟业务场景关联的场景用例的测试业务逻辑。对于一些现有的测试脚本,支持通过导入的方式一键迁移到MeterSphere平台,实现无缝切换。
目前MeterSphere平台支持的导入源有MeterSphere、Postman、Swagger、HAR和JMeter。以Swagger为例,可以通过Swagger URL直接导入接口定义,并且支持定时同步,能在结果变化时,自动获取最新的接口定义。
通过这种在线可视化的交互,测试人员能快速上手,有利于接口自动化测试的开展与推广,从而帮助团队建立起自身的自动化测试体系,提升质量内建的能力。
现在有越来越多的企业比以往更加重视软件测试以及围绕测试所进行的质量保障活动,将测试纳入到端到端的软件研发体系建设中进行规划。企业级的软件测试要求既能满足传统的项目组织方式,又要能满足各种敏捷团队的测试需求,包括中小型敏捷团队和部落制敏捷团队。
MeterSphere持续测试平台所提供的“工作空间-项目”的组织和资源隔离机制,可以灵活满足不同规模企业的测试团队和项目组织的实践需要;而其提供的“角色-人员” 的权限机制,又能满足同一项目团队内部人员根据角色分工的不同分配不同权限的实际需要。
尤为重要的是,内部岗位变动和外部因素造成的人员流动是不可避免的,也是正常的。所谓“铁打的团队流水的兵”。统一的测试平台可以帮助企业建立统一的测试技术栈和测试执行工具,避免“百花齐放”的现象,为统一的测试流程建设和团队协作提供技术支撑。
软件的持续交付往往具有轻量、快速、按需、频繁等特征,这同时要求测试具有可持续性,要能满足持续交付与持续发布的要求。
MeterSphere作为以“持续测试”为定位的平台,不仅本身支持自动化测试,赋能测试人员专注于测试用例的设计、维护、执行与反馈,同时支持DevOps平台对自动化测试用例的远程触发和定时触发,将测试平台融入到DevOps的流水线当中去,真正实现开发、测试、反馈的持续交付闭环。
由于MeterSphere提供标准的RESTful API接口,无论是广泛使用的Jenkins、GitLab这类开源CI工具,还是诸如Azure DevOps和云效的商业DevOps平台,亦或其他各类研发管理平台的流水线均可以调用MeterSphere的自动化测试用例、测试场景和测试计划。项目团队可以根据各自项目的特点和需求,在设计自己DevOps流水线的时候,灵活组合并调用相关的自动化测试用例。
现代软件功能越来越丰富,导致服务间依赖和调用也越来越多。服务间依赖主要分两种情况:一是软件本身的架构,越来越多地采用微服务架构,不同的服务可能会由不同的团队负责,而不同团队之间的进度差异很可能无法满足本项目团队的测试要求,进而导致测试处于阻塞状态;另外一种情况可能是由于功能上的需求,软件需要调用一些外部服务,例如地图服务、通知服务、OCR服务、大数据服务、物联网服务等,这既可能是由于内外网隔离的网络原因,也可能是由于这些外部服务相对更不可控,出于稳定性考虑的原因。
MeterSphere Mock服务可以根据用户输入的请求参数、返回数据来生成Mock接口。这些接口会自动生成模拟数据,覆盖用户的一些测试需求。同时,Mock期望可以根据设置的请求触发条件进行过滤,返回期望的数据。
信通院发布的《研发运营一体化(DevOps)能力成熟度模型》第三部分“持续交付”对测试管理和自动化测试提出了明确的要求,包括自动化设计、自动化开发、自动化执行、自动化分析等几方面。
该能力成熟度模型指出,自动化测试需要建立统一的自动化测试框架,统一管理自动化测试用例,需要对接口与服务采用自动化测试,能由流水线自动触发,并且对自动化测试结果要具备较强的自动判断能力。
目前,MeterSphere开源持续测试平台已经对业界普遍期望的DevOps评级进行了针对性的支持。例如加入了“误报库”,测试人员可以对网络、环境等非应用原因导致的失败设置相应的规则,在自动化用例执行的过程中,由系统根据误报规则进行自动判断和标记。
目前,MeterSphere支持对响应头、响应码和响应体设置规则,运算符包括“等于”、“包含”、“不包含”等。所有的误报规则基于项目进行设置,以支持各项目团队根据自身的需求设置相应的规则。
测试用例的环境无关属性是用例能够重用的重要基础。MeterSphere通过项目级别的环境管理将环境相关的变量进行抽象,并按照Dev、QA、SIT等进行组织,测试用例通过选择运行环境即可在不同的测试环境中进行执行。
MeterSphere的环境管理支持设置通用的请求参数、环境相关的域名配置、数据库连接信息、证书配置、全局前置脚本、全局后置脚本、全局断言等。目前已经内置了测试中常用的MySQL、SQL Server、PostgreSQL、Oracle数据库驱动,对于其他像Redis数据库,可通过插件的方式进行扩展。
测试平台最重要的功能是提供了一个协作和自动化框架。在实际测试工作中不可避免地有个性化场景需要特殊处理,例如个性化的加解密算法、封装的数据准备和数据处理程序等。MeterSphere支持测试团队上传自己的Jar包,并在前后置脚本中进行引用。
自动化测试中经常需要添加前后置脚本和自定义脚本。通过代码片段功能,测试人员可以保存常用的脚本,在需要使用的地方直接添加引用即可。前面提到的Jar包上传后,除了在前后置脚本中使用,也可以在代码片段中引用。
示范代码片段:
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
String accessKey = "axNBP3PxyVdtvkaw";
String secretKey = "DayAGHyuUAXKLeI7";
public static String aesEncrypt(String src, String secretKey, String iv) throws Exception {
byte[] raw = secretKey.getBytes("UTF-8");
SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv1 = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv1);
byte[] encrypted = cipher.doFinal(src.getBytes("UTF-8"));
return Base64.encodeBase64String(encrypted);
}
try {
//调用加密算法生成签名
String signature = aesEncrypt(accessKey + "|" + System.currentTimeMillis(), secretKey, accessKey);
//将签名值存入 signature 变量中
vars.put("signature",signature);
} catch (Exception e) {
e.printStackTrace();
}
版本管理主要是与“被测系统的迭代版本”所对应的用例标记,它是一个在项目级别可单独开启的功能。
当开启版本管理后,项目管理人员可以根据迭代发布计划创建相应的版本:
如下图这样,接口定义、单接口用例和场景用例都将与版本进行关联。
■ 接口定义可以在不同版本之间切换与对比
■ 接口的不同版本的对比
MeterSphere的场景用例又称为“接口自动化”。一般是根据业务场景所设计的自动化用例,由多个单接口步骤通过拖拽的方式组装而成。支持接口执行次序的设置、前后接口间参数的提取与传递、断言设置、ForEach/While循环、If…Then条件判断控制器等,极大地简化了接口自动化的设计和维护成本,使人人都能上手做自动化测试成为可能。
一般情况下,MeterSphere创建自动化测试由以下三个步骤组成:
下面的例子主要是用MeterSphere的接口自动化能力,调用MeterSphere平台本身的接口,批量创建MeterSphere用户的场景。本示例通过环境变量accessKey和secretKey,结合全局前置脚本生成Signature签名进行接口鉴权,中间也涉及到CSV数据文件、循环控制器、参数提取、断言等基本设置。
利用接口定义的导入功能,将MeterSphere接口导入到平台的接口列表中。
MeterSphere Swagger URL:https:///v3/api-docs
创建 /user/special/list/{goPage}/{pageSize}接口用例,设置请求头、请求参数。
■ 创建场景
在“接口自动化”标签页下创建场景;
■ 设置场景变量
添加CSV类型的场景变量,将CSV上传至平台,并根据CSV格式设置分隔符;
CSV格式及参考内容如下:
name,age,email
demo_1,20,demo_1@qq.com
demo_2,30,demo_2@qq.com
demo_3,40,demo_3@qq.com
demo_4,32,demo_4@qq.com
demo_5,25,demo_5@qq.com
■ 复制/引用单接口用例(CASE)
本示例选择将单接口用例(CASE)复制到场景,并设置执行次序;
■ 创建前验证
为了方便对比创建前后的用户变化,特意将“demo_”前缀的用户提取出来;
① 设置断言
② 提取参数
■ 创建循环
添加循环控制器,并在控制器内嵌套创建用户的接口请求。请求体中的变量${name}即为从CSV中取出来的用户名;
■ 创建后验证
最后,再次调用“获取用户”的请求,获取用户列表。
■ 设置环境变量
设置accessKey和secretKey键值对
设置全局前置脚本(具体内容参考“自定义代码片段”)
■ 执行场景用例
从前面的实践可以看出,MeterSphere作为开源开放技术基础之上的一站式持续测试平台,可助力企业建设自己统一的测试服务平台。在敏捷开发的过程中,企业可以借助MeterSphere将持续测试的理念付诸实践,形成DevOps持续交付闭环。
MeterSphere本身依托开源社区成长和发展,具有以下多方面优势:
■ 开源
MeterSphere本身采用开源的方式运作,是最贴近一线测试人员的一种方式。其功能需求基本直接来自一线的测试人员,问题反馈可直达研发团队,反馈后的解决也比较快速,在产品功能和质量上都有保障;
■ 开放
MeterSphere基于JMeter技术,技术相对开放和通用,拥有良好的技术生态和广泛的用户基础。产品本身也拥有与周边平台的集成能力,能够较好地融入到企业现有的研发测试流程中去;
■ 社区
MeterSphere拥有自己的技术社区,能够团结广大测试从业人员和爱好者,不断扩充社区的技术队伍,为产品的潜在推广来培养和沉淀技术人员。同时,也便于企业吸收相关专业技术人员、建设技术团队,缩短学习和推广曲线。
■ 统一
通过测试平台建设,企业能够进行测试相关的统一治理,避免工具碎片化。同时方便统一测试流程的建立,并提供统一的测试服务;
■ 标准
标准化的测试工具和测试框架,将使整个软件交付过程也更为标准和成熟。通过将测试融入到交付流水线中,使质量真正内建于项目团队中,以更为高效和更广泛的覆盖率支持冒烟测试、可用性测试和回归测试等多种类型的测试工作;
■ 沉淀
企业可以将测试用例、测试执行记录、测试报告等沉淀下来,形成企业的测试资产,为测试用例的重用提供根本支持,也在必要的时候提供测试的相关回溯。
■ 可视化
相较于传统的接口自动化工具,MeterSphere首先提供的是协作式平台,能以可视化的方式创建自动化案例,支持更为高效的测试用例编写和维护;
■ 低代码
MeterSphere的自动化用例除了前后置脚本或代码片段,并不需要编写其他代码,更多的是通过接口的组装生成用例;同时,MeterSphere平台还提供了多种控制器,例如事务控制器、循环控制器、条件控制器、等待控制器等,这大大降低了自动化测试的准入门槛;
■ 易上手
可视化和低代码意味着有更多的人员可以投入到自动化测试的工作中来,也意味着测试效率和测试覆盖率的双重提升。
过去自动化测试之所以在很多组织中推广有难度,就是因为测试人员既要懂业务,也要懂测试,还要会开发,而会开发的测试人员更是难找。无论从社区的反馈还是已有企业用户的反馈,MeterSphere在企业的推广过程都较为理想,而且几乎所有项目团队都能顺利地基于MeterSphere开展自动化测试。
开放与服务是MeterSphere最为鲜明的两大特征。MeterSphere一直注重社区用户和企业用户的使用体验,秉持着“软件用起来才有价值,才有改进的机会”的理念,为社区和企业用户持续提供专业的支持服务。
■ 社区服务
社区用户除了可以自己直接在GitHub提交Issue反馈需求与问题之外,MeterSphere还有专门的企业微信群,由专业技术人员为社区用户解答软件使用的相关问题;
■ 企业服务
对于购买了MeterSphere企业版的用户,MeterSphere提供了一对一的售后支持服务,由专门的技术团队负责,能够及时响应企业用户在使用过程中的问题。同时,研发团队对于企业用户所提出的需求,也会优先进行评估和排期。