DockOne微信分享(一五一):Docker在测试中的应用


【编者的话】最近几年虚拟化、容器化的概念越来越火,依托于Docker的业务型公司也是越来越多,大多数情况下Docker都是作为服务部署的容器来使用,那Docker作为客户端又有怎样的发挥空间和优势?

此次分享是测试组内的Docker应用,我们Docker使用的角色可能稍微和一般场景不同(一般可能是将Docker作为服务部署的容器,而我们是将Docker作为客户端)。我们使用Docker容器作为性能压测中的压测端,这样的好处在于:
  • 快速部署:在压测中client端的扩展会很方便,因为在性能压测中有时候会需要很多的客户机,使用传统的主机部署多套、多台压测环境经常是个很费时间的事
  • 用完即删:在一次压测结束后,可以快速删除容器,可以资源的重复利用
  • 技术趋势:跟随新技术的发展脚步。


我们经常使用的压测软件有很多,而我们使用的JMeter传统的性能测试中的架构:
图片1.png


测试的架构简图:
123.png

业务模块简介

我们的业务底层为JMeter的分布式,针对JMeter进行二次开发:
  • Web UI模块:主要是用户可以在前端进行的case的生成,比如编辑接口的地址、参数、压测时长、定时触发等等……最终会生成JMeter的配置文件,case.jmx(jmx结尾的文件)
  • Control Proxy模块:内含rpc client模块,负责与容器内的rpc server交互, 还负责调用docker api模块进行docker service的生成,根据case的进程数、并发数进行计算service中的容器个数,配置文件、附件、操作指令等控制
  • Docker网络 : 使用Flannel进行将容器内部的IP暴露出来
  • Docker API模块:我们的Docker集群使用的是Docker Swarm,主要是对docker manager的接口封装,进行docker service的生成,获取容器IP等信息
  • Kafka:接受JMeter的日志,比如压测接口返回的状态,相应时间,字节数等
  • Storm:消费Kafka信息的日志,进行计算,并入库。前端进行报告展示
  • Docker images:内含JMeter、rpc server和容器内部的数据,指令交互主要通过rpc协议,比如文件的传输等 都是 通过 control proxy 和 container 中的 rpc server 进行交互


业务压测类型

  • jmx配置文件:通过用户在Web编辑的压测case生成的配置文件进行压测
  • CSV附件类型:通过用户自定义的流量包进行压测
  • 接口类型:通过我们提供的接口也可以进行压测


报告界面大概如下:

3.png


1.png


2.png


Q&A

Q:你好,我是Docker初学者同时对测试工作不是特别了解,我能简单的理解你们是根据Web界面填写的压测需求然后生成很多的Docker容器充当客户端去大量请求你们服务,然后达到压测效果的吗?

A:您理解的对,因为在传统的压测需求中,多台压测端的部署是个麻烦事,并且一台主机如果重复利用,环境管理是个很麻烦的事情,所以我们才有使用Docker的想法。
Q:想请问一下压力测试,都会对服务做那些方面的测试,比如有没有是高并发等?

A:一般来说,性能压测就是模拟多用户,一般是阶段性的压测,并发。我们关心的结果,业务的返回码,平响,平响分布时间等。
Q:Flannel端口暴露和接口封装是怎么实现的,还有Web界面用的是什么?

A:Flannel的IP暴露问题,您查询一下Flannel官网,这个网络插件可以达到暴露IP、端口的目的。接口封装,我们主要是将Docker的原生接口进行了封装,达到可以控制多台Node的功能,主要封装了创建网络、service,容器等接口。Web是采用Python的Django框架。
Q:非常感谢分享,我也是从事性能工作的。我有两个问题希望能解答下。第一个问题,对压测本身而言,关注的不仅仅是应用层面的性能,更多是为了明确的测试目标而设定的特定场景,我想问的是,Docker在这方面如何定位性能瓶颈出现在哪个层级?第二个问题,如何利用Docker模拟生产环境的压力,比如全链路压测,JMeter是否还适合这样的业务场景,有没有其他的解决方案?

A:我们的Web是提供传参功能的,用户可以自定义参数或参数列表,达到多样型的测试。并且我们提供用户自定义流量包的功能。到目前为此,压测过程中的瓶颈会偶尔出现在计算过程中,因为数据量大的时候后端计算时,会占用大量的内存。第二个问题,模拟生产环境,我们使用的是国产开源的TCPCopy,您可以查询一下,原理就是Dump线上的流量,进行线下回访。或在特定时间回访到线上,不知道是否回答了您的问题。
以上内容根据2017年12月5日晚微信群分享内容整理。 分享人 张志强,现任汽车之家测试开发工程师,曾是多年运维老兵。目前负责测试环境的系统、运维、监控、上线、测试等多项工作。 DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesa,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。

0 个评论

要回复文章请先登录注册