common performance tool and solution

之前一直想把经常搞的性能测试的公共部分(压力控制部分)抽取出来作为一个公共的部分(jar),这样一方面能让开发测试者都集中在”测试性能的case”编写上,另外一个方面使用同一标准和同一实现有利于”团队”内部标准化。

实际上,现在大多直接使用jmeter来控制压力,也能达到效果,但是jmeter本身到底如何控制的,不去熟读代码很难理解,实际使用中,假设case需要调用java代码等时,还需要学习bean shell等,所以总结起来就是自由度不够大,不够透明,所以试用一段时间后,觉得不如自己实现一套,自由度大的,更广泛通用可控的,于是有了:

https://github.com/jiafu1115/performance-test-tool

直接看如何使用(基本使用方式):

compile exec:java -Dexec.mainClass="com.test.performance.PerfTool" -Dexec.args="-t com.test.performance.demo.DemoTestCaseImpl -duration 20 -thread 5 -tps 30"

(1)控制3个参数:1 持续多久 -duration 20 2 使用多少线程 -thread 5 3 TPS期待多少 -tps 30 实际使用,可以只指定线程数,让每个线程loop去发,也可以单独设置tps不设置线程数来尽量达到预期TPS.
(2)提供2种方式:1 测试Case实现类:-t com.test.performance.demo.DemoTestCaseImpl 2 收集测试结果类: -r com.test.performance.result.impl.InfluxdbCollectMethodImpl或自己提供
(3)提供3种运行信息:1 -program MyProgramName 2 -testname TestWebService 3 -runid ThisRunId
(4)提供4种case辅助: 1 before test 2 after test 3 prepare environment 4 destroy environment.

这样基本完成单机压力控制和实现,然后默认提供了influxdb的收集结果的方式和日志输出的方式可供选择,从而使用者只需要专注用例实现和结果收集即可。

结合这个单机的压力控制,还要完成三件事情:

(1) 并发控制: 可以采用jenkins的multi config项目来控制多个机器并发。

效果图:

(2) 结果收集: 可以采用influxdb等来收集,同时需要收集被测试机器的性能,可以在机器上部署collectd,然后发到influxdb,这样数据结果包含2个部分:性能测试数据和系统性能。
(3) 结果分析: 可以直接使用grafana来展示即可,而对于server的数据收集可采用collectd + grafana.

效果图:

结果应该至少提供3个维度:
(1)测试的性能数据, TPS, 响应时间(分布), 成功率
(2)被测机器的系统性能: cpu, memory, io, etc
(3)被测应用的性能数据: TPS, 响应时间(分布),成功率

总结: 经过剥离变化,就解决了共同的问题,然后使得性能测试者只关注自身测试用例和测试结果的收集和展示,这样就轻松了许多。

附:

1 使用的组件的安装:

1.1 influxdb 安装:

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.5.0.x86_64.rpm
sudo yum localinstall influxdb-1.5.0.x86_64.rpm
service influxdb start

1.1版本后无web界面了,别找了。

1.2 grafana 安装

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.3-1.x86_64.rpm
sudo yum localinstall grafana-5.0.3-1.x86_64.rpm
service grafana-server start

1.3 collectd 安装

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
yum install epel-release
yum install collectd
service collectd start

2. 使用的组件的配置:

2.1 influxdb + collectd收集系统信息需要的配置:

influxdb配置:

开启collectd数据收集:

[[collectd]]
    enabled = true
    bind-address = ":25826"
    database = "collectd"

启动会报错: /usr/share/collectd/types.db
所以influx上也要装上collectd可以解决这个问题。

2.2 collectd配置: server指向influxdb

Hostname "10.224.82.92"
 
Interval 2
ReadThreads 5

LoadPlugin cpu
LoadPlugin load
LoadPlugin memory
LoadPlugin swap
LoadPlugin battery

LoadPlugin network
<Plugin "network">
Server "10.224.2.147" "25826"
</Plugin>

发布者

傅, 健

程序员,Java、C++、开源爱好者. About me

发表评论