JMeter之获取某页面所有链接并再次请求

  今天主要讲下JMeter逻辑控制器和正则的联合使用,以jmeter获取某页面所有的链接,然后通过这些链接再次发出请求为列。

  首先我们知道,凡是输入一个地址,点击回车,通过F12查看,请求并不止一个,而如果放入jmeter中,如果不加其他设置,那我们测试的结果与实际是不符的。所以我们一般会在高级设置中勾选“从HTML文件获取所有内含的资源”,如图下所示:

当然还是眼见为实,举例,我们只是请求https://www.taobao.com,做基础的请求操作,点击运行,结果只有一条,而如果我勾选,则下方还会获取其他请求,如图所示:

但是,这些还不够!

下面我们一起来实战下,获取一个网页所有的链接并进行再次请求。

1、首先,你要打开jmeter,创建一个线程组,添加一个http请求,我们还是以淘宝为例,输入服务器名称:www.taobao.com,协议输入https,方法为GET请求。

2、在1的http请求下加上后置处理器-正则表达式提取器,关于正则的具体用法可以百度或者谷歌,我这边就直接给结果了,概念性的东西可能以后会单独出篇文章讲解。如图所示:

3、线程组下添加一个逻辑控制器-ForEach控制器(ForEach控制器会循环遍历一系列相关变量),关于逻辑控制器,到时候我会单独开篇文章去讲解,这边主要是实现目的。

 

4、在ForEach控制器下添加一个http请求,填写路径,路径为foreach中填写的输出变量名称,如图所示,注意jmeter元件作用域与执行关系,这个可以看文章:http://blog.jianjiexuan.com/tools/jmeter/213.html

如图所示:

5、添加监听器-察看结果树,保存计划,点击运行,就可以查看淘宝里所有链接的二次请求了。大功告成!

JMeter元件作用域与执行顺序

在复杂的脚本中,会涉及到jmeter的多个元件,而元件之间的作用域和执行顺序这时候就很重要了,放错位置不仅会造成数据获取不正确,严重还会无法执行,下面即为大家介绍一下元件作用域与执行顺序。

1、元件的作用域

  • 配置元件(config elements):会影响其作用范围内的所有元件(同级别或父级起作用)
  • 前置处理程序(Per-processors):在起作用范围内的每一个sample元件之前执行
  • 定时器(timers):对其作用范围内的每一个sampler有效(同级别或父级起作用)
  • 后置处理程序(Post-processors):在其作用范围内的每一个sampler元件之后执行(同级别或父级起作用)
  • 断言(Assertions):对其所用范围内的每一个sampler元件执行后的结果执行校验
  • 监听器(Listerners):收集其作用范围的每一个samoler元件的信息并出现(同级别或父级起作用)
  • sampler元件不和其他元件相互作用,因此不存在作用域的问题

2、元件的执行顺序

  • 配置元件
  • 前置处理器
  • 定时器(首次也是定时器先执行再执行sampler)
  • Sampler
  • 后置处理器(只在有结果可用情况下执行)
  • 断言(只在有结果可用情况下执行)
  • 监听器(只在有结果可用情况下执行)

如果在同一作用域内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行

备注:如果两个相同配置元件作用于同一个采样器,那么这两个配置元件会进行合并,完全一样的取排序靠近的配置元件(如父子级关系)

例1:zuoyongyu1则执行结果是:one显示网页b的地址加上了a的参数(HTTP默认请求都有网页,必须取其一,那么取就近的地址,参数不受影响)。

例2:

zuoyongyu2

后置处理器debug,作用域里按照顺序执行,无就近原则。

3、元件的部分概念

  • 断言:可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。
  • 前置处理器及后置处理器:负责在生成请求之前完成工作。前置处理器常常用来修改请求的设置。
  • 后置处理器:负责在生成请求之后完成工作。后置处理器常常用来处理响应的数据,我们主要在动态关联中用到后置处理器的正则表达式提取器

JMeter录制手机端操作

这只算一个小技能,并没有什么难度,大家可以体验一下:

1、首先打开jmeter,在测试计划下,右击添加“线程组”

2、在工作台下,右击添加“非测试元件—HTTP代理服务器”

1)输入端口号,可以自定义,如9887

