Jmeter学习概要

Jmeter学习概要

  1. Jmeter简介

Apache Jmeter是一个100%的纯java桌面应用,用于压力测试和性能测试。Jmeter最早是为了测试Tomcat的前身JServ的执行效率而诞生的,主要是针对web的压力和性能测试,但后来扩展到其他测试领域。从下面的图中我们可以看到:Jmeter可以用于测试FTP、HTTP、RPC、JUNIT、JMS、LDAP、WebService(Soap) Request以及Mail和JDBC(数据库压力测试)

另外,JMeter能够对应用程序做衰退测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。在知道如何具体使用之前,先说一下JMeter 的主要测试组件:

1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。

2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。

4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

8. 定时器负责定义请求之间的延迟间隔。

好了,简单介绍就到这里!下面是一些有关Jmeter的学习文档和资料的网站

Jmeter官方网站:http://jakarta.apache.org/jmeter/

Jmeter中文网站(目前只是部分翻译):http://www.bonoy.com/jmeter/

  1. Jmeter的安装与配置
    1. JMeter 的安装

       JMeter 的安装非常简单,从官方网站上下载,解压之后即可使用。运行命令在%JMETER_HOME%/bin 下,对于 Windows 用户来说,命令是 jmeter.bat(同时会启动一个dos窗口显示一些日志信息)和jmeterw.cmd,建议从jmeter.bat启动要更好些,因为在Jmeter运行的过程中可以在dos窗口看到一些错误日志信息。运行前请检查JMeter 的文档,查看是否具备相关的运行条件。对于最新版(即2.2),需要JDK的版本要求是JDK 1.4.2。

    1. Jmeter的配置

       Jmeter的主要配置文件jmeter.properties,需要根据不同的测试目的对配置文件做不同的设置。

       1. #language=de  Jmeter启动后窗口中所使用的语言,默认情况下该行是被注释掉的,因为在Jmeter启动的时候会根据操作系统的语言设置自行设定。对windows中文操作系统来说在Jmeter启动后就是中文界面,如果你想设定为其他语言,将该行注释去掉,在等号后面设定你想设定的语言。

       2. xml.parser=org.apache.xerces.parsers.SAXParser  xml文件解析器的设定,这个是Jmeter默认的,解析所需要的jar包在%JMETER_HOME%\lib下,你可以设置为你熟悉的xml文件解析方式,当然首先你要将所需要的jar包拷贝到%JMETER_HOME%\lib目录下。

       3. SSL configuration  对于数字化校园项目来说,由于使用了数字安全证书,所以在对软件进行测试前,必须设置此项(下面所指定的java类在%JAVA_HOME%\jre\lib\jsse.jar内,如果你使用的jdk为1.4.2,那设置好环境变量就可以了,将%JAVA_HOME%\jre\bin加入到环境变量的path中,将%JAVA_HOME%\jre\lib加入到环境变量的classpath中)

ssl.provider=com.sun.net.ssl.internal.ssl.Provider

ssl.pkgs=com.sun.net.ssl.internal.www.protocol

在生成数字安全证书的时候会生成一个.keystore文件,需要在此指定一下

javax.net.ssl.keyStore=H:/tools/jmeter/jakarta-jmeter-2.2/testPlan/configs/.keystore

在生成数字安全证书的时候会有一个密码,默认为changeit

#The password to your keystore

javax.net.ssl.keyStorePassword=changeit

最好将下面这行的注释去掉,这样如果我们的配置有什么问题可以在日志文件中记录的更清楚些

javax.net.debug=all

       4. #log_level.jmeter=INFO   Jmeter日志记录级别,将该行改为log_level.jmeter=DEBUG这样可以记录更加详细的日志信息。

       还有一些其他的设置如:CSVRead configuration、WML Parser configuration等在这就不一一详细说明了(我也还没搞清楚)。

  1. Jmeter的应用

       下载下来的Jmeter解压后,里面有使用帮助文档(在docs目录下),还有使用样例(在printable_docs\demos目录下),其自带的测试样例都很简单,要想测试复杂的项目还需要自己去摸索。

       Jmeter通常被用于测试web服务的压力和性能,因此下面将以一个实际的web测试为例进行详细讲解,里面会讲到变量和正则表达式的使用,相信只要掌握了变量和正则表达式的使用(还有Jmeter自带的函数也要灵活掌握),再复杂的测试用例或测试脚本都不在话下。

