云智慧压测实战分享之JMeter脚本录制实例

首席Bug官
• 阅读 4657

在前面的《云智慧压测实战分享之JMeter工具使用初探》中我们对JMeter的功能特点和常用元件做了简单介绍,接下来说说JMeter的脚本录制。JMeter有多种录制脚本方法,其中最常见的是通过第三方工具Badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,下面以压测宝为例来介绍下Badboy脚本录制过程。
 注:使用JMeter的代理或是Badboy进行录制的时候,操作不能太快,不然容易造成录制失败。
1、打开Badboy工具,在地址栏目中输入被测试项目的地址。注意:Badboy启动默认是录制状态,为红色按钮,如图:

云智慧压测实战分享之JMeter脚本录制实例

录制完成后点击工具栏旁边黑色按钮,结束录制。 
2、选择“文件”--Export to JMeter…

云智慧压测实战分享之JMeter脚本录制实例

 3、打开JMeter工具,选择“文件”-->“打开”选择刚才保存的文件(.jmx类型),将文件导入进来了。

云智慧压测实战分享之JMeter脚本录制实例

录制的脚本一定要添加HTTP Cookie Manager,否则脚本运行失败。
对于JMeter来说,一个测试计划只能有一个Cookie管理器,因为当多个Manager存在时,JMeter没有方法来指定使用哪个Manager,同时一个Cookie Manager中存储的Cookie也不能被其他Cookie Manager所引用,所以同一个测试计划中不建议使用多个Cookie Manager。

JMeter压测实例

下面我们用几个JMeter压测实例来熟悉一下JMeter的使用。
1、使用JMeter进行http接口测试
Jmter工具设计之初是用于性能测试的,它在实现对各种接口的调用方面已经比较成熟,因此可直接使用JMeter工具来完成对Http接口的测试。
1)、开发接口测试案例的整体方案:

•    第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;
•    第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。
•    第三步:和开发一起对接口测试案例进行评审。
•    第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。
•    第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。

2)、接口自动化适用场景:
目前设计的自动化接口测试案例有两个运行场景:

  1. 测试前置、开发自测:一个新的自动化接口测试案例开发完成后,直接发给接口对应的开发,安排在开发本地环境执行,一旦开发确认完成接口开发,就开始执行接口测试案例,基本上可以实时拿到测试结果,方便开发快速做出判断。【开发本地运行的方式就是打开JMeter工具,导入JMX文件,开始执行即可。】

  2. 回归测试:开发本地测试通过后,或整个需求手工测试通过后,把自动化的接口测试案例做分类整理,挑选出需要纳入到回归测试中的案例,在持续集成环境重新准备测试数据,并把案例纳入到持续集成的job中来,这些用于回归的接口测试案例需要配置到持续集成平台自动运行。
    3)、接口测试环境准备

    •     Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html
    •     JMeter,下载址址:http://jmeter.apache.org/download_jmeter.cgi
    •     插件的下载安装地址:http://www.jmeter-plugins.org/

    4)、创建工程:

  a、打开JMeter:下载好JMeter后,双击bin目录下的jmeter.bat文件:
云智慧压测实战分享之JMeter脚本录制实例

  b、添加线程组:在“测试计划”上点击鼠标右键-->添加-->threads(Users)-->线程组,添加测试场景设置组件,接口测试中一般设置为1个“线程数”,根据测试数据的个数设定“循环次数”。

云智慧压测实战分享之JMeter脚本录制实例

  c、添加“HTTP Cookie管理器”:

云智慧压测实战分享之JMeter脚本录制实例

  d、添加“Http请求默认值”组件,当被测系统有唯一的访问域名和端口时,这个组件很好用:

云智慧压测实战分享之JMeter脚本录制实例

  e、在“HTTP 请求默认值”组件配置页面,填写被测系统的域名和端口,http请求的实现包版本以及具体协议类型,线程组里的所有“HTTP Sampler”可默认使用此设置。

云智慧压测实战分享之JMeter脚本录制实例

   f、在“线程组”里添加“HTTP 请求”的Sampler

云智慧压测实战分享之JMeter脚本录制实例

    g、在HTTP请求设置页面,录入被测接口的详细信息,包括请求路径,对应的请求方法,以及随请求一起发送的参数列表:

云智慧压测实战分享之JMeter脚本录制实例

  h、设置检查点:在被测接口对应的“HTTP 请求”上,添加“响应断言”

云智慧压测实战分享之JMeter脚本录制实例

  i、在设置页面上添加对相应结果的正则表达式存在性判断即可:

云智慧压测实战分享之JMeter脚本录制实例

   j、添加监听器:方便查看运行后的结果

云智慧压测实战分享之JMeter脚本录制实例

 上述步骤完成了一个简单测试实例的创建,复杂测试实例均在此基础上扩展完成。使用JMeter工具开发的接口测试案例,一个子系统建议放在同一个“测试计划”中,流程测试可以通过“线程组”来区分,这样也便于设定不同的测试数据个数。比较独立的接口,可以统一放在一个线程组内,顺序完成测试。 
流程性接口的测试:如果要测试的接口可以组成一个流程,只需要顺序添加多个“HTTP 请求”的Sampler,各请求之间可以提取需要在上下文传递的数据作为参数,以保证流程中数据的一致性。

2、JMeter分布式测试

在使用JMeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑(CPU和内存)可能无法支持,这时可以使用JMeter提供的分布式测试的功能。
1)、JMeter分布式执行原理:
JMeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
2)、执行机(slave)配置:
  a、slave机上需要安装JMeter,具体如何安装这里不详细介绍了。
  b、添加环境变量:JMETER_HOME=D:B_TOOLSapache-jmeter-2.13,此处为你JMeter的路径
  c、启动bin目录下的:jmeter-server.bat,启动成功如下图:

云智慧压测实战分享之JMeter脚本录制实例

  d、上图上标红的IP和端口会在master里配置时用到。IP就是slave机器IP,端口默认是1099,端口也可以自定义,这里我自定义为1000,这个后面会讲。 
  e、多台slave的话,重复1~4步骤就好。  
3)、调度机(master)配置:
  a、脚本:简单的一个访问压测宝的脚本: 

云智慧压测实战分享之JMeter脚本录制实例

  b、找到JMeter的bin目录下jmeter.properties文件,修改如下配置,IP和Port是slave机的IP以及自定义的端口(这里端口我自定义为100,后面会讲如何自定义):
        remote_hosts=10.13.223.202:1000,10.13.225.12:1000
    多台slave之前用","隔开,我这配置了2台,可以看到标红的这个就是上面截图slave的IP和Port.
  c、打开JMeter,选择运行,有运程启动、运程全部启动两个选项:

云智慧压测实战分享之JMeter脚本录制实例

  d、选择远程启动-->10.13.225.12:1000
    a) master结果,这里我只启动了10.13.225.12:1000这一台slave,所以只有一个结果(线程数和循环次数都是1):

云智慧压测实战分享之JMeter脚本录制实例

    b) slave控制台信息:

云智慧压测实战分享之JMeter脚本录制实例

  e、选择远程启动-->远程全部启动:
    a) master结果,全部启动,我配置了2台slave,所以有两次执行结果:

云智慧压测实战分享之JMeter脚本录制实例

4)、自定义端口:
  上面其实已经实现了JMeter的分布式测试,这部分主要介绍下如何自定义slave端口:
  a、slave:在slave机的JMeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如我这里修改为1888:
      server_port=1888
      server.rmi.localport=1888
  b、启动slave机上的jmeter-server.bat,如下图,端口已经修改为:1888

云智慧压测实战分享之JMeter脚本录制实例

  c、master:修改master机器的jmeter.properties文件:
      remote_hosts=10.13.223.202:1000,10.13.225.12:1888
  d、重启jmeter.bat,如下图,端口已经变了:

云智慧压测实战分享之JMeter脚本录制实例

5)、其它说明:
  a、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。
  b、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
  c、每台机器上安装的JMeter版本和插件最好都一致。

3、搭建持续集成接口测试平台

下面介绍最后一个实例,搭建持续集成接口测试平台(Jenkins+Ant+JMeter)。
1)、环境准备:
JDK:http://www.oracle.com/technet...
Ant:http://ant.apache.org/bindown...
Jenkins:http://jenkins-ci.org/
2)、Jemter脚本准备:
a、脚本目录:D:B_TOOLSapache-jmeter-2.13demo

云智慧压测实战分享之JMeter脚本录制实例

b、脚本内容:都是访问压测宝或google首页

云智慧压测实战分享之JMeter脚本录制实例

Script_yacebao.jmx   
Script_google.jmx

云智慧压测实战分享之JMeter脚本录制实例

3)、ANT的build.xml代码准备:
1<?xml version="1.0" encoding="UTF-8"?>
2
3<project name="ant-jmeter-test" default="run" basedir=".">
4<tstamp>
5<format property="time" pattern="yyyyMMddhhmm"/>
6</tstamp>
7
8<property environment="env"/>
9<property name="ReportName" value="TestReport"/>
10<!-- 需要改成自己本地的JMeter 目录-->
11<property name="jmeter.home" value="D:B_TOOLSapache-jmeter-2.13"/>
12<!-- jmeter生成jtl、html格式的结果报告的路径-->
13<property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}"/>
14<!-- 生成的报告的前缀-->
15<property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl"/>
16<property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html"/>
17
18<target name="run">
19<echo message="start..."/>
20<antcall target="clean"/>
21<antcall target="test"/>
22<antcall target="report"/>
23</target>
24
25<target name="clean">
26<mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}"/>
27</target>
28
29<target name="test">
30<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
31<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
32<!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本-->
33<testplans dir="D:B_TOOLSapache-jmeter-2.13demo" includes="*.jmx"/>
34
35<property name="jmeter.save.saveservice.output_format" value="xml"/>
36</jmeter>
37</target>
38
39<target name="report">
40<xslt in="${jmeter.result.jtlName}"
41 out="${jmeter.result.htmlName}"
42 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"/>
43<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝-->
44<copy todir="${jmeter.result.dir}">
45<fileset dir="${jmeter.home}/extras">
46<include name="collapse.png"/>
47<include name="expand.png"/>
48</fileset>
49</copy>
50</target>
51</project>
4)、配置Jenkins Job并运行:
a、job配置如下:

云智慧压测实战分享之JMeter脚本录制实例

b、在job的workspace目录下会生成结果报告:

云智慧压测实战分享之JMeter脚本录制实例

c、TestReport.html:

云智慧压测实战分享之JMeter脚本录制实例

5)、配置发送邮件功能
a、自已写一个发送邮件的功能并打成sendmail.jar包,放在job的workspace目录中

云智慧压测实战分享之JMeter脚本录制实例

b、jenkins增加构建步骤
  a)进入到测试报告的目录
  b) 调用sendmail.jar命令发送邮件

云智慧压测实战分享之JMeter脚本录制实例

 说明:
由build3.xml的第12、13行可知,报告文件生成目录为:${env.WORKSPACE}/results/${env.BUILD_ID},所以这里要先cd到具体执行的那个build_id目录下。
可以把上面的两行命令写在成一个批处理文件,例如第1步有个sendmail.bat文件就是,然后调用时直接写sendmail.bat就好了。
持续集成接口测试平台(Jenkins+Ant+JMeter)就此搭建成功,以上是关于Jmeter脚本录制和压测的几个实例,接下来为您带来进阶的《云智慧压测实战分享之JMeter场景设置与监控》,敬请期待。

点赞
收藏
评论区
推荐文章
灯灯灯灯 灯灯灯灯
4年前
【IDEA】实战,阿里二面被问到构建及二次开发,直接裂开!!
JMeter5.4.1源码IDEA构建&二次开发(实战)1.下载源码2.导入IDEA2.1先设置Gradle目录未设置过Gradle的IDEA,建议先设置下Gradle的用户目录2.2导入JMeter工程2.3设置国内Gradle源设置gradle的下载源速度直接起飞!😂重新加载Gradle,或者重新加载项目接下来就是耐心的等等待,网速好的话,
林末 林末
5年前
LoadRunner常见问题整理
1.LoadRunner录制脚本时为什么不弹出IE浏览器?当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。LR11无法弹出ie浏览器,或者ie已停止工作问题的解决方法:1.系统属性,高级选项卡下,性能里面,单击设置按钮,修改数据执行保护为“只为关键windows程序和服务启用数据执行保
Stella981 Stella981
4年前
Jmeter+ant+Jenkins实现接口自动化平台及报告发送
项目中实现了比较方便的自动化体系,一直没时间总结一下,现抽空整理一番,废话不多说 内容如下:一、环境准备jmeter:编写接口脚本,实现接口测试ant :静默执行jmeter脚本,并生成测试报告jenkins :集成接口测试到项目流程,实现定时运行及接口测试报告邮件发送\以上准备工作
Stella981 Stella981
4年前
Linux下运行Jmeter脚本
一、在Linux服务器先安装sdk1\.下载JDKJavaJDK是区分32位和64位的,所以在安装JDK之前需要首先判断一下我们Linux是哪一个版本的,在linux上通过执行以下命令:cat/proc/version!(https://oscimg.oschina.net/oscnet/df7bfe6663467abcc02316
Stella981 Stella981
4年前
Selenium基础教程(三)自动化插件Katalon
Katalon-一款好用的selenium自动化测试插件Selenium框架是目前使用较广泛的开源自动化框架,一款好的、基于界面的录制工具对于初学者来说可以快速入门;对于老手来说可以提高开发自动化脚本的效率。我们知道SeleniumIDE是一款使用较多的脚本录制工具,且只支持Firefox老版
Stella981 Stella981
4年前
Jmeter在windows上安装和环境配置
一、Jmeter简单介绍ApacheJMeter是Apache组织开发的基于Java的压力测试工具。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够
Stella981 Stella981
4年前
Jmeter在chrome浏览器中录制脚本
利用blazemeter插件可以录制chrome浏览器中的操作,并生成jmx文件,导入到jmeter中使用1、 下载blazemeter    地址:https://pan.baidu.com/s/1VRVv4ZQ9B2U\_y2p22NNqhA2、 安装插件将文件拖到chrome更多工具扩展程序中插
Stella981 Stella981
4年前
Jmeter
方法/步骤1.打开jmeter的图形界面工具,然后打开之前保存的脚本(之前经验中用到的),demobaidu.jmx!jmeter添加断言(检查点)(https://oscimg.oschina.net/oscnet/f1cb7894e4f8593065acb769c6118147218.png)(htt
Stella981 Stella981
4年前
Jmeter28:linux下实现压测
jmeter单机压测命令行模式html报表生成控制台参数优化一/准备工作1.压力机安装并配置好jdk2.调试好程序脚本再上传到linux下3.进入jmeter bin目录执行     chmodx./\  可执行权限二/单机执行步骤执行./jmeter.shnt/expor
Jmeter压测实战:Jmeter二次开发之自定义函数 | 京东云技术团队
本文介绍如何开发Jmeter自定义函数实现快速生成京东宙斯下单标准sign,同时深刻理解Jmeter的插件化机制及高扩展性特性。
liam liam
2年前
JMeter环境变量配置详解及最佳实践
通过给JMeter配置环境变量,可以快捷的打开:1.打开终端。1.执行jmeter。配置环境变量的方法如下。Mac和Linux系统1.在/.bashrc中加如下内容:exportJMETERHOMEJMeter所在目录exportPATH$JAVAHOME