2)输入HTTPS Domains(域名):输入自己主机的ip,查询:cmd输入ipconfig即可查看,如:192.168.1.1

3)目标控制器,选择上面的线程组

4)HTTP sampler settings中的Type选择“HttpClient4”

5)配置完手机端(下面的第3步),点击【启动】

shouji1

ps:关于HTTP代理服务器的一些扩展

如图所示,分组选择每个类型的含义:(颜色标出的是比较常用的方式)

shouji2

  • 不对样本分组(Do not group samplers):所有请求全部罗列
  • 在组间添加分隔(Add separators between groups):加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义
  • 每个组放入一个新的控制器(Put each group in a new controller):执行时按控制器给输出结果
  • 只存储每个组的第一个样本(Store 1st sampler of each group only):对于一次url请求,实际很多次http请求的情况,这个选项很好用,因为我们常常是不关心后面的那些请求的。(当选择这个进行录制后,获取的http请求,可以选中图下模式)

shouji3

 

 

3、配置手机端

1)打开设置-无线网-详情,选择HTTP代理—手动

2)输入服务器ip:即为你上面填写在jmeter中的ip,即主机ip

3)输入端口:即为上面自定义的端口,9887

4、操作手机,按着需要录制的东西操作

5、录制完成后,点击HTTP代理服务器的停止按钮,然后删除掉不必要的请求,添加监听器,即可按着刚刚的操作运行查看结果。(有问题可调试解决)

备注:

工作台默认不保存在脚本里,如果需要保存,需要勾选图下内容:(一般情况下我们不需要保存工作台下面的内容)

shouji4

JMeter与ant的结合使用

JMeter与ant的结合使用使得运行结果更丰富、图表化,可以直接浏览器查看。

默认你已经安装了jmeter且配置好了jdk环境变量,如有不懂的,可以先看这篇文章

传送门:http://blog.jianjiexuan.com/tools/jmeter/178.html

1、首先需要安装ant,

  下载地址:http://ant.apache.org/bindownload.cgi

  下载好了之后解压即可

2、配置环境变量

path           D:/apache-ant-1.9.1/bin

classpath        D:/apache-ant-1.9.1/lib

3、验证是否安装成功

    命令行运行:ant -version

ant         出现这个原因是因为Ant需要用到jre\lib目录下的tools.jar,我们把jdk\lib下的tools.jar拖过去就可以

重新输入命令:ant -version,成功

ant1

4、将jmeter的extras目录中ant-jmeter-1.0.9.jar包拷贝至ant安装目录下的lib目录中

5、修改Jmeter的bin目录下jmeter.properties文件的配置jmeter.save.saveservice.output_format=xml

6、编写脚本,build.xml,想要深入了解的可以自己去翻资料摸透,只是想实现效果的,可以直接将下方的代码拿去即可

♥注某些地方需要根据自己的实际情况进行修改

<?xml version=”1.0″ encoding=”UTF-8″?>

<project name=”ant-jmeter-test” default=”all” basedir=”.”>

    <tstamp>

   <format property=”time” pattern=”yyyyMMddhhmm” />

    </tstamp>

    <!– 需要改成自己本地的 Jmeter 目录–>

<property name=”jmeter.home” value=”D:\apache-jmeter-2.6” />

<!– jmeter生成jtl格式的结果报告的路径–>

<property name=”jmeter.result.jtl.dir” value=”D:\resultLog\jtl” />

<!– jmeter生成html格式的结果报告的路径–>

<property name=”jmeter.result.html.dir” value=”D:\resultLog\html” />

<!– 生成的报告的前缀–>

<property name=”ReportName” value=”TestReport” />

<property name=”jmeter.result.jtlName” value=”${jmeter.result.jtl.dir}/${ReportName}${time}.jtl” />

<property name=”jmeter.result.htmlName” value=”${jmeter.result.html.dir}/${ReportName}${time}.html” />

<target name=”all”>

<antcall target=”test” />

<antcall target=”report” />

    </target>

<target name=”test”>

        <taskdef name=”jmeter” classname=”org.programmerplanet.ant.taskdefs.jmeter.JMeterTask” />

        <jmeter jmeterhome=”${jmeter.home}” resultlog=”${jmeter.result.jtlName}”>

        <!– 声明要运行的脚本。”*.jmx”指包含此目录下的所有jmeter脚本–>

               <testplans dir=”D:\testcase” includes=”*.jmx” />