下面以“天津武警医学院的教学管理系统”为例来具体讲解

A. 编写测试计划或测试脚本(后面还会介绍如何利用工具来录制测试脚本)

1.1 启动Jmeter,启动后窗口内显示的几乎都式中文,感觉还不错,然后添加一个线程组,如下

在刚开始编写测试脚本时,应将线程数设的少一些为好,如下

然后新建一个文件夹,保存一下测试脚本,如下

1.2 在该线程组里面添加一个“用户定义的变量”测试组件,名称:default variables,变量名与值分别如下

userList          userlist/jwUser.dat[f1] 

userPass          userlist/jwUserPass.dat[f2] 

serverConfig      configs/server.csv[f3] 

在jakarta-jmeter-2.2\bin目录下新建userlist文件夹,然后在userlist内新建jwUser.dat与jwUserPass.dat文件,然后在这两个文件中分别写入登录系统的用户名和密码,注意要每行一个且一一对应,如:我的jwUser.dat文件内容为

jwadmin

1001300

jwUserPass.dat文件内容为

123[f4] 

321[f5] 

1.3 在你所保存的测试脚本(如我的H:\tools\jmeter\jakarta-jmeter-2.2\testPlan\ jwgl.jmx)的同级目录下新建configs文件夹(H:\tools\jmeter\jakarta-jmeter-2.2\testPlan\configs),然后新建server.csv[f6] 文件,并且把在生成证书的时候生成的 .keystore文件也放在这,修改jmeter.properties文件

javax.net.ssl.keyStore=H:/tools/jmeter/jakarta-jmeter-2.2/testPlan/configs/.keystore

server.csv文件内容如下(bkjw.wjyxy.mtn   cas.wjyxy.mtn)

1.4 再加一个“用户定义的变量”组件,名称:commandline variables

变量名称和值分别如下

userList         ${__property(userList,,${userList})}[f7] 

userPass        ${__property(userPass,,${userPass})}

serverConfig     ${__property(serverConfig,,${serverConfig})}

1.5 加入一个“HTTP信息头管理器”,名称和值为User-Agent  Mozilla/4.0 (compatible; MSIE 5.5; Windows 98),这个对于测试uPortal门户尤其重要

1.6 加入一个“HTTP Cookie 管理器”,这个没什么设置,将每次反复清楚cookies选中即可

1.7 加入一个“仅一次控制器”,然后在“仅一次控制器”的节点下添加“CSV Data Set Config”用于读取csv文件到变量,filename: ${serverConfig},variable names: jwglHost,casHost,注意该文件读取的方式是一行一行的读取的,且可以循环读取,当然也可以用它来存放我们的登录用户名和密码

1.8 加入一个“http请求默认值”,服务器名称和ip为${jwglHost}(注意这里就是变量的使用方法),这个就是我们在上一步从csv文件读取出来存放到jwglHost变量中的,协议为http 如下

1.9 加入一个“仅一次控制器”,并在其下加入一个“用户参数”组件,名称:userid,用户_1:${_StringFromFile(${userList})};名称:userpass,用户_1:${_StringFromFile(${userPass})},这里是从我们上面已经定义的属性对象中读取值,为登录做准备。

2.0 加一个“简单控制器”,然后在其下加一个“http请求”,服务器名称或ip为${casHost},即cas服务器的地址,这个请求的是cas的登录页面,注意协议为https,方法为:Post

2.1 在getlt的http请求节点下加一个“正则表达式提取器”,引用名称:LoginTicket、正则表达式:name="lt" value="(.*?)"、模版:$1$、匹配数字:1。注意此时我们还没有登录,之所以要先访问这个/login的目的式为了提取出cas登录页面里的<input type="hidden" name="lt" value="LT-1604-fLK9C0s3tVHthNnmzxZn" />中随机生成的value值,用于下一步的真正登录,没有那个值你将永远无法通过cas认证,如果说表单里面还有其他隐藏文本域,那也应该取出其值以用于下一步登录时使用。 那个值是通过正则表达式提取出来的。

2.2 在${casHost}的 http请求下加一“正则表达式提取器”,用于提取登录后,服务器传给客户端的ticket(证书编号),引用名称:ServiceTicket、正则表达式:ticket=(ST-[0-9]+-.*)",${casHost}的 http请求方法为POST

 

 

2.3 加一个“http请求”,名称:jw_menu.jsp、服务器或ip:${jwglHost}、协议:http、,方法为:Post路径:/menu.jsp,这就是我真正要测试的web请求。

2.4 加一个“相应断言”,用于测试是否得到我们想要的menu.jsp页面,在要测试的模式里面填写:欢迎您,这样如果返回的是menu.jsp且里面包含“欢迎您”,则说明成功登录且得到了我们想要的结果。

 

 

2.5 最后再加上监听器里面的:第二个图形结果、用表格查看结果、查看结果树,将测试结果以不同的形式表示

2.6 到这以后不要忘了注销我们的登录,加一个“http请求”, 注意要将这个请求放在所有http请求的最后,路径:/logout.jsp,因为我们的注销代码写在/logout.jsp页面上。

  1. Jmeter的使用总结

A. 当你通过以上步骤后,说明你的测试脚本基本完成,你可以根据你的需要在简单控制器的后面加上其他http请求,用于测试不同的功能,同时加大并发线程组内的线程个数,然后根据不同的线程个数将测试结果写入测试报告。

如:我要测试“课程总库管理”这个功能,那我再加一个“http请求”,名称:课程总库管理、路径:/queryCourseAction.do,因为这个查询页面需要两个参数:departmentID和queryButton,所以我们要增加两个同请求一起发送的参数以及参数值,提交给queryCourseAction取处理

B. 还有最重要的一点要说明的是:Jmeter是一个java的桌面软件,而不是浏览器,所以他并不能对返回结果内的js脚本自动自行,这样我们必须要先修改cas登录页面上存在的一个问题,这个问题在goServer.jsp页面里面,有下面这么一段代码需要修改一下,将里面用脚本跳转的功能去掉,而改用jsp脚本(response.sendRedirect(service);)来跳转,只有这样,才能够保证我们在登录cas后正常跳转到bkjw.wjyxy.mtn/menu.jsp页面。否则后面的测试都无法进行

<%

 if (!safari)

 {

        %>

              <SCRIPT LANGUAGE="JavaScript">

              <!--

                     window.location.href="<%=service%>";

              //-->

              </SCRIPT>

        <%

       //response.sendRedirect(service);

 }

 %>

C. 对以web测试毫无疑问最重要的就是如何登录,为了不让大家再走我已经走过的误区,下面再用一个登录的例子来说明登录是怎么一回事情,下面是我用Jmeter登录“天津武警医学院论坛”的实例

1.1 首先有“HTTP请求默认值”,服务器名或ip为:portal.wjyxy.mtn,“HTTP信息头管理器”,“ HTTP Cookie 管理器”,“简单控制器”,两个“HTTP请求”

 

1.2 对用于登录的http请求,最重要的地方就是路径:/mvnforum/mvnforum/loginprocess,loginprocess其实这就是我们在浏览器里的登录页面填写好用户名和密码后,提交给loginprocess去处理(服务器端处理登录的 javabean),所以请求路径不是login.jsp或其他页面,而是真正处理登录的javabean或action,同时提交登录参数,包括隐藏文本域的值也要一并在下面填写好后提交。

       我刚开始的时候一直将路径写成:mvnforum/mvnforum/login,并填写好用户名密码及隐藏文本域的值后,怎么也登录不上,后来查看了登录页面的源码后发现:<form action="loginprocess" method="post" name="submitform">,原来真正处理登录的是loginprocess,所以当我把路径改为mvnforum/mvnforum/loginprocess后马上就登录上了。

D. 还有一点,那就是“http请求”的窗口上的“方式”,其中有:GET/POST等值,根据实际情况,通常需要传参数的都选择POST方式。

E. Jmeter提供的函数,下面是函数助手窗口,对于每个函数的具体使用可以查Jmeter提供的帮助文档。


 [f1]用于保存登录用的用户名的文件

 [f2]用于保存登录用的用户密码的文件

 [f3]保存服务器域名的文件

 [f4]jwadmin用户的密码

 [f5]1001300用户的密码

 [f6]这个文件其实可以不要,这里要这文件主要是为了后面要讲解一种在jmeter中读取csv文件的方式

 [f7]通过Jmeter提供的函数--property将我们前面定义的文件对象读取到属性对象中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章