本文是我的同事丽丽姐2018年11月29日发表于公众号“CI智创未来”的一篇文章,特为大家转载分享
关于微服务
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务间采用轻量级通信机制互相沟通(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体的业务进行构建,并且能够被独立部署到生产环境、测试环境。
从微服务的概念可以看出它有如下好处:
● 每个服务可以独立开发
● 处理的单元粒度更细
● 单个服务支持独立部署和发布
●更有利于业务的扩展
那么,微服务如何进行测试工作,就成了一个新的问题。微服务的测试不仅要兼顾本应用本身是否能够正常工作,还要兼顾上下游应用能不能正常调用和被调用。如何快速高效地进行测试工作就成了一个重要的问题。
自动化测试平台
在微服务这种新型业务中,我们推荐我们的自动化测试平台框架,这个平台实现的功能目标划分如下:
1、在开发阶段可进行单元测试,自动计算单元测试覆盖率,自动生成统计报表。
2、在测试阶段,我们提供工具Robot Framework进行自动化测试,测试完成生成统计报告。
3、对于尚不能提供服务的外部接口,可以提供Mock Server供模拟接口返回,使本系统能够全面测试覆盖。
4、性能测试方面,可提供工具进行自动化性能测试,生成性能测试报告。
平台实现方案
逻辑架构图
这个架构图中,我们自动化测试平台实现自动化测试的工具集如图红框标注,简单做一下介绍:
1. 单元测试Junit框架:Junit是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量。它与Jacoco集成,在执行完以后会自动生成测试覆盖率统计。
2. Robot Framework:Robot Framework是一个基于Python可扩展地关键字驱动的测试自动化框架,它被广泛地使用在端到端地验收测试和回归测试中。对于需要时常回归的项目,Robot Framework的引入十分之必要。
3. Jmeter:Jmeter是基于Java的压力测试工具,它用于对软件做压力测试。
4. Mock Server:Mock Server说简单点就是模拟接口返回的一个Server,我们主要用它来模拟第三方接口缺失的情况。我们选型使用的Mock Server是SoupUI。
我们通过Jenkins可以整合所有的测试流程,把所有测试步骤整合成一个pipeline,达到完全自动化地执行的目的。
物理架构图
平台功能详解
单元测试框架-Junit
所谓单元测试是测试应用程序的功能是否能够按需要正常运行,是一个对单一实体(类或方法)的测试。单元测试是提高产品质量、满足客户需求的重要环节。
JUnit 是一个 Java 编程语言的单元测试框架。
JUnit有以下特点:
1. JUnit 是一个开放的资源框架,用于编写和运行测试
2. 提供注释来识别测试方法
3. 提供断言来测试预期结果
4. 提供测试运行(test runner)来运行测试
5. JUnit 测试允许你编写代码更快,并能提高质量
6. JUnit 优雅简洁。没那么复杂,花费时间较少
7. JUnit 测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果的报告
8. JUnit 测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件
9. JUnit 在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则变成红色
我们通过进行单元测试可以对程序中的复杂逻辑进行完全验证,找出程序中出错的地方,保证程序运行逻辑的正确性。
自动化测试工具-Robot Framework
自动化测试主要的作用是供回归测试的时候使用,在快速迭代更新的时候,可以迅速检验原来的功能是否依然能够正常工作。
我们为什么选用Robot Framework? 由于我们主要考虑的业务范畴是微服务相关的业务,考虑到公司目前的应用现状以及各方面效能考量,目前认为Robot Framework最适用于微服务中的接口/API测试。使用它的目的是为了实现在应用进行快速迭代更新的时候,支持其能够快速检查对外提供的接口/API是否依然能够正常工作,在应用原来功能不发生改变的情况下,对接口/API的测试在开发一次以后可以供长期作为回归测试使用,在应用快速迭代过程中为其质量把关。
Robot Framewor对于接口测试方面提供了相当多的基础包可供我们直接使用即可进行业务相关的测试,测试人员可以抛开很多技术层面的开发,而只关注业务流程相关的测试开发。
性能测试-Jmeter
Jmeter是一款优秀的开源性能测试工具。
特点:
1、开源工具,可扩展性非常好
2、高可扩展性,用户可自定义调试相关模块代码
3、精心简单的GUI设计,小巧灵活
4、完全的可移植性和100%纯java
5、完全swing和轻量组件支持(预编译的HAR使用javax.swing.*)包
6、完全多线程框架,允许通过多个线程并发取样以及单独的线程对不同的功能同时取样
基础构成:
1)负载发生器:产生负载,多进程或多线程模拟用户行为
2)用户运行器:脚本运行引擎,用户运行器附加在进程或线程上,根据脚本模拟指定的用户行为
3)资源生成器:生成测试过程中服务器、负载机的资源数据
4)报表生成器:根据测试中获得的数据生成报表,提供可视化的数据显示方式。
JMeter是开源软件中提供性能测试的最佳工具之一。
Mock Server-SoupUI
Mock Server主要应用场景有以下三方面:
1. 如果调用的是第三方接口,但没有测试环境,可以用Mock Server来模拟数据返回。
2. 前端开发时候,后端还没有写好,可以调用Mock Server模拟数据进行前端开发。
3. 多方联调时,如果中间方没有ready,只能利用Mock Server来模拟接口调用返回。
我们使用SoupUI来提供Mock Server服务,它操作简便,方便管理。
我们通过Jenkins整合这些自动化测试工具,敬请期待《关于微服务应用的自动化测试平台(二)》,我们会介绍Jenkins如何整合自动化测试平台,让我们在测试过程中能够高效发布,高效测试。