yinxin
作者yinxin·2020-02-10 16:02
项目经理·某金融机构

一种基于Jenkins和Python的持续集成的ESB接口自动化测试实践

字数 3667阅读 4122评论 0赞 1

摘要:
2018年8月,证监会发布了《证券期货业机构内部企业服务总线实施规范》。企业服务总线(Enterprise Service Bus)是一个具有标准接口、实现了互连通信、服务路由等功能的基础平台,是实现SOA的重要技术基础。它以开放标准为基础来支持应用之间消息、事件和服务级别上动态的互连互通,是一种在松散耦合的服务和应用之间标准的集成方式, 简化了整个企业信息系统的复杂性,提高信息系统架构的灵活性,降低企业内部信息共享的成本。
与传统软件测试不同的是,ESB服务测试对象是接口,更适合运用自动化测试,如何更高效的进行接口测试是当下QA所共同探讨与追求的目标。本文中介绍的ESB接口自动化测试方案是基于《证券期货业机构内部企业服务总线实施规范》,结合Jenkins和Python的持续集成的实践。

一、 引言

ESB框架主要包含基础架构组件(消息总线、协议转换、服务目录、服务路由、监控组件等)、接入组件(访问管理、适配接口等)和服务组件,见下图所示。服务生产者与服务消费者直接与ESB平台对接。

ESB内部架构

二、ESB测试现状

目前已有的ESB接口测试主要有以下几种场景:
1)新增功能\缺陷测试:针对缺陷的修复,只做确认测试;针对新增功能,只运行所有新增加的功能测试用例,用来判断是否正确实现了新的功能。
2)全部回归测试:全部重新运行所有的测试用例,本场景经常出现在接口版本升级或优化后常见的一项工作,这是一种安全的回归测试策略,遗漏缺陷的风险最小,但是测试成本很高。
3)基于风险选择的回归测试:基于一定的风险标准来从测试用例库中选择回归测试用例。首先运行最重要的、关键的和可疑的测试,而跳过那些次要的、例外的测试用例或那些功能相对很稳定的模块。因为运行那些次要用例即便发现缺陷,这些缺陷的严重性也较低。新进成员或经验不足测试成员很难判别某个测试用例是否需要进行回归测试,对测试人员专业水平要求高,且缺乏定量的客观标准。
4)基于代码相依性分析的回归测试:由开发经理等根据经验判断代码相依性情况进行提测试需求。
以上四种场景的接口回归测试均缺少一种可以帮助测试成员进行接口权重判断,另外,在实际工作中,接口测试通常由开发完成代码,简单自测后提测给测试人员,测试人员使用传统接口工具SoapUI和Postman等工具进行人工测试完就上线。在开发测试或上线变更中,我们还经常碰到以下问题:
●项目组件太多,编译后在生产上出问题,难排查
●每次版本迭代,总有老功能出问题
●发布环境出问题
●代码合并出问题
●频繁提交或开发修改代码未通知测试
确实在实际工作中,经常遇到上线进度紧张,测试成员没有足够精力和时间进行回归相应的旧接口用例。随着公司业务发展和信息系统增加,接口需求频繁新增或修改,回归测试压力较大,现阶段急需要一种自动化接口回归测试的方法来帮助项目成员进行日常ESB回归测试工作,提高交付质量。

三、实践

下面介绍一种可根据实际业务权重或人工设置权重进行持续集成接口自动化测试方法。本方法主要分为三个模块,一是持续集成部分,二是智能适配并运行用例,三是生成报告发送邮件。第一和三模块主要依赖于jenkins插件功能来实现,架构图如下:

ESB自动化测试系统架构

jenkins持续集成配置并计算接口权重值
1) 根据实际需要建立不同任务JOB,比如全部回归JOB,针对支付类接口JOB,针对微信功能接口的JOB,通常一个JOB就是运行一个测试用例集。
测试用例集:通常我们将测同一平台接口或同一功能的接口用例,当作一个用例测试集,比如提供某APP的接口,就是某APP测试用例集,一个用例集可以包含多个接口用例,一个接口用例也可归类于多个用例集。
2) 配置SVN源码管理

3) 构建触发器
4) 可配置定时触发或选择不配置(手动启动)

5) 配置测试范围(配置读取文件)