<property name=”jmeter.save.saveservice.output_format” value=”xml”/>

               </jmeter>

</target>

    <path id=”xslt.classpath”>

   <fileset dir=”${jmeter.home}/lib” includes=”xalan*.jar”/>

          <fileset dir=”${jmeter.home}/lib” includes=”serializer*.jar”/>

            </path>

<target name=”report”>

<xslt classpathref=”xslt.classpath”

force=”true”

  in=”${jmeter.result.jtlName}”

              out=”${jmeter.result.htmlName}”

style=”${jmeter.home}/extras/jmeter-results-detail-report_21.xsl” />

  <param name=”dateReport” expression=”${report.datestamp}”/>

        <!– 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 –>

<copy todir=”${jmeter.result.html.dir}”>

<fileset dir=”${jmeter.home}/extras”>

<include name=”collapse.png” />

<include name=”expand.png” />

</fileset>

</copy>

</target>

</project>

7、命令行,进入放build.xml脚本的目录下,运行 ant,如图所示

ant2

8、运行结束后,打开对应路径下的html文件查看结果,如下图所示

ant3

所有的都结束啦,这个图表的作用也没那么大,主要是通过自己写build脚本,可以让执行变得多样化,也可以同时执行多个脚本。

非GUI模式运行JMeter脚本

使用非GUI模式,即命令行模式运行JMeter测试脚本,这样能够大大缩减所需要的系统资源。

命令需要在jmeter的bin目录下执行

命令:jmeter -n -t <testplan filename> -l <listener filename>

如:jmeter -n -t testplan.jmx -l log.jtl

停止运行:ctrl+c       停止后台运行:ctrl+z

解释:

  • -h帮助 → 打印出有用的信息并退出
  • -n非GUI模式 → 在非GUI模式下运行Jmeter
  • -t测试文件 → 要运行的JMeter测试脚本文件
  • -l日志文件 → 记录结果的文件
  • -r远程执行 → 启动远程服务
  • -H代理主机 → 设置JMeter使用的代理主机
  • -P代理端口 → 设置JMeter使用的代理主机的端口号

如:jmeter -n -t test1.jmx -l logfile1.jtl -H 192.168.1.1 -P 8080

服务器GUI模式(分布式测试):jmeter -server -H 192.168.1.1 -P 8080

备注

1、执行命令前要检查当前目录是否是%Jmeter_Home%\bin目录,如果不是,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。

2、执行结果可以使用GUI模式下的聚合报告查看。打开Jmeter GUI界面 →测试计划 →添加线程组 →添加聚合报告 →点击“所有数据写入一个文件”下的“浏览”,找到之前生成的.jtl文件即可。

3、命令行实时查看运行结果,需修改jmeter.properties,打开以下内容:

summariser.name=summary

summariser.interval=30  //这个表示统计频率

summariser.out=true //是否将统计结果输出到控制台

4、使用编辑器直接打开jtl文件

buchong1

名词解释:

属性 内容
httpSample 取样节点名字
t 用时(ms)
lt 延时(ms)-不是所有的取样器支持这个
ts 时间标志
s 是否成功
lb 标签
rc 响应代码
rm 响应消息
tn 线程名
dt 数据类型
by 字节数
de 数据编码
ng 在这个线程组中活跃的线程数
na 所有线程组中的活跃线程数

 

Jmeter安装与配置

其实jmeter安装很简单,但是还是有人问起,这边就简单描述一下。

总概括

1、前置条件:安装配置好jdk

2、jmeter下载地址:

http://jmeter.apache.org/download_jmeter.cgi

3、一般启动:直接解压,点击bin目录里的jmeter.bat即可启动

4、服务器模式启动:jmeter -server.bat。允许在远程节点上以服务器模式运行jmeter,并通过jmeter gui来控制。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

详细扩展:

1、JDK的安装与配置

1)jdk下载:http://pan.baidu.com/s/1ge8efeF

2)双击适用的jdk版本的exe文件,一般安装至C:\Program Files\Java目录下;

3)配置环境变量:
①我的电脑→右键→属性→高级系统设置→环境变量

