当前位置: 首页 > 技术与资源 > 技术分享 > 正文

应用的自动化测试与应用性能分析

2015-12-16 17:15:27

作者:周春仪新炬网络高级技术专家。


1. 基于jmeter+maven+Jenkins的自动化测试平台


随着互联网的发展,软件发布越来越频繁,需要做到小步快跑,快速反馈。如何做到快速的开发,发布,而不影响软件的质量。需要发布软件前做全面的功能测试和性能测试,单靠测试工程师的测试远远不够,我们需要一套自动化测试的平台。


在Maven中集成流行的测试工具JMeter,借助Jenkins的持续集成,创建对应的Job,实现自动化性能测试平台。Maven中集成构建Jmeter 提供两个插件选择:jmeter-maven-plugin  和chronos-maven-plugin 插件,接下来以jmeter-maven-plugin为例子作简单配置说明。


1)由于jmeter-maven插件运行时自动会引入jmeter所需的类库,所以机器上不需要单独安装jmeter.在POM.xml文件加入:


周春仪 - 应用的自动化测试与应用性能分析-1

如果出现找不到构件(artifact)的情况,考虑切换一下Maven Repository,最直接的方法是在POM中加入类似如下代码:


周春仪 - 应用的自动化测试与应用性能分析-2

在完成通过MAVEN启动Jmeter的分析过后,我们所要做的事情就是如何解析Jmeter运行后所得到的测试结果,并将这个测试结果以相关的格式展现出来。


2)测试结果输出格式,需要引入Jmeter-analysis-maven-plugin这个插件,生成html,cvs, chart几种方式.Jmeter-maven-plugin结合Jmeter-analysis-maven-plugin使用便可以方便的构建各种测试场景. 通过解析可以得到response time, tps等,还可以生成图表如下所示:


周春仪 - 应用的自动化测试与应用性能分析-3

3)通过Jenkins-CI执行Jmeter测试


配置了各种环境下的Maven配置文件,配置合适的Jenkins job 仅仅是一小步。 Jenkins的参数化构建,对于JMeter测试非常有用,例如用户可以配置参数定义负载测试的大小(即:线程的数量和迭代)。


周春仪 - 应用的自动化测试与应用性能分析-4

想要输出怎样的测试报告,就要看具体的需求。定期运行同样大小的负载测试,以便得到系统发生更改时,影响性能的反馈信息,Jenkins Performance Plugin 是一个不错的选择.如果想要图形化的方式展示系统的行为, jmeter-graph-maven-plugin可以很容易的集成进来。


一键启动工作:


周春仪 - 应用的自动化测试与应用性能分析-5

定义测试属性(如线程数):


周春仪 - 应用的自动化测试与应用性能分析-6

运行测试:


周春仪 - 应用的自动化测试与应用性能分析-7

最后显示的测试结果,清晰明了:


周春仪 - 应用的自动化测试与应用性能分析-8

以上是基于jmeter+maven+Jenkins 框架集成的自动化测试例子,测试是系统发布前的验收工作,是系统稳定的前提。


2. 应用性能分析


要对系统运行过程中做性能监控分析,就需要引入APM工具。应用性能管理(APM),主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证最终用户得到良好的服务,降低IT总拥有成本(TCO)。APM监控以及分析工具,提供了分布式应用程序的整体概述以及直接连接了用户行为,用户执行体验和技术过程之间的关系。分析具体哪个层面的性能指数影响到应用体验。


以AppDynamics为例:


周春仪 - 应用的自动化测试与应用性能分析-9

大多数应用程序的架构,已经透明地展示在你眼前,似乎已经完成了一半的工作。APM工具还提供性能阀值的设置,对性能指标实时产生告警,通过邮件或短信通知用户。


APM工具除了监控JVM虚拟机性能指标,更重要是能深入到代码层面,以java应用为例,可以采集java方法执行消耗的时间,事务提交的效率。应用事务是大多数APM工具的核心,通过用户的操作,应用的请求,追踪和跟踪事务提交的访问路径,监测一个分布式应用程序的整个过程,得到一个端到端的性能监测结果,以及远程系统和服务的连接请求。使用APM工具监控应用,需要有一点java开发经验,还有对应用和系统比较了解,这是个技术性的工作。但APM工具给应用系统带来的效益是很明显的,它会给你带来巨大的洞察你的分布式应用程序的能力,包括用户体验和技术方面的分析。


APM agent采集的实现原理:


利用 Java 代码,即java.lang.instrument 做动态加载. Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。


在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument、本地代码(native code)instrument,以及动态改变 classpath 等等。这些改变,意味着 Java 具有了更强的动态控制、解释能力,它使得 Java 语言变得更加灵活多变。通过这种机制agent端在应用程序执行过程中注入监控代码,采集到对应的指标,通过远程rpm通道送回到server端做数据的分析,实现不改动应用系统的情况下,监控应用的性能,快速定位故障,优化性能瓶颈,掌握用户体验。

上一篇:基于Mycat的数据库切分方案探索
下一篇:云时代下的新型测试技术