本步骤为配置核心,主要在配置文件上设置job执行的内容,配置文件内容包含测试集名称(或全部测试集)、业务系数、接口权重值等内容,其中业务系数、接口权重值以全局参数形式存储,可以人工设置固定值,也可以选择从系统数据库里读到接口的访问次数根据公式建模计算出权重比。测试接口权重值即衡量接口风险大小,该值可以人工主观判断后配置,也可以通过自运获取数据库的接口访问频率,通过公式自动生成。常见于以下2种公式。
1)全部回归测试配置文件、新增功能\缺陷测试场景使用以下配置:
所有测试集名称(配置测试集名称即可执行测试集底下的测试用例)、用例权重值(一个用例权重为1);
测试集权重=sum(接口权重值*用例数)
2)基于风险选择的回归测试配置文件、基于代码相依性分析的回归测试:
测试集名称、测试集权重值(自动计算)。
测试接口权重值=SUM(本测试集下各接口调用次数)/所有配置接口的调用次数本用例集接口数业务系数(默认业务系统值为1)。
测试集权重值=sum(测试接口权重值)
如产品业绩发布接口日常访问量较低,但若年底或月初时,该接口访问量会急增,若该接品有修改或与该接口相关的其它接口有修改,为用例覆盖率高,出现BUG风险低,可人工调整业务系数值以提高该接口的权重值。若有些相关接口暂时关闭,不需要回归测试,也可人工设置将业务系统值设置为0,则jenkins在构建自动化接口回归时,因为权重值为0,系统可自动跳过该接口用例。
使用第2种方法时,jenkins在执行时需要调用python的另一程序,即读取oracle信息并写入到一个python文件中如excel.py,将上图的配置文件改成excel.py即可。

6) 配置运行文件(要调用的python编写的自动化接口程序)

7) 配置构建后操作,比如邮件内容配置等
邮件内容配置:

智能适配并运行用例
我们的自动化程序使用python编写,程序框架如下图:

步骤1:运行测试集的程序入口;
在步骤1中,打开程序入口代码,代码会去读取【测试集配置文件】,并计算出用例集的权重比,来决定运行哪些测试集(也就是ESB服务,每个服务下有很多的接口)。
步骤2:智能运行对应测试集下的接口,接口程序示例如下图:

在步骤2中:根据步骤1生成的接口集权重值,运行测试集下的所有接口,每一个接口对应一个接口类,其中接口分成两种类型:wsdl和rest:如果运行的是wsdl对应接口类,系统可智能读取【单个配置文件】拿到wsdl的准确地址并初始化;如果运行的是rest对应接口类,系统可智能读取【单个配置文件】拿到该接口对应的url。
步骤3:拿到初始化的wsdl实例和url地址后,读取测试用例发送请求。
在步骤3中:根据上一步骤拿到wsdl实例和url地址,智能读取对应接口用例文件生成测试用例,注意用例和接口一样同样存在两种类型:wsdl接口用例和rest接口用例,如果运行的是wsdl接口的用例,系统会自动识别并把用例中的json入参转化为xml的入参(也就是说用例文件中入参必须写json),并使用wsdl实例发送请求得到运行结果,并将运行结果和用例中的预期结果(这里的运行结果是xml类型,因为wsdl本身就是以xml格式进行请求交互的)进行比较,如果实际结果包含预期结果,此用例就运行通过,反之运行失败;如果运行的是rest接口的用例,系统智能获取用例中的json入参(rest接口的入参也是json类型)和配置文件中url并自动发送请求得到运行结果(这里的运行结果也是json类型,因为rest请求本身就是以json格式进行请求交互的),如果运行结果与实际结果一致,此用例就运行通过,反之运行失败。
步骤4:把运行结果写入excel和html测试报告中;
在步骤4中:每当运行完成一个接口后,就把该接口的测试结果保存至列表中,当所有结果运行结束后,就把列表内容写入excel文件以及测试报告html中;
步骤5:运行结束后,程序会将本次运行的结果,以(接口名,用例数,通过用例数,失败用例数,)显示在控制台,并生成excel和WEB测试报告保存至本地方便后期调用和监控。结果参考如下:

生成报告发送邮件
每次jenkins的JOB构建完成后,系统记录用例集运行情况,包含用例数、通过数、失败数、接口权重值等信息,jenkins可将测试结果自动汇成邮件,发至项目成员邮箱。

四、总结

本测试方法结合jenkins工具进行人工启动测试和定时启动接口测试,有效实现持续集成测试功能,任一项目成员可均进行回归测试,判断测试结果是否优质。同时设置了自动触发邮件功能,项目成员可随时随地接收邮件,可随时关注测试结果。同时用例集根据实际业务系统和访问量判断接口权重值而进行回归测试,减少主观判断,有效缩减待回归测试用例集的规模,降低系统接口回归测试工作的时间成本与人力成本,并提高回归测试缺陷暴露效率。
目前本方法已投入使用,取得了一定的效果,方法也在不断完善中。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广