关键词:
背景
希望选择一款Web Service性能测试工具,能真实模拟大量用户访问网站时的请求,从而获取服务器当前的请求处理能力(请求数/秒)。
以微信服务器为例,每个用户用独立的登录token,做各种操作,比如刷消息、发消息、看朋友圈等。
希望该性能测试工具符合如下要求:
- 测试脚本能力,最好是Python/Ruby等最常用的
- 每个并发实例能使用不同参数
- CLI启动测试,这对自动化测试很重要
- Session支持,也就是第一个请求的响应,能用于后续请求的参数。
- 单个结点的并发数量高。
- 分布式支持,不受限于单个结点的计算能力。
性能测试工具选手:
Gatling
Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥有以下特点:
- 支持Akka Actors 和 Async IO,从而能达到很高的性能
- 支持实时生成Html动态轻量报表,从而使报表更易阅读和进行数据分析
- 支持DSL脚本,从而使测试脚本更易开发与维护
- 支持录制并生成测试脚本,从而可以方便的生成测试脚本
- 支持导入HAR(Http Archive)并生成测试脚本
- 支持Maven,Eclipse,IntelliJ等,以便于开发
- 支持Jenkins,以便于进行持续集成
- 支持插件,从而可以扩展其功能,比如可以扩展对其他协议的支持
- 开源免费
测试场景示例:
http://gatling.io/docs/2.1.7/advanced_tutorial.html
object Search
val feeder = csv("search.csv").random // 1, 2
val search = exec(http("Home")
.get("/"))
.pause(1)
.feed(feeder) // 3
.exec(http("Search")
.get("/computers?f=$searchCriterion") // 4
.check(css("a:contains(‘$searchComputerName‘)", "href").saveAs("computerURL"))) // 5
.pause(1)
.exec(http("Select")
.get("$computerURL")) // 6
.pause(1)
统计图:
nGrinder
官网很卡,真的很卡...zzz...
http://naver.github.io/ngrinder/
nGrinder是一个基于 Grinder 开发的一个非常易于管理和使用的性能测试系统。
它是由一个controller和连接它的多个agent组成,用户可以通过web界面管理和控制测试,以及查看测试报告,controller会把测试分发到一个或多个agent去执行。用户可以设置使用多个进程和线程来并发的执行该脚本,而且在同一线程中,来重复不断的执行测试脚本,来模拟很多并发用户。
nGrinder的测试是基于一个python的测试脚本,用户按照一定规则编写测试脚本以后,controller会将脚本以及需要的其他文件分发到agent,用Jython执行。并在执行过程中收集运行情况、响应时间、测试目标服务器的运行情况等。并保存这些数据生成运行报告,以供以后查看。
nGrinder的一大特点就是非常容易使用,安装也非常容易,可以做到开箱即用,测试用户也可以很容易就开始测试任务。当然,如果想执行一些比较复杂场景的性能测试,就需要测试人员对python有一定认识。
测试场景示例:
http://grinder.sourceforge.net/faq.html#simulating-users
#
# testRandomise.py
#
import random
import string
class TestRandomise:
def __init__(self, filename):
self._users = []
infile = open(filename, "r")
for line in infile.readlines():
self._users.append(string.split((line),‘,‘))
infile.close()
def getUserInfo(self):
"Pick a random (user, password) from the list."
return random.choice(self._users)
#
# Test script. Originally recorded by the TCPProxy.
#
from testRandomise import TestRandomise
tre = TestRandomise("users.txt")
class TestRunner:
def __call__(self):
# Get user for this run.
(user, passwd) = tre.getUserInfo()
# ...
# Use the user details to log in.
tests[2002].POST(‘https://host:443/securityservlet‘,
( NVPair(‘functionname‘, ‘Login‘),
NVPair(‘pagename‘, ‘Login‘),
NVPair(‘ms_emailAddress‘, user),
NVPair(‘ms_password‘, passwd), ))
统计图:
Locust
Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。
Locust 是非常简单易用,分布式,用户负载测试工具。Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户。
Locust 是完全基于时间的,因此单个机器支持几千个并发用户。相比其他许多事件驱动的应用,Locust 不使用回调,而是使用轻量级的处理方式 gevent。
测试场景示例:
http://docs.locust.io/en/latest/quickstart.html#example-locustfile-py
from locust import HttpLocust, TaskSet
def login(l):
l.client.post("/login", "username":"ellen_key", "password":"education")
def index(l):
l.client.get("/")
def profile(l):
l.client.get("/profile")
class UserBehavior(TaskSet):
tasks = index:2, profile:1
def on_start(self):
login(self)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait=5000
max_wait=9000
统计图:
其他未参与比较的工具
因为没有脚本能力或CLI,所以未加入比较
- JMeter
- ApacheBench(ab)
- Tsung
Locust作者对JMeter和Tsung发的牢骚:
http://my.oschina.net/u/1433482/blog/464092#OSC_h4_3
我们研究了现有的解决方案,都不符合要求。比如Apache JMeter和Tsung。
JMeter基于UI操作,容易上手,但基本上不具备编程能力。其次JMeter基于线程,要模拟数千用户几乎不可能。
Tsung基于Erlang,能模拟上千用户并易于扩展,但它基于XML的DSL,描述场景能力弱,且需要大量的数据处理才知道测试结果。
比较
比较科目x工具矩阵
结论
很明显,首选的全能选手就是 Gatling ,Akka Actor的并发模型就是来自于并发语言的鼻祖Erlang。
如果想自己扩展性能测试工具,那么Locust这个小而精的工具可以考虑。
nGrinder工具是韩国版微信Line开源的,并且专门开设了中文论坛,由韩国工程师回答中国开发者。但有两个问题,一是官网太卡,其二示例都是片段不完整。
rcorcparquet格式比较和性能测试
RCORCParquet格式比较和性能测试作者:刘旭晖Raymond转载请注明出处Email:colorantat163.comBLOG:http://blog.csdn.net/colorant/为什么要比较这三者为什么要比较,起因是为了提高Hadoop集群的存储和计算效率,尤其是离线Hive作业的效率,为什... 查看详情
性能测试入门:性能测试工具
这篇文章介绍下性能测试工具:简单模拟工具有很多场景下,我们只是想做一个简单的压测,对于监测结果要求并不高,压测的场景也比较简单,不想安装复杂的工具,这种情况下,推荐使用简单的模拟工具进行就可以了。abab... 查看详情
drill学习笔记之与mongo性能测试比较
性能测试: 竟然用了30秒。。。。如果使用mongo客户端只有1-2秒感觉Drill是把数据拉过来再进行sql优化,并没有使用Mongo的API,效率低下让人失望。。。 查看详情
性能测试-性能需求分析
一个真实的需求 测试某系统切换成https协议之后性能的下降情况需求分析: 1、对比:http/https 2、求出http协议下的性能 3、求出https协议下的性能 4、求出两者的差异 5、确定性能指标(tps) 6、测试报告... 查看详情
刷题面筋-测开-比较压力测试负载测试性能测试
...服务器保持正常运行所能达到的最大状态。人们通常使用测试工具来完成压力测试,如模拟上万个用户从终端同时登录,这是压力测试中常常使用的方法。负载测试(VolumeTesting)用于检查系统在使用大量数据的时候正确工作的... 查看详情
性能测试中带宽的影响
在进行性能测试时,如果发现服务器的各项指标都比较低的时候,就应该考虑测试带宽的限制问题了。以下是某性能测试遇到的问题 性能优化点:1、动态页面静态化2、网络io与磁盘io比较3、这两天在为进行过调优后的服务... 查看详情
性能测试流程
性能测试流程注意要点测试机器硬件配置尽量和线上一致系统版本与线上一致测试环境部署线上最小单元模块(一般线上都是集群部署,线下可以用最小的单元集群)应用、中间件、数据库要与线上一致其他特殊配置数据构造... 查看详情
全栈性能测试修炼宝典--jmeter实战
性能测试初体验1、测试分类 从图中可以看出,性能测试在整个软件测试环节中占了50%的内容,比如负载测试、压力测试、性能测试、大数据量测试、恢复测试、内容泄露测试、竞品测试(比较测试)和可靠性测试。2、性能... 查看详情
性能测试工具——loadrunner篇
一、LoadRunner组件1、VirtualUserGenerato——r录制最终用户业务流程并创建性能2、Controller——组织、驱动、管理并发监控负载测试3、Analysis——用于查看、剖析和比较性能结果二、LoadRunner的功能1、轻松创建虚拟用户2、创建真实的负... 查看详情
性能测试测试
话说性能测试,听上去比较复杂,实则,确实复杂。无论是从性能测试计划编写还是到测试执行、测试报告,没一个环节确实都不简单。这一篇主要是性能测试的准备工作描述,不涉及具体操作。还记得上一份工作的时候,... 查看详情
性能测试入门:性能测试中的各项指标告诉我们什么
性能测试性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。按照不同的目标,可以分为负载测试、压力测试、容量测试、稳定性测试。平时工作中如果不是专业的测试机... 查看详情
性能测试工具locust和jmeter比较-及相关书籍下载
ApacheJMeter™和Locust都是是最受欢迎的性能测试工具。JMeter和Locust-简介JMeter是久经考验的性能框架之一,其第一个版本大约在20年前发布。它是用纯Java语言编写的。最初,JMeter开发用于执行Web和FTP应用程序的负载测试。但是,现... 查看详情
性能测试应用领域
大概说说性能测试的五种应用领域吧,可能纯文字内容太多,没耐心的话,可以跳过不看。。。 ————参考书籍《软件性能测试过程详解与案例剖析》 概括来说,可以将性能测试的应用领域划分为下面五个不同领... 查看详情
unity中各类物理投射性能横向比较
...Unity5.3.4版本,并用Profiler和StopWatch进行测试并截图,比较性能和GC差异 由于胶囊之类的投射实在太慢了,我改用1000次调用 查看详情
性能测试系列-javagc调优
性能测试中除了需要做好性能测试外,我们还需要做性能测试后的,性能调优,需要发现性能问题,也需要做性能调优,在做性能调优中,jvm的性能调优是经常遇到的一个。随着jdk版本的迅速变化,jdk里面的GC算法也是发生了很... 查看详情
jmeter的认识
...性能测试。它能够很好的支持各种常见接口,如HTTP(S)、WebService、JDBC、JAVA、FTP等,并以多种形式展现测试结果。jmeter和LoadRunner对比: Jmeter LoadRunn 查看详情
rpc框架性能基本比较测试
RPC框架:gRPC、Thrift、Wildfly、Dubbo原文链接:http://www.open-open.com/lib/view/open1426302068107.html gRPC是Google最近公布的开源软件,基于最新的HTTP2.0协议,并支持常见的众多编程语言。我们知道HTTP2.0是基于二进制的HTTP协议升级版本,... 查看详情
性能测试工具loadrunner32-lr之windows性能监控perfmon
Perfmon是啥? Perfmon提供了图表化的系统性能实时监视器、性能日志和警报管理,可以用于监视CPU使用率、内存使用率、硬盘读写速度、网络速度等 性能分析方法 内存分析方法 内存分析用于判断系统有无内存瓶颈,... 查看详情