天天看点

通过案例教你玩转JMeter

1 搭建ebusiness场景

1.1录制

1,打开Window IE浏览器代理

通过案例教你玩转JMeter

2,启动ebusiness服务

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

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

5,如图设置

通过案例教你玩转JMeter

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

7,如下图进行修改

通过案例教你玩转JMeter

8,加上过滤

通过案例教你玩转JMeter

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

9,点击start开始录制

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

12. 把Simple Control换为LoopControl,

13,把编码改为utf-8

通过案例教你玩转JMeter

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

15,删除“HTTP Header Manager”。

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

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

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

19,关闭“HTTP Request Defaults”

通过案例教你玩转JMeter

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

Sample->Debug Sample

Listener->View Result Tree

运行

通过案例教你玩转JMeter

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

1.2处理csrftoken

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

5. 试运行

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter
response = prev.getResponseDataAsString();     
Failure = true;
if  (response.contains("电子商务系统")){
       Failure = false;
}else{
       FailureMessage="响应内容中没有找到电子商务系统";
}           

复制

1.3 多场景

1. 获得csrftoken

通过案例教你玩转JMeter

2.设置csrftoken

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter
通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

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

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

通过案例教你玩转JMeter

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

8. 加入验证

通过案例教你玩转JMeter

9. 设置线程为2

通过案例教你玩转JMeter

10.设置循环5次

通过案例教你玩转JMeter

11. 加入Summary Report

12. 运行

通过案例教你玩转JMeter

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

1.4参数化

1.3.1使用cvs参数化

建立参数文件:user.dat

linda,knyzh158
cindy,123456
jerry,654321
susan,qwert
peter,zxcvb           

复制

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

通过案例教你玩转JMeter
  • user.dat为文件名。
  • UTF-8为编码格式。
  • username,password为获取后的参数。
  • ,为分割符号。

2.修改POST参数

通过案例教你玩转JMeter

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

4. 试运行

通过案例教你玩转JMeter

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

  • username=peter
  • password=zxcvb

1.3.2 使用函数助手做参数化

1,点击

通过案例教你玩转JMeter

进入函数助手

2,选择random

通过案例教你玩转JMeter

产生从0-2之间的整数

3,建立type.txt

茶,测试,包           

复制

4,选择csvread函数

通过案例教你玩转JMeter
  • type.txt为参数文件
  • ${__Random(0,2,num)}为0,1,2随机之间任意一个随机数。

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

通过案例教你玩转JMeter
  • 查询参数为{__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

通过案例教你玩转JMeter

其中:

  • Search:为连接JDBC Request的参数;
  • jdbc:mysql://localhost:3306/sec中3306为mysql的端口号,sec为访问的数据库名。
  • root为登录名
  • 123456为密码,不明文显示。

3,Sample->JDBC Request

通过案例教你玩转JMeter
通过案例教你玩转JMeter
  • Search必须与JDBCConnection Configuration一致
  • name,password为查询参数的名称,通过Debug Sample可以看见:
name_#=5
name_1=cindy
name_2=linda
name_3=jerry
name_4=susan
name_5=peter
password_#=5
password_1=123456
password_2=knyzh158
password_3=654321
password_4=qwert
password_5=zxcvb           

复制

  • result为结果集,通过DebugSample可以看见:
result=[{name=cindy, password=123456}, {name=linda,password=knyzh158}, {name=jerry, password=654321}, {name=susan,password=qwert}, {name=peter, password=zxcvb}]           

复制

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

建立正则表达提取器

通过案例教你玩转JMeter
  • 从变量result中获取。
  • 获取完毕存入变量parm中。
  • 正则表达提取式为:{name=(.*?),password=(.*?)}。
  • 由于有两个变量,所以Template为:12。
  • 随机取数,Match No.输入:0

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

通过案例教你玩转JMeter

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

6,运行

通过案例教你玩转JMeter

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

1.5 性能相关的设置

1. 设置线程组

通过案例教你玩转JMeter
  • 50个在线用户,在5秒内加载完毕。测试持续600秒(10分钟),启动后5秒后开始执行。

2.设置无限循环

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter
  • 并发用户为5
  • 4秒后,如果达不到并发条件,立即执行。

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

1.6 设置报表

1.6.1 Summary Report

Listener->Summary Report

通过案例教你玩转JMeter

1.6.2 Aggregate Report

Listener->Aggregate Report

通过案例教你玩转JMeter

1.6.3 Aggregate Graph

Listener->Aggregate Graph

通过案例教你玩转JMeter

Aggregate Graph比Aggregate Report多了个图显示

1.6.4 Response Time Graph

Listener->Response Time Graph

通过案例教你玩转JMeter

1.6.5 Graph Results

Listener->Graph Results

通过案例教你玩转JMeter

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

1.6 整体运行

1.6.1 仅运行登录

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

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

通过案例教你玩转JMeter

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

通过案例教你玩转JMeter

3 上传多个文件

1,config Element->CSV Data SetConfig

通过案例教你玩转JMeter

2,修改Http request

通过案例教你玩转JMeter

3,增加循环次数

通过案例教你玩转JMeter

4,运行,查看服务器端

通过案例教你玩转JMeter