②在系统变量中新建,变量名:CLASSPATH,变量值:
C:\Program Files\Java\jdk1.7.0_71\lib\dt.JAR;
C:\Program Files\Java\jdk1.7.0_71\lib\TOOLS.JAR;
C:\Program Files\Java\jdk1.7.0_71\BIN;

③再新建,变量名:JAVA_HOME,变量中:
C:\Program Files\Java\jdk1.7.0_71;

④修改PATH变量,添加%JAVA_HOME%/bin;

⑤然后确定即可。

检测JDK是否安装成功:
在系统cmd中输入java -version,返回版本信息说明成功。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2、Jmeter的安装与配置

1)下载地址:http://pan.baidu.com/s/1dEGVCwp,解压

2)配置环境变量:
①我的电脑→右键→属性→高级系统设置→环境变量

②在系统变量中新建,变量名:JMETER_HOME,变量值:(你当前解压jmeter的路径)

如:
D:\apache-jmeter-2.6;

③修改CLASSPATH变量,添加
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;
% JMETER_HOME%\lib\jorphan.jar;
%JMETER_HOME%\lib\logkit-2.0.jar;

④然后确定即可。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3、然后点击Jmeter目录下bin文件夹里的jmeter.bat就可以打开Jmeter

赶快去看我的另一篇文章:搭建基本测试环境,体验一下jmeter吧!

传送门:http://blog.jianjiexuan.com/tools/jmeter/98.html

JMeter分布式测试

jmeter为何需要分布式测试?

——jmeter由java开发,耗内存、cpu,所以大并发下需要分布式测试,这样可以避免性能测试中jmeter本身的影响

Controller:主要负责性能测试脚本的分发,及各个代理机(Agent)的测试结果收集汇总,报告产出。

Agent:主要负责执行性能测试脚本及断言(命令行模式执行,无界面),并将结果反馈给Controller。

步骤:

1、部署Agent(代理)

 配置环境变量,新建JMETER_HOME环境变量,在CLASSPATH加入如下内容:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;

2、关闭防火墙

3、在主controller机器上的jmeter-bin目录下找到jmeter.properties,在打开的文件中查找“remote_hosts=”这个字符串,将localhost改为其他压力机的ip,端口号可默认一样

fenbushi1

4、然后运行所有agent机器上的jmeter-server.bat文件

5、启动主controller机子上的jmeter应用,添加监听器,选择菜单“运行-远程启动”来分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动

fenbushi2

如果需求为600并发,我们可以设置3个代理机,主controller上设置线程数为200即可

注意:

►jmeter版本和插件最好保持一致

 

►参数文件:如果用CSV进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

 

►如果多网卡造成链接失败,可以在网络里面禁用agent其他虚拟网络:打开网络和共享中心->更改适配器设置->找到对应的虚拟网络,右击禁用

JMeter图形监控JMeterPlugins

网上也有很多介绍JMeterPlugins的文章,但是大部分都不是很简单明了,下面只需几分钟就可以搞定用jmeter查看性能指标图表的问题

一、下载并安装JMeterPlugins

1、下载地址:http://jmeter-plugins.org/downloads/all/

 百度盘:http://pan.baidu.com/s/1dFC0VRj

2、下载好后将JMeterPlugins-Standard.zip中的JMeterPlugins-Standard.jar复制粘贴到jmeter的lib/ext下,重新启动jmeter,如图所示,监听器中多出了一些格式为jp@gc的选项

tuxing1

二、下载并安装serverAgent

1、下载地址:http://jmeter-plugins.org/downloads/all/

   百度盘:http://pan.baidu.com/s/1o7Wlh5C

2、我们需要将serverAgent目录及下面的文件复制到我们测试的服务器上,然后点击打开,默认端口是4444

如果被监控的服务器在windows下,则打开startAgent.bat,如果被监控的服务器在linux平台下,则打开startAgent.sh

双击打开之后的显示:

tuxing3

3、打开jmeter,添加“jp@gc-PerMon Metrics Collector”,点击“Add Row”,添加需要监控的指标。(也可以添加其他图形监控)

tuxing2

4、设置线程组及其他信息,点击运行,查看图表

 如下图所示,侧面是百分比

tuxing4

这样我们就可以在jmeter上查看图表啦,当然这个图表展示效果是没有LR好的,但是该有的也都有,主要是扩展性比较好。

JMeter集合点、检查点

三分钟带你掌握Jmeter集合点和检查点(常用断言),赶快来领略一下吧

一、添加集合点

1、右击“添加-定时器-Synchronizing Timer”如下图所示

  注意集合点的位置,要放在集合的操作之前

jihedian1

2、设置集合点数和线程数

jihedian2

名词解释:

Number of Simulated Users to Group by:多少用户进行集合点的并发

3、调整集合点的位置,添加监听器,保存测试计划,点击运行

二、添加检查点(断言)

1、需要添加断言的请求,右击“添加-断言-响应断言”

jihedian3

2、输入要测试的模式,格式为${参数名}

jihedian4

3、对相应请求添加“断言结果”,右击“添加 -监听器-断言结果”

jihedian5

4、如需求是响应时间不超过150ms,这时候就可以添加断言持续时间来进行判断,右击“添加-断言-断言持续时间”

jihedian6

5、如果需要对请求的字节大小进行判断,则可以添加Size Assertion来判断,右击“添加-断言-Size Assertion”

jihedian7

6、运行,成功通过,断言结果就会显示一行,失败则会显示多行

JMeter参数化的几种方法

一、用户参数方法

1、添加“前置处理器-用户参数”,如下图所示

jmetercanshu

2、添加参数信息,点击下方添加即可,“用户”即为变量值,勾选“每次迭代更新一次”

jmetercanshu2

3、HTTP请求中,将设置的参数名称以${参数名}格式写进去

或者直接在路径path下写

jmetercanshu3

4、如果添加“响应断言”,则格式也为${参数名},添加“断言结果”

jmetercanshu4

5、在线程组里设置线程数,好读取变量值

6、保存计划,运行即可

二、通过CSV Data提取(文件)

1、右击→添加→配置元件→CSV Data Set Config,如下图所示

2、准备数据文件,输入对应设置

jmetercanshu5

名词解释:

Filename:文件名,即参数化要引用的文件名,一般以.csv,.dat等结尾的文件。

File encoding:文件编码,可以不填,如果有乱码,可输入“utf-8”或“gbk”。默认是ANSI

Variable Names(comma-delimited):变量名(用逗号分割),多个变量可以引用同一个文件,用逗号分割。

Delimiter(use ‘\t’ for tab):参数文件中多个变量值的分隔符,\t表示用tab键分割。默认是逗号,不需修改

Allow quoted data?:双引号相关,如果参数中需要显示【,】或者【”】等,外层需要双引号显示,且这边修改为“true”

txt中这样书写:

则获取的变量值为【a”b】、【b,c】、【ccc】、【ddd】

Recycle on EOF?:结果后是否循环?默认是True,允许循环取值。如线程设置10个,循环10次,实际只取了前10个的值。改为false后,则取前100个的值。

Stop Thread on EOF: 当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,停止运行,线程数及执行次数无效

Sharing Mode: 设置是否线程共享

  • All threads:所有线程,所有线程循环取值,线程1取第一行,线程二取下一行;
  • Current thread group:当前线程组,各个线程组分别循环取值;
  • Current thread:当前线程,该测试计划内的所有线程都取第一行。

3、txt文本参数书写格式

下面为一个变量名称时的书写方式:

变量值1

变量值2

变量值3

……

下面为两个变量名称时的书写方式:(逗号或者tab,默认是逗号)

变量值1,变量值a

变量值2,变量值b

变量值3,变量值c

       ……

      不需任何符号,换行即可。保存为csv或dat格式(可放入下面的函数对话框)。

4、剩下的步骤与一中的3、4、5、6一样。

三、函数助手对话框

1、选项→函数助手对话框,可以选择你需要使用的函数类型,假设选择函数“_Random”

jmetercanshu6

2、输入最小值为1 ,最大值为100,点击生成

jmetercanshu7

3、将生成的函数字符串复制粘贴到上文提到的3、4步骤中,进行变量替换,保存测试计划,点击运行即可。

也可以自己添加文件(dat文件),设置值,0表示读取第一列,1表示读取第二列。逗号隔开。然后生成,变成被引用的函数。然后按照最上面的3步骤去引用就行。

 以上三种方式都介绍完了,是不是so easy呀,赶紧去试试吧!