通过案例教你玩转JMeter

1 搭建ebusiness场景

1.1录制

1,打开Window IE浏览器代理

2,启动ebusiness服务

3,打开JMeter,右键点击 Test Plan->Add->Threads(user)->Thread Group 添加一个线程组

4,Thread Group->Add->ConfigElement->Http request Default

5,如图设置

6,右键点击 Test Plan->Add->Non-test Elements->Http(s) Test ScriptRecorder 添加HTTP代理服务器

7,如下图进行修改

8,加上过滤

(?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|woff|woff2)

9,点击start开始录制

10,录制完毕出现如下图所示

11,删除不需要的,修改一下名称

12.  把Simple Control换为LoopControl,

13,把编码改为utf-8

14,删除“HTTP(S) Test Script Recorder”。

15,删除“HTTP Header Manager”。

16,在头部加入“HTTP Header Manager”

17,在头部加入“HTTP Cookie Manager”

注意:一定必须为“标准(standard)”。

18,由于“登录验证界面”验证通过后自动进入“商品列表页面”,删除“商品列表页面”,然后调整一下“登录验证界面”。

19,关闭“HTTP Request Defaults”

20,加上“查看结果树”“Debug Sample”执行下脚本,进行验证。

Sample->Debug Sample

Listener->View Result Tree

运行

查看是403错误,没有权限。

1.2处理csrftoken

1.添加正则表达提取器:PostProcessors->Regular Expression Extractor

2. 添加cookies:Config Elements-> HTTP Cookies Manager

3. POST参数也是这样也用这个参数

4. 设置响应断言:Assertion->Response Assertion

5. 试运行

6. 设置BeanShell断言:Assertion-> BeanShell Assertion

response = prev.getResponseDataAsString(); Failure = true;if(response.contains("电子商务系统")){ Failure = false;}else{ FailureMessage="响应内容中没有找到电子商务系统";}

1.3 多场景

1. 获得csrftoken

2.设置csrftoken

3. 建立两个Throughput Controller:Logic Controller->ThroughputController,分别为“查询商品”“查看商品详情”。用户分配分别为:

    

二者与“登录界面”“商品列表界面”处于同等位置。

5. 建立“查询商品”事务。

6,建立验证查询商品是否成功

通过验证是否进入到/search_name/目录下。

7. 建立“查看商品详情”事务。

通过${__Random(1,5,num)}随机查看编号为1、2、3、4、5的商品。

8. 加入验证

9. 设置线程为2

10.设置循环5次

11. 加入Summary Report

12. 运行

13.“查询商品”“查看商品详情”符合设置比例,是否符合预期的80%和20%。

1.4参数化

1.3.1使用cvs参数化

建立参数文件:user.dat

linda,knyzh158cindy,jerry,susan,qwertpeter,zxcvb

加入参数化:Config Element->CSVData Set Config

user.dat为文件名。

UTF-8为编码格式。

username,password为获取后的参数。

,为分割符号。

2.修改POST参数

3. 设置Loop Control循环次数为5

4. 试运行

并且通过Debug Sample查看参数是否正确。

username=peter

password=zxcvb

1.3.2 使用函数助手做参数化

1,点击进入函数助手

2,选择random

产生从0-2之间的整数

3,建立type.txt

茶,测试,包

4,选择csvread函数

type.txt为参数文件

${__Random(0,2,num)}为0,1,2随机之间任意一个随机数。

5,在查询商品页面进行参数化,

查询参数为${__CVSRead(type.txt, ${__Random(0,2,num)})}

6,试运行,通过Debug Sample查看参数是否正确。

1.3.3通过MySQL参数化

1,mysql-connector-java-5.1.7-bin.jar放入%JMeter_HOME%\lib\ext\。然后重新启动JMeter。

2,Config Elements-> JDBCConnection Configuration

其中:

Search:为连接JDBC Request的参数;

jdbc:mysql://localhost:3306/sec中3306为mysql的端口号,sec为访问的数据库名。

root为登录名

为密码,不明文显示。

3,Sample->JDBC Request

Search必须与JDBCConnection Configuration一致

name,password为查询参数的名称,通过Debug Sample可以看见:

name_#=5name_1=cindyname_2=lindaname_3=jerryname_4=susanname_5=peterpassword_#=5password_1=password_2=knyzh158password_3=password_4=qwertpassword_5=zxcvb

result为结果集,通过DebugSample可以看见:

result=[{name=cindy, password=}, {name=linda,password=knyzh158}, {name=jerry, password=}, {name=susan,password=qwert}, {name=peter, password=zxcvb}]

4,下面我们通过result来提取用户名和密码。

建立正则表达提取器

从变量result中获取。

获取完毕存入变量parm中。

正则表达提取式为:{name=(.*?),password=(.*?)}。

由于有两个变量,所以Template为:$1$$2$。

随机取数,Match No.输入:0

5,在POST请求中修改参数。

username、password分别为${parm_g1}、${parm_g2}。

6,运行

到此位置接口设置的部分结束,开始与性能相关的部分。

1.5 性能相关的设置

1. 设置线程组

50个在线用户,在5秒内加载完毕。测试持续600秒(10分钟),启动后5秒后开始执行。

2.设置无限循环

3. 在登录请求后加入同步集合点:Timer->Synchronizing Timer。

并发用户为5

4秒后,如果达不到并发条件,立即执行。

4. 同样在“查询商品”“查看商品详情”也加入同步集合点。

1.6 设置报表

1.6.1 Summary Report

Listener->Summary Report

1.6.2 Aggregate Report

Listener->Aggregate Report

1.6.3 Aggregate Graph

Listener->Aggregate Graph

Aggregate Graph比Aggregate Report多了个图显示

1.6.4 Response Time Graph

Listener->Response Time Graph

1.6.5 Graph Results

Listener->Graph Results

强烈要求在测试执行的时候不要打开报表,用命令行执行,然后产生执行报告后导入JMeter。

1.6 整体运行

1.6.1 仅运行登录

将“查询商品”“查看商品详情”吞吐量控制器设置为0%

查看Summary Repoer,仅有“登录页面”和“商品列表页面”

1.6.2 仅运行查询商品

“登录”并发设置为0

“查看商品详情”吞吐量控制器设置为0%。

1.6.3 仅运行查看商品详情

“登录”并发设置为0

“查询商品”吞吐量控制器设置为0%。

1.6.4 多场景运行

“查询商品”吞吐量控制器设置为80%。

“查看商品详情”吞吐量控制器设置为20%。

2 使用Http Put请求

1,打开Tomcat put请求,%TOMCAR_HONE%/conf/web.xml。

<servlet>         <servlet-name>default</servlet-name>         <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>        <init-param>             <param-name>debug</param-name>             <param-value>0</param-value>        </init-param>              <init-param>         <param-name>readonly</param-name>         <param-value>false</param-value>         </init-param>        <init-param>            <param-name>listings</param-name>             <param-value>false</param-value>        </init-param>         <load-on-startup>1</load-on-startup></servlet>

2,启动WEB服务器

3,启动JMeter。Sample->Httprequest

4,运行,查看结果树。

Listener->View Result Tree

Sample->Debug Sample

3 上传多个文件

1,config Element->CSV Data SetConfig

2,修改Http request

3,增加循环次数

4,运行,查看服务器端