- 浏览: 404448 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
milkyTea_:
...
学习:二维码、QR码、J4L-QRCode、java -
xunke515:
请问如何更换其他用户,注销了从新登录的时候选择么?
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine -
_copythat:
学习:二维码、QR码、J4L-QRCode、java -
小fi(FD):
楼主,你好,关于你发表的《基于动态表单的Java不确定字段数报 ...
基于动态表单的Java不确定字段数报表项目实现 -
rmn190:
受用了。多谢分享!
SD2见闻--参加PPT制作秘笈沙龙
讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有其它的非功能因素也起着决定性的因素,例如软件的响应速度。影响软件响应速度的因素有很多,有些是因为算法不够高效;还有些可能受用户并发数的影响。 在众多类型的软件测试中,压力测试正是以软件响应速度为测试目标,尤其是针对在较短时间内大量并发用户的访问时,软件的抗压能力。本文以 JMeter 为例,介绍了如何使用它来完成常用的压力测试:Web 测试、数据库测试和 JMS 测试。 JMeter 最早是为了测试 Tomcat 的前身 JServ 的执行效率而诞生的。到目前为止,它的最新版本是2.1.1,它的测试能力也不再仅仅只局限于对于Web服务器的测试,而是涵盖了数据库、JMS、Web Service、LDAP等多种对象的测试能力。在最新的 2.1.1 中,它还提供了对于 JUNIT 的测试。 JMeter 的安装非常简单,从官方网站上下载,解压之后即可使用。运行命令在%JMETER_HOME%/bin 下,对于 Windows 用户来说,命令是 jmeter.bat。运行前请检查JMeter 的文档,查看是否具备相关的运行条件。对于最新版(即2.1.1),需要JDK的版本要求是JDK 1.4。 JMeter 的主要测试组件总结如下: 1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。 2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。 3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。 4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。 5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。 6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。 7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。 8. 定时器负责定义请求之间的延迟间隔。 JMeter的使用非常的容易,在 ONJava.com 上的文章 Using JMeter 提供了一个非常好的入门。 压力测试不同于功能测试,软件的正确性并不是它的测试重点。它所看重的是软件的执行效率,尤其是短时间内访问用户数爆炸性增长时软件的响应速度,压力测试往往是在功能测试之后进行的。在实际的开发过程中,软件潜在的效率瓶颈一般都是那些可能有多个用户同时访问的节点。 就目前 Java EE 的平台下开发的软件来说,这种节点通常可能是:Web 服务器、数据库服务器和 JMS 服务器。它们都是请求主要发生的地点,请求频率较其它的节点要高,而且处于请求序列的关键路径之上。如果它们效率无法提高的话,对于整个软件的效率有致命的影响。而且在这些节点上一般都会发生较大规模的数据交换,有时其中还包含有业务逻辑处理,它们正是在进行压力测试时首先需要考虑的。 本文以这三种节点为例,介绍如何使用 JMeter 来完成针对于它们的压力测试。 对于大多数的项目来说,并不会自行开发一个Web服务器,因此Web服务器压力测试的对象实际就是--发布到Web服务器中的软件。最简单的Web测试计划只需要三个 JMeter 的测试元件,如下图: 其中: 这种设置对于包含了安全机制的 web 应用是不够的,典型的 web 应用一般都会: 1. 有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到 session 中。 2. 有一个 filter,它拦截请求,检查每个请求相关的 session 中是否包含有用户安全信息。如果没有,那么请求被重定向到登录页,要求用户提供安全信息。 在这种配置下应用上面的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。如果不加断言,那么在监听器看来所有的请求都是成功。而实际上,这些请求最终都没有到达它们应该去的地方。显然,这种测试结果不是我们所期望的。 为了成功的测试,至少有2种方法: 对于第一种方法,有其局限性: 虽然,第二种方法配置难度增加了,但是它不用修改程序。而且还可将测试计划保存成文件,以便重复使用。因此,选用第二种方法是较为理想的做法。下面以一个简化的例子说明使用方法二的配置步骤。 1. 例子由以下几个文件组成: AuthorizenFilter.java,过滤器负责检验session中是否存在用户信息。如果没有,那么就转向到 login.jsp。它的主要方法 doFilter 内容如下: User.java,用户类负责记录用户的信息。为了简化,这里的登录操作只允许指定用户名和密码。主要内容如下: Login.jsp 和welcome.jsp。其中 login.jsp 负责生成 User 对象,并调用 User 的login。当 login 返回为 true 时转向到 welcome.jsp。其验证部分的代码: web.xml,配置 filter 拦截所有访问 JSP 页面的请求: 2. 创建如下结构的Web测试计划: 其中主要测试元件说明如下: 启动测试计划之后,执行的顺序是:首先,第一个请求登录页进行登录;成功登录之后,使用循环控制器执行第二个请求。请求welcome.jsp时,响应断言用来验证是否确实是welocme.jsp来处理请求,而不是因为其它页。在这个测试计划中需要注意的是http cookie管理器。正是由于它的作用,使得第二个请求能顺利的发送到welcome.jsp进行处理,而不是因为缺少用户安全信息转发到login.jsp。 在这个例子中,我们并没有在程序中使用cookie(使用的是session),那么http cookie管理器怎么会起作用呢?这是因为在servlet/jsp规范中对于session的状态跟踪有2种方式: 对于第二种情形,可以使用JMeter前置管理器中的http url重写修饰符来完成。对于Tomcat,Session参数是jsessionid,路径扩展使用";"。使用url编码时需要注意,必须将浏览器的cookie功能关闭。因为url编码函数,如encodeURL,会判断是否需要将sessionid编码到url中。当浏览器允许cookie时,就不会进行编码。 如果cookie而不是session来保存用户安全信息,那么直接使用http cookie管理器就行了。此时,需要将使用的cookie参数和值直接写到管理器中,由它负责管理。对于其它的cookie使用,也是如此操作。 登录问题解决之后,对于 Web 服务器的测试就没什么难点了。剩下的就是根据实际需要,灵活运用相关的测试组件搭建编写的测试计划。(当然,对于安全问题还有其它的使用情景。在使用时需要明确:JMeter 是否支持,如果支持使用哪种测试组件解决。) 数据库服务器在大多数企业项目中是不可缺少的,对于它进行压力测试是为了找出:数据库对象是否可以有效地承受来自多个用户的访问。这些对象主要是:索引、触发器、存储过程和锁。通过对于SQL语句和存储过程的测试,JMeter 可以间接的反应数据库对象是否需要优化。 JMeter 使用 JDBC 发送请求,完成对于数据库的测试。一个数据库测试计划,建立如下结构即可: 其中: 在实际的项目中,至少有2种类型的JDBC请求需要关注:select语句和存储过程。前者反应了select语句是否高效,以及表的索引等是否需要优化;后者则是反应存储过程的算法是否高效。它们如果效率低下,必然会带来响应上的不尽如人意。对于这两种请求,JDBC请求的配置略有区别: Select语句 存储过程 如果对于Oracle,如果测试的是函数,那么也可以使用select语句来进行配置,此时可以使用:select 函数(入参) from dual形式的语句来测试,其中dual是oracle的关键字,表示哑表。对于其它厂商的数据库产品,请查找手册。 MOM 作为消息数据交换的平台,也是影响应用执行效率的潜在环节。在 Java 程序中,是通过 JMS 与 MOM 进行交互的。作为 Java 实现的压力测试工具,JMeter 也能使用 JMS 对应用的消息交换和相关的数据处理能力进行测试。这一点应该不难理解,因为在整个测试过程中,JMeter 测试的重点应该是消息的产生者和消费者的本身能力,而不是 MOM本身。 根据 JMS 规范,消息交换有2种方式:发布/订阅和点对点。JMeter针对这两种情形,分别提供了不同的Sampler进行支持。以下MOM我们使用ActiveMQ 3.2.1,分别描述这两种消息交换方式是如何使用 JMeter 进行测试。 1. 测试前的准备(两种情况都适用) JMeter 虽然能使用 JMS 对 MOM 进行测试,但是它本身并没有提供JMS需要使用的包。因此,在测试之前需要将这些包复制到 %JMETER_HOME%/lib 下。对于 ActiveMQ 来说,就是复制 %ACTIVEMQ_HOME%/lib。%ACTIVEMQ_HOME%/optional 是可选包,可根据实际情况来考虑是否复制。 JMeter 在测试时使用了 JNDI,为了提供 JNDI 提供者的信息,需要提供 jndi.properties。同时需要将 jndi.properties 放到 JMeter 的 classpath 中,建议将它与 bin下的 ApacheJMeter.jar 打包在一起。对于 ActiveMQ,jndi.properties 的示例内容如下: 2. 发布/订阅 在实际测试时,发布者和订阅者并不是需要同时出现的。例如,有时我们可能想测试单位时间内消息发布者的消息产生量,此时就不需要消息发布者,只需要订阅者就可以了。本例为了说明这两种Sampler的使用,因此建立如下的测试计划: 其中JMS Publisher和JMS Subscriber的属性:选择"使用jndi.properties",连接工厂是connectionFactory,主题是MyTopic,其它使用默认配置。对于JMS Publisher,还需提供测试用的文本消息。 启动ActiveMQ,运行测试计划。如果配置正确,那么与ActiveMQ成功连接之后,在JMeter的后台会打印出相关信息。在测试过程中,JMeter 后台打印可能会出现java.lang.InterruptedException 信息,这个是正常现象,不会影响测试过程和结果。这一点可以从 bin 下的 jmeter.log 看出。 3. 点对点 对于点对点,JMeter只提供了一种Sampler:JMS Point-to-Point。在例子中,建立如下图的测试计划: 其中:Communication style是Request Only。对于另一种风格:Request Response,会验证收到消息的JMS Header中的JMSCorrelationID,以判断是否是对请求消息的响应。 本文介绍了如何使用JMeter完成最常用的三种类型服务器的压力测试,这三种类型的压力测试涵盖了很大一部分的使用情形,然而需要记住的是工具毕竟是工具。效果好不好,关键还是在于使用的人。而且,对于压力测试,测试计划的好坏是关键。针对不同的情况,分析后有针对的进行测试,比起拿枪乱打、无的放矢显然要高效得多。
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session= req.getSession();
User user = (User)session.getAttribute("user");
if(null == user){
String uri= req.getRequestURI();
//如果请求页是登录页,不转向
if( uri.equalsIgnoreCase("/gWeb/login.jsp")){
chain.doFilter(request, response);
} else{
res.sendRedirect("/gWeb/login.jsp");
}
}else{
chain.doFilter(request, response);
}
}
public class User {
private String user;
private String pwd;
public User(String user, String pwd) {
this.user = user;
this.pwd = pwd;
}
public boolean login(){
return user.equals("foxgem") && pwd.equals("12345678");
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
<%
if( request.getParameter("Submit") != null) {
User ur= new User( request.getParameter("user"), request.getParameter("pwd"));
if( ur.login()){
session.setAttribute("user", ur);
response.sendRedirect("/gWeb/welcome.jsp");
} else{
session.setAttribute( "LOGIN_ERROR_MSG",
"无效的用户,可能原因:用户不存在或被禁用。");
response.sendRedirect("/gWeb/index.jsp");
return;
}
}
%>
<filter>
<filter-name>authorizen</filter-name>
<filter-class>org.foxgem.jmeter.AuthorizenFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authorizen</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
java.naming.factory.initial = org.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
#指定connectionFactory的jndi名字,多个名字之间可以逗号分隔。
#以下为例:
#对于topic,使用(TopicConnectionFactory)context.lookup("connectionFactry")
#对于queue,(QueueConnectionFactory)context.lookup("connectionFactory")
connectionFactoryNames = connectionFactory
#注册queue,格式:
#queue.[jndiName] = [physicalName]
#使用时:(Queue)context.lookup("jndiName"),此处是MyQueue
queue.MyQueue = example.MyQueue
#注册topic,格式:
# topic.[jndiName] = [physicalName]
#使用时:(Topic)context.lookup("jndiName"),此处是MyTopic
topic.MyTopic = example.MyTopic
发表评论
-
互联网金融网络借贷系统架构
2015-08-10 16:31 929一、关于网络借贷的法律法规 为鼓励金融创新,促进互联网金 ... -
【知识贴:一张清晰的项目管理脑图】
2014-06-11 13:14 744【知识贴:一张清晰的项目管理脑图】从立项到规划、从时间管理到 ... -
蔡德辉:解读项目管理能力构建与可持续发展
2012-07-16 10:31 856<p>十年,也是现代 ... -
八个免费基于Web的项目管理系统
2011-05-26 23:55 1119没有计划 就计划失败"fail to plan - ... -
担保软件 再担保信息化管理软件 北京万易 白金山
2011-04-19 20:39 69再担保机构的服务对象为担保机构以及中小企业和个人,合作对象 ... -
担保软件 协同信用担保管理软件 北京万易 白金山
2011-03-30 20:24 43协同信用担保管理软件是以整合担保机构资源、控制担保机构风险 ... -
担保软件 小额贷款的发展对担保业将会产生冲击 北京万易 白金山
2011-03-24 16:00 50小额贷款的发展对担保业将会产生冲击,担保软件厂商可以考虑做好小 ... -
担保软件 担保知识管理 北京万易 白金山
2011-03-18 12:58 60担保知识管理软件是以信息技术为基础,帮助担保机构对异 ... -
如何做一个好的PPT演讲(转载)
2010-11-25 07:47 1842如何做一个好的PPT演 ... -
从3个科技公司里学到的57条经验
2010-11-22 12:57 688外刊IT评论网站上曾发表博文《从3个科技公司里学到的57条经验 ... -
从3个科技公司里学到的57条经验
2010-11-22 12:57 669外刊IT评论网站上曾发表博文《从3个科技公司里学到的57条经验 ... -
最佳B/S项目管理工具dotProject2.0.1的安装说明
2010-10-26 21:58 1148前言: 一 ... -
IT项目管理案例(一个具体例子)项目管理综合案例分析
2010-10-26 21:26 2618项目管理综合案例分析 1.项目背景 东方建筑设 ... -
解密淘宝网的开源架构
2010-10-22 22:10 959淘宝网,是一个在线商品数量突破一亿,日均成交额超过两亿元人 ... -
实施CMMI 具体要做什么
2010-10-13 12:56 9461. 建立SEPG 的工作例会制度,由Leader 主持,要有 ... -
从工程师到管理者转变——来自项目管理群的讨论
2010-10-13 12:51 719城市兔子—技术主管— ... -
假如我是一个项目总监/经理——我手写我心
2010-10-13 12:37 885假如我是一个项目总监/ ... -
Google(谷歌)正在构造可怕的帝国
2010-06-22 21:24 978今天看到新浪转载《中国企业家》的一篇文章“百度VS谷歌:优 ... -
百度VS谷歌:优秀与伟大之别
2010-06-22 21:15 785《中国企业家》杂志 百度与Google之间的 ... -
分析称企业IT部门重要性降低:从业人员应转型
2010-06-22 20:59 798导读:美国IT网站Computerworld今天撰文称,随 ...
相关推荐
### 使用JMeter完成常用的压力测试 #### JMeter简介与应用场景 JMeter是一款广泛使用的开源压力测试工具,由Apache基金会提供支持。它主要用于测试Web应用、数据库服务器、消息传递系统等性能,尤其适用于需要评估...
在实际工作过程中,以电商平台为实例,详细讲解如何使用 JMeter 工具进行压力测试。压力测试是指通过模拟多用户访问系统,以评估系统在高并发环境下的性能,避免系统崩溃和性能下降。 安装环境 JMeter 可以在 ...
Jmeter 压力测试工具安装及使用教程 Jmeter 是 Apache 基金会提供的一款开源压力测试工具,广泛应用于各种 web 应用程序的性能测试和压力测试。下面是 Jmeter 压力测试工具的安装和使用教程。 一、Jmeter 下载和...
本文将详细介绍如何使用JMeter进行TCP服务器的并发压力测试,包括环境搭建、软件下载与安装、以及具体的操作实例。 首先,要使用JMeter进行测试,需要确保你的环境中安装了JDK(Java开发工具包)。JMeter要求JDK...
本资源包含的是最新版本的"JMeter"和"Badboy"两款压力测试工具,它们是测试人员的得力助手,有效解决了一些旧版本可能导致的问题,如Badboy导出的脚本在JMeter中无法正常使用的状况。 **JMeter** Apache JMeter是...
Jmeter在我们日常IT工作过程中是个不错的工具,它可以帮助我们测试深信服AD负载均衡时的服务器负载的功能测试,也可以帮我们完成日常工作中网站的压力测试。甚至可以成为一款DOS攻击的工具,如针对某一个发动无数...
JMeter 是一个广泛使用的开源压力测试工具,适用于各种类型的测试,包括Web应用、数据库和消息中间件(JMS)等。 **JMeter 基本概念** JMeter 是由Apache软件基金会开发的一个纯Java应用程序,用于进行负载和性能...
在标题"jmeter压力测试websocket所需jar包.rar"中,提到的关键点是JMeter和WebSocket压力测试所需的jar包。这意味着我们需要引入特定的库来扩展JMeter,使其能够支持WebSocket协议的测试。这个压缩包可能包含了这些...
Apache JMeter是一款强大的开源压力测试工具,主要用于对各种应用程序和服务进行性能测试和负载测试。它最初设计用于Web应用测试,但后来发展成为可以对多种协议(如HTTP、FTP、JDBC、SMTP等)进行测试的全能工具。...
Apache JMeter是一款强大的开源性能测试工具,主要用于模拟大量并发用户对Web应用进行负载和压力测试。JMeter 5.3是其一个版本,提供了一系列增强的功能和改进,以帮助开发者和测试人员评估应用程序在高负载下的表现...
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、...
Apache JMeter是一款广泛应用的开源性能测试工具,尤其适合对Web应用进行压力和负载测试。在这个场景中,我们将探讨如何利用JMeter来测试Java请求。 标题“使用Jmeter测试Java请求”表明我们要关注的是在JMeter中...
JMeter 2.4是一款广泛使用的开源压力测试工具,尤其在Web应用程序的性能评估和负载测试领域备受青睐。它最初由Apache软件基金会开发,属于Jakarta项目的一部分,因此在压缩包中我们看到了“jakarta-jmeter-2.4”这个...
在本文中,我们将探讨如何使用JMeter进行压力测试,特别是针对Java应用程序的场景。JMeter是一款开源的、跨平台的性能测试工具,广泛用于测试Web应用和服务的负载和性能。 首先,你需要从官方网站下载JMeter,地址...
标题 "使用jmeter进行压力测试入门讲解1" 涉及到的知识点主要集中在如何使用Apache JMeter这一开源性能测试工具进行基础的压力测试。JMeter主要用于模拟多个并发用户执行特定的任务,例如HTTP请求,以此来评估系统在...