【Jmeter入门】Jmeter基础理论知识

初识Jmeter

JMeter是什么?

  apatch jmeter是apatch组织开发的基于Java的压力测试工具。

  JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试他们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果(为了最大限度的灵活性,JMeter允许使用正则表达式创建断言)。

JMeter特点

  1. 能够对http和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试(通过JDBC)。
  2. 完全可移植性和100%纯Java。
  3. 完全多线程,框架允许多个线程并发取样和通过单独的线程组对不同的功能同时取样。
  4. 各种负载统计表和可链接的计时器可供选择。
  5. 数据分析和可视化插件提供了很好的可扩展性以及个性化。
  6. 具有提供动态输入到测试的功能。

为什么选Jmeter

特点:

  1. 开源(免费、可以进行源码改造,但是资料可能较少)、轻量级、插件化;
  2. 适合自动化和持续集成。

使用场景:

  1. 性能测试;
  2. 接口测试;
  3. 造数据;
  4. 线上巡检;
  5. 构建部署(编译、打包、部署,SSH插件);
  6. 重启服务;
  7. 清理环境;
  8. 封装为性能测试平台;
  9. 封装为自动化测试平台;
  10. ...

怎么学?

  1. HTTP、Json、HTML。
  2. Jmeter元件含义、结构、作用顺序(常用)。
  3. Jmeter脚本4种方式(手动、badboy、Jmeter代理、fiddler转换)。
  4. 学习接口测试原理。
  5. 学习性能基础概念和原理。
  6. 学习监控相关知识(原理、工具)。
  7. 学习Java、shell编程。

LR和Jmeter比较

共同点:均支持以下功能。

  1. 脚本录制/回放;
  2. 参数化;
  3. 集合点;
  4. 检查点;
  5. 关联;
  6. 多协议,jmeter协议较少,但可以自行扩展,LR支持协议多,但用户不可以自行扩展;
  7. 分布式大压力测试;
  8. 多线程;
  9. 图形报表:jmeter支持较弱,LR支持很强;
  10. 监控服务器资源(CPU,内存等);
  11. 报告生成与导出。

区别:

  1. IP欺骗:Jmeter不支持IP欺骗,LR支持。
  2. 功能测试:jmeter支持,LR不支持。
  3. 安装卸载:LR较为麻烦,文件体积大,Jmeter较为简便,文件体积小。
  4. 测试成本:LR商业软件,成本高,jmeter开源软件,成本低。

jmeter下载和安装(Windows环境下)

  前置条件:安装JDK。

  JMeter下载地址:https://jmeter.apache.org/download_jmeter.cgi。

  一般启动:解压,bin目录下的jmeter.bat即可启动(避免在有空格的路径中安装Jmeter,可能导致远程测试出现问题)。

  服务器模式启动:jmeter-server.bat。允许在远程节点上以服务器模式运行JMeter,并通过JMeter GUI来控制(分布式压力测试)。

JMeter工作原理

  jmeter作为web服务器和浏览器之间的代理,以便捕获浏览器请求和web服务器的响应,容易的生成性能测试脚本,并利用性能测试脚本模拟真实用户对web服务器的访问压力。

脚本生成方式:

  1. (自己编写)性能测试脚本通过模拟多线程对服务器(web服务器、应用服务器、数据库服务器)进行访问压力测试。
  2. (脚本录制)浏器通过代理方式录制测试脚本对服务器(web服务器、应用服务器、数据库服务器)进行访问压力测试。

JMeter目录结构

目录结构

  1. bin目录下是可执行文件,Windows下使用JMeter.bat启动,里面可以设置jvm参数,进行JVM的调优配置。根据经验,heap(堆值)最多设置为物理内存的一半,默认设置为512M,如果heap超过物理内存的一半,可能运行JMeter会慢,甚至出现内存溢出错误。
  2. JMeter的log在JMeter.log中查看。
  3. JMeter.properties文件中有一个属性log_level.JMeter可以设置改变日志详细度,默认是info,查错时可改为debug。jmeter的属性设置也可以在图形化界面中选择添加--非测试元件--property display展示。
  4. docs下是JMeter的Java docs,存放的是开发Jmeter的API文件。
  5. printable_docs的usermanual子目录下是JMeter的用户手册文档,其中,component_reference.html是最常用的核心元件帮助手册,该目录下的demos下有常用的jmeter脚本案例,也可以直接通过界面中的帮助部分查看所有的帮助手册。
  6. extras:扩展插件目录,如目录下的文件提供了对ant的支持,可以利用ant来实现自动化,例如批量执行脚本,产生HTML格式的报告等。测试运行时,可以把测试数据记录下来,jmeter会自动生成一个.jtl文件,将该文件放到extras目录下,运行“ant -Dtest=文件名 repost”,就可以产生测试统计报表。
  7. lib目录下的子目录ext下主要是JMeter的核心jar包;junit子目录放的是junit脚本;用户扩展依赖的jar包放在lib下即可,不要放在lib/ext下。
  8. licenses:Jmeter证书目录(开源,不用关注);
  9. backup:脚本备份目录。

jmeter的classpath(jmeter只寻找jar文件)

  jmeter通过JMETER_HOME/lib(公用包)和JMETER_HOME/lib/ext(jmeter元件和补丁,只供jmeter元件使用)目录中的jar文件加载类。
  如果开发了新的jmeter元件,需要将对应jar包放到lib/ext目录下,jmeter会自动加载这些jar包中的jmeter元件。不放在lib/ext目录下的元件需要在JMeter.properties文件中定义属性search_paths。
  公用支持jar包(JDBC、JMS实现包、其他任何支持包),都应被放在lib目录下。可以在Meter.properties文件中定义属性user.classpath属性定义公用包。

jmeter使用设置

语言设置(汉化)

  下载安装好Jmeter后默认的是英文,所以,如何把英文界面换成中文呢?

方法一(一次性设置) :

  启动Jmeter找到 options 》choose language 》chinese(简体繁体自己选)。这样设置后界面就变成了中文,但是当我们下次打开时又恢复了英文,要再次设置,这样一来就很麻烦。那我们怎么设置默认为中文呢?请看方法二。

方法二 (永久设置):
  1、在Jmeter的安装目录下的bin目录中找到 jmeter.properties这个文件,用文本编辑器打开。 
  2、大概在37行,找到:#language=en将其修改为:language=zh_CN,这样,再次打开Jmeter就是默认中文了。注意把最前面的注释#号去掉。

字体设置

  1、在Jmeter的安装目录下的bin目录中找到 jmeter.properties这个文件,用文本编辑器打开。

  2、查找并修改属性为:jsyntaxtextarea.font.size=30。

  2、如果想要设置界面显示字体,可以按住Ctrl键+鼠标滚动进行字体设置。

JMeter基础

常用组件

  1. 测试计划:用来描述一个性能测试,所有内容都是基于测试计划的。相当于LR中的测试场景。可以添加扩展jar包。
  2. 线程组:LR中的虚拟用户组。(相当于LR中的action),包括普通线程组,setup thread group,teardown thread group几种。
    1.   setup thread group:可用于执行预操作,这些线程的行为完全像一个正常的线程组元件,类似LR中的init。
    2.   teardown thread group:可用于执行测试后动作,这些线程的行为完全像一个正常的线程组,类似LR中的end。
  3. 测试片段(Test Fragment):一种特殊的线程组,在测试树上与线程组处于同一层级,与线程组不同的是它不被执行,除非他是一个模块控制器或者是被控制器引用时才会被执行。它是一个辅助的组件,在此节点下几乎可以放置任何JMeter测试组件,但它一般不会被运行。他的作用如下(1)在脚本开发过程中可以用来备份元件;(2)TestFragment下的元件可以被模块控制器调用,我们可以利用它来模块化请求(把一个业务封装成一个方法供复用)供模块控制器调用。访问路径:测试计划→Test Fragment
  4. 工作台:它也不能直接参与运行,功能有:(1)在运用JMeter录制http协议脚本时就用到它,我们可以在它下面建立一个http代理服务器原件(HTTP代理服务器),设置代理信息然后进行录制访问路径:工作台→添加→非测试元件;(2)设置HTTP镜像服务器(HTTP Mirror Server);(3)显示当前JMeter属性信息(属性显示);(4)备份脚本,特别是我们在脚本调试过程中可以把它作为一个元件暂存区。
  5. 配置元件:提供对静态数据的支持。配置元件仅对所在测试分支有效。“用户定义的参数”会在测试初识阶段执行,无论它处于测试树的哪个位置,为了便于理解,建议放在线程组的开始部分。
    1. HTTP授权管理器:辅助进行服务器监控测试。
    2. HTTP cookie管理器:Session维护(每次反复清除cookies?不清除则第二次运行时还是处于登录状态)。
    3. HTTP消息头管理器:消息头管理。
    4. HTTP请求默认值管理器:请求默认值管理。
    5. 用户定义的变量:全局变量,不论放在任何地方都是全局参数。
  6. 定时器:用于设置等待时间,模拟用户习惯,类似于LR中的“思考时间”。如果需要在测试计划中某个位置添加暂停,可以使用“Test Action”采集器。
  7. 前置处理器:用于在实际的请求发出前对即将发出的请求进行特殊处理。只有sampler存在时才有意义。
  8. 后置处理器:对sampler发出请求后得到的服务器响应进行处理,类似LR中的关联。只有sampler存在时才有意义。
    1. jmeter响应乱码问题处理:在http请求后面添加一个后置处理器,写入脚本:prev.setDataEncoding("utf-8")。
  9. 断言:检查测试中得到的数据是否符合预期,一般用于设置检查点,保证性能测试过程中的数据是否和预期一致。
    1. beanShell断言。
    2. 响应断言
  10. 监听器:对测试结果数据进行处理和可视化展示。收集测试树中相同或更低级别测试元件的数据。

控制器

  Jmeter中有两种控制器:取样器(sampler)和逻辑控制器,用这些元件来驱动处理一个测试。

  1. 取样器:类似LR中的不同协议。包括FTP、HTTP、JDBC、Java object、JMS(Java 消息服务)、LDAP(轻量目录访问协议)、SOAP/XML-RPC、WebService(SOAP,主要涉及技术:XML、SOAP、WSDL、UDDI)。
    1.  Webservice好处:跨防火墙通信,应用程序集成,B2B集成,软件和数据重用。
  2. 控制器:帮助用户控制jmeter测试逻辑,控制子元件请求执行顺序。包括两类,一类是用于控制sampler节点发送请求的逻辑顺序控制器,如if控制器,switch,runtime,循环控制器等。另一类是用来组织可控制sampler节点的,如事务控制器,吞吐量控制器等。
    1. foreach控制器:该控制器只用于读取自定义变量值。 添加-用户自定义变量,变量命名格式:变量名_数字(从1开始计数)。其中:(1)变量前缀:自定义变量下划线前面的字符串;(2)取值范围,游标范围,从0开始计数。(3)输出变量名称:将每次得到的用户自定义变量存储到参数foreach参数中。
    2. if控制器:类似变成语言中的if语句,根据给定表达式的值决定是否执行该节点下的子节点。
    3. 交替控制器:每次迭代时,顺序选取该节点下的一个子节点执行。选中ignore sub-controller blocks,表示该controller将其下的子controller当成单一元素处理,并允许每个子controller一次发出一个请求。
    4. loop controller循环控制器:简单地为其下的子节点运行指定次数。
    5. 仅一次控制器:让testPlan中的某些内容在整个testplan执行期间对每个线程仅执行一次(如,每个线程仅需执行一次“登录”操作)。
    6. 随机控制器:每次执行时,从其子节点中随机选取一个来执行。
    7. 随机顺序执行控制器:每次执行时,按照随机产生的顺序执行旗下的所有子节点,与随机控制器不同之处在于,随机控制器只选择执行器所有子节点中的一个,而随机顺序执行控制器则按照随机顺序全部执行该controller下的所有子节点。
    8. switch controller:类似switch函数,该controller根据给定的值n(可以使用参数)选择执行旗下的第n+1个子节点,switch controller只接受整数值,并且给定的值n是以0位基础的。
    9. while controller:设置条件,根据条件进行循环控制。条件包括三种:(1)空:迭代执行controller下的所有子节点,直到最后一个子节点返回失败为止,非最后子节点失败,不会停止。(2)LAST,迭代执行controller下的所有子节点,直到最后一个子节点返回失败为止。同时,如果该controller上一个节点失败,则TestPlan在执行时不会进入该controller。(3)表达式:如果表达式的取值为FALSE,退出循环。表达式支持参数化设置。
    10. 事物控制器:会生成一个额外的采样器来测量其测试元素的总体时间,注意,时间包含该控制器范围内的所有处理时间,而不是采样器的时间。如果选中sample,事物采集器作为其下采样器的父采样器,否则,作为额外采样器添加在自采样器后面。
    11. 吞吐量控制器:允许用户设置被执行频率。
    12. 运行时长控制器:控制其下子测试元件允许运行的时长。(单位:秒)
    13. 模块控制器:

脚本编写

  1. 脚本录制(badboy,代理录制,fiddler录制)。
  2. 参数关联(正则表达式、Xpath(适合于返回XML响应)、jp@gc-JSON Path  Extractor(适合于返回为json响应))。
  3. 调试(只跑需要调试的接口,其他接口禁用;增加断言进行结果判断;Debug sampler查看关联取值;查看结果树的regExp tester模式可以将中文乱码显示正确;HTML模式可以显示web页面)。
  4. 变量的提取(包括全局变量(包括IP、port、附件路径、CSV路径等,通常用用户定义的变量组件)、业务变量(通常使用用户参数组件,前置处理器---用户参数))。
  5. 脚本编写格式(规范化进行接口编写,调整可读性)(通常会将用户和服务器的一次交互(页面访问或者提交)请求放在一个简单控制器或者事物控制器中;根据用户操作也业务命名和编号)。

  

注意:

  1. 自己创建的数据自己删除,不要留垃圾数据(业务删除或数据库删除)。
  2. HTTP cookie管理器,注意作用域。
  3. 每个接口都需要增加断言,保证结果正确性。
  4. 相同的响应放在一个简单控制器中,所有的应用尽量放在一个线程组中,特殊场景单独抽离成一个线程组。
  5. web自动化脚本用简单控制器,性能测试脚本用事物控制器。
  6. 用户定义变量,作用域为整个测试计划,是全局变量;线程组中用户参数组件。
  7. csv里面有特殊字符时,allow quoted data值设置为TRUE。

自动化测试脚本:

  必须控件包括:用户定义的变量、HTTP cookie管理器、用户参数、线程组、简单控制器、断言、debug sampler、查看结果树。

性能测试脚本:

  特有控件:jp@gc - Stepping Thread Group、CSV Data Set Config、jp@gc - Transactions per Second、jp@gc - Response Times  vs

Threads、jp@gc - PerfMon  Metrics  Collector。 

两种脚本录制方法

badboy(推荐)

  如果访问者使用的浏览器不能完全支持页面脚本,出现脚本错误,并弹框,事实上,脚本错误并不会影响网页浏览,因此,该警告无任何作用,可以在浏览器的intenet选项,高级属性页,进入到浏览标签,并选中“禁止脚本调试”,以后就不会在收到这种警告了。

  badboy中的检查点

  通过tools下的add Assertion for selection,对选择的部分添加检查点。

【Jmeter入门】Jmeter基础理论知识_第1张图片

badboy中的参数化-文本

  建立参数化列表:在 variables中选择New Variable,添加参数列表。在请求中将请求数据使用${参数名称}进行替换(在step中右键,properties,设置repeat为按照关键字进行循环即可。)

问题:
  1,中文可能有乱码,改下请求中的编码属性即可,utf-8或gbk。
  2,检查点中也可以修改为参数化中的变量。

badboy中的参数化-数据库

ODBC;tools-datasource,前提,安装ODBC的包,并配置数据源。
data source放到脚本最前端。在tools下设置的Data Source拖到脚本最前端,因为是按顺序执行的。

badboy进行并发

tools---run background thread,设置并发数,每个并发之间的间隔时间等。

badboy中的报告

view---report。

badboy中的断点

和LR一样,对请求使用toggle break point,进行添加/取消断点,进行调试。

代理录制回放

分组:
  不对样本分组:所有请求全部罗列。
  在组间添加分隔:加入一个虚拟的一分割线命名的动作。
  每组放入一个新的控制器:执行时按控制器给输出结果。(自动化常用)
  只存储每个组的第一个样本:保存第一次url请求。

  put each group in a new transaction controller:(性能常用)。

步骤:

  1. 创建测试计划,创建线程组;
  2. 添加非测试元件,HTTP代理服务;
  3. 添加完代理后,启动代理,并需要对intent 选项设置局域网设置为和代理相同。同时需要在录制完成后,取消局域网设置,否则连接网络会出现问题(IE---intenet选项---连接---局域网设置)。

元件的作用域和执行顺序

执行顺序

  1. 配置元件:会影响其作用范围内的所有元件。
  2. 前置处理程序:在其作用范围内的每一个sampler元件之前执行。
  3. 定时器:在其作用范围内的每一个sampler有效。
  4. 采样器(sampler):sampler元件不和其他元件相互作用,因此不存在作用域的问题。
  5. 后置处理器:在其作用范围内的每一个sampler元件之后执行。
  6. 断言:在其作用范围内的每一个sampler元件执行后的结果执行校验。
  7. 监听器:收集其作用范围内的每一个sampler元件的信息并呈现。

作用域

  每个元件的层次结构,判断每个元件的作用域。如果在同一作用域范围内有多个同一类型的元件,则这些元件按照他们在测试计划中的上下顺序依次执行。

  前置处理器、后置处理器和断言等原件功能对取样器作用,因此,如果他们的作用域内没有任何取样器,则不会被执行。

JMeter实战

JMeter之参数化

  1.badboy中参数化。
  2.JMeter里参数化。
    前置处理器-用户参数。
    利用配置元件-cvs data set config(利用文件进行参数化)。
    随机参数:选项-函数助手,random。

JMeter之集合点

  概念和LR中的一样,注意集合点位置,和LR一样,要放到集合的操作之前。

  只对最靠近的下一个请求起作用。

JMeter之检查点

  和LR中的检查点一样,就是断言中的响应断言。

  1. 响应断言:断言结果一般成功显示一行,否则显示多行。
  2. 变量断言:在断言中使用变量,而非固定值。
  3. 断言持续时间:设置断言持续时间,超过则断言失败。
  4. 返回结果大小断言:size assertion,对返回结果大小进行设置,不符则断言失败。

JMeter之动态关联

  和LR中的一致。关联方式:正则表达式,Xpath(一般XML的时候用的多)

  什么地方需要关联?
    回放脚本,看是否正确,数字+字母混合组合(如session,cookie等),找开发确认。
  关联步骤:
    需要关联哪个参数?
    参数在哪个请求后产生的?
    在参数请求后使用正则提取。

  添加-后置处理器-正则表达式提取器:
    正则表达式:正则需要在小括号里面写。
    模板:如果正则表达式去了不止一个参数,则需要指定参数组别,$1$表示取第一个值,$2$表示取第二个值。
    匹配数字:0随机,-1取所有值,1,2,。。。以数组形式存储。

LR一样的图形监控扩展(插件)

  jmeter图形监控,相比LR相对较弱。能监控Windows或Linux吗?可以。

  下载地址:https://jmeter-plugins.org/downloads/all/

  步骤:

    1.JMeterPlugins.jar:将该包复制到JMeter的lib目录下的ext目录下,重新启动JMeter。(查看添加-监听器中出现JP开头的则加载成功)

    2.将serverAgent目录及下面的文件拷贝到我们测试的服务器上,然后点击打开(Linux打开的是.sh,Windows点击的是.bat),默认端口4444。

    3.添加-监听器-jp@gc-PerfMon Metrics Collector。添加监听信息即可。

jmeter实战-web程序

背景:XX网站,环境:Windows,
需求:并发登录性能测试。
场景:1S增加2个线程,分别看20,40,60并发下的表现;
监控:成功率、响应时间、标准差、CPU、MEM、IO等;资源监控需要在Windows下部署agent(server agent)。

步骤:
1,badboy录制,导入jmeter;
2,参数化,检查点,集合点;
3,指标监控,资源控制;
4,报告(可导出到xls,自行生成报表)。

Jmeter实战-FTP程序

  FTP使用用户分类:real用户、guest用户、anonymous(匿名)用户
  FTP传输方式:ASCII,二进制。
  传输细节:TCP/IP协议中,FTP标准TCP端口号为21,Port方式数据端口为20。FTP的任务是从一台计算机将文件传送给另外一台计算机,不受操作系统的限制。
  工作方式:Standard(PORT,主动方式),Passive(PASV,被动模式)。

服务方式:
  1、上传一个文件到服务器(PUT)
  2、下载一个文件本地(GET)

配置(FTP request):

  服务器名称或IP:填写FTP的IP
  remote file:远程路径
  local file:本地文件

jmeter实战-数据库MySQL

需求:测试用户表(select)
环境准备:MySQL驱动(mysql connect-java.jar),jmeter-JDBC配置,jmeter-JDBC请求。

步骤:
1,测试计划中加入jar包。(添加目录或jar包到classPath)。
2,JDBC配置:添加JDBC connection Configturation。

 【Jmeter入门】Jmeter基础理论知识_第2张图片

 


  driver=com.mysql.jdbc.Driver
  url=jdbc:mysql://localhost:3306/jdbc?userUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true(allowMultiQueries=true:表示支持一次运行多条sql语句)

  username=root
  password=root
3,添加JDBC request:选择query type,输入SQL语句。
4,添加断言结果,监听器(summary report)。

  如果需要实现多个不同的用户使用不同的SQL,可以通过把整条SQL语句参数化来实现。例如,把SQL语句放在CSV文件中,然后在JDBC request的query中使用参数代替${SQL_Statement}。

jmeter分布式性能测试

原理:和LR的agent差不多。jmeter由Java开发,耗内存,CPU,所以大并发下还需要分布式。

步骤:

  1,关闭防火墙。
  2,在所要运行jmeter并作为负载生成器的机器上安装jmeter,并确定其中一台机器作为主的controller,其他机器作为agent,然后运行所有agent机器上的jmeter-server文件。
  3,在controller机器的jmeter的bin目录下,找到jmeter.properties的remote_hosts中,修改对应的IP和端口。
  4,启动controller机器上的jmeter应用,选择菜单“运行”--->“远程启动”来分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动。

jmeter中的监听器及测试结果分析

常用监听器:
  断言结果:
  查看结果树:
  聚合报告:
  用表格查看结果:
  图形结果:
  aggregate graph:

指标(时间单位都是毫秒):
  label:定义HTTP请求名称;
  samples:本次场景中一共完成了多少个请求;
  average:平均响应时长;
  median:响应时间中值50%用户的响应时长;
  90%Line:90%用户响应时间;
  Min:访问页面最小响应时长;
  Max:访问页面最大响应时长;

  error:出错率(错误请求数量/请求总数量);

  throughput:吞吐量(默认表示每秒完成的请求数);
  KB/sec:流量(每秒从服务器端接收到的数据量)。

jtl文件分析

  在性能测试过程中,往往将结果保存在一个文件中,既可以保存测试结果,也可以为日后性能测试报告提供更多的素材。jtl文件可以提供多种格式的编写,而一般我们都是将其以csv的格式记录。

  在监听器中的configure可以配置对应的保存字段信息(建议勾选:save field name,save assertion failure message),指定对应保存位置即可。
此时文件会有如下项:timeStamp,elapsed,responseCode,responseMessage,ThreadName,dataType,success,failureMessage,bytes,Latency
请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属的线程,数据类型,是否成功,失败信息,字节,延迟。

 

windows环境下的可以使用performer(性能监视器)工具。

自动化性能测试平台环境搭建(Jenkins+ant+Jmeter)

  持续集成:团队成员经常集成他们的工作,每次集成都通过自动化构建(包括编译、发布、自动化测试)来验证,从而尽快的发现集成错误。大大减少集成的问题,让团队尽快的开发内聚的软件。
  Jenkins,基于Java的持续集成工具,用于监控持续重复的工作,包括持续的版本发布/测试项目,监控外部调用执行的工作。

  项目构建:通过构建工具对多个项目文件进行统一的编译和运行,比如对Jmeter脚本的批量运行。
  ant:是一个将软件编译、测试、不熟等步骤联系在一起加以自动化的工具,大多用于Java环境中的软件开发。

ant下载安装:
  下载后解压到任意文件,配置Windows环境变量。
  ANT_HOME:
  path:;ANT_HOME/bin
  classpath:ANT_HOME/lib

  dos命令下:ANT_HOME/bin/ant - version

jenkines下载:
  解压后放在一个磁盘空间大的地方,然后点击setup.exe安装完成后,在浏览器中输入localhost:8080(默认为8080端口,如果被占用,修改Jenkins安装目录下的配置文件jenkines.xml中的httpPort=8080)。

Jenkins+ant+Jmeter自动化测试平台搭建:
步骤:
  1,录制Jmeter脚本;
  2,将Jmeter安装目录下的extras目录下的“ant-jmeter-1.1.1.jar"这个jar包放在ant的安装目录的lib目录下;
  3,配置Jmeter的extras目录下build.xml文件。(该配置文件作用为使用ant来批量构建Jmeter下XX文件夹里面的所有脚本,并按照指定格式来生成报告);
  4,使用ant编译验证Jmeter的build文件(将配置好的build文件放在ant目录的bin目录下)。进入ant目录的bin目录下,使用命令ant -filename build文件名.xml;
  5,部署到持续集成平台Jenkins。(选择ant的build文件进行集成)。

jmeter接口自动化

  1、在excel中维护用例,包含域名、url、方法(get还是post)、 参数 、预期结果(可以是多个),然后转化程csv格式,这样一来我们只需要在excel中维护我们的用例就好了(当然如果需要,可以添加其他字段,比如标识字段,其值为true,标识执行该用例,否则不执行)
  2、添加一个CSV Data Set Config,把文本路径填进去;

  3、添加BeanShell PreProcessor和BeanShell PostProcessor,主要 目的是为了处理中文乱码,在script中输入:prev.setDataEncoding("utf-8")。

    jmetetr自带有两个函数
    ${__javaScript(encodeURIComponent('${token}'))}
    ${__urlencode('${token}'))}
    我们借助这两个函数来实现,这样在变量或者csv中填写中文,在请求中调用这两个函数来编码;

  4、添加if控制器,根据方法值,来判断执行get还是post的请求条件设置为:"${mymeth}"=="post"

  5、设置断言,判断我们的结果是否正确,
  6、根据用例数,设置循环次数
  7、运行,查看结果

问题及解决办法

 1、问题:在csv中数据为json格式的数据,在jmeter中无法完整的取值
  分析:json格式数据,中间有逗号,我们都知道csv是根据逗号来分割的,这会导致我们取值错位。
  解决方法:在CSV Data Set Config下将【Allow quoted data?】设置程true即可。

 

  2、URL回写处理用户对话:使用HTTP URL Re_writing modifier,进行URL参数回写。

  3、MD5数据加密:有时候我们请求的参数可能需要加密,比如登录接口中的密码可能需要经过md5加密,

  第一种方法:这种方法比较简单,jmeter内置了一个md5的函数,可以直接使用。其中参数username是用户名,正常填写,password是密码经过md5加密如果没有此函数,就安装下。

然后使用${_MD5(密码)}

  第二种方法:需要有一定的编程技术,利用beanshell完成,大致步骤如下:
    1、导出md5的算法为jar包,可以找开发帮忙完成
    2、把该jar包copy到jmeter的lib/ext文件目录下
    3、jmeter里新建beanshell sampler,并编写代码
      import hehe.md5.Str2MD5;//包名,不知道为开发
      String res = newStr2MD5().MD5("xiaoqiang");//new一个对象出来并调用方法获取加密后的返回
      System.out.println(res);//打印结果
      vars.put("md5",res.toString());//把加密后的数据保存到md5这个变量里,供在jmeter里使用

Jmeter其他应用

使用jmeter来造数据

  引用来源:http://blog.51cto.com/xqtesting/1604820

  步骤:

  1、打开jmeter,创建一个线程组;
  2 、鼠标右键单机线程组,创建一个jdbc connection configuration: 对数据库的地址、用户名和密码进行填写;
  3 、创建用户参数:可根据要插入数据中,不同字段;创建参数函数: 函数的产生,由函数生成器产生, 不同函数的产生: 也可以用计数器当做函数使用;
  4 、线程组里面添加一个jdbc request: 在jdbc request里面添加sql语句: 其中,对字段有特殊要求的(即:字段被做参数化,使用函数的字段),用特定"${你的参数}"格式,在SQL中进行体现;
  5 、添加聚合报告和查看结果树,根据自己需要的数量级,进行查数据操作:这样就可以进行数据的插入了。

心得:
  1、小数据量的情况下,使用java通过接口或者直接插数据,跟使用jmeter应该时间上差不多,但是到达百万级以上的数据量,使用jmeter多线程,速度会明显快很多。
  2、jmeter的操作比较简单,如果没有现成的工程,搭建环境比较麻烦,调试代码有点烦。但是用jmeter的话,只需要一个简单的sql,几步操作步骤,就可以完成任务,优势比较明显。

 

JMeter从数据库获取数据并作为变量传输

引用来源:https://www.cnblogs.com/wuyonghuan/p/7479582.html

在Jmeter中使用Selenium WebDriver完成测试

引用来源:http://blog.51cto.com/xqtesting/1947396

fiddler抓取请求导出到JMeter

引用来源:https://www.cnblogs.com/heiyexiaoguai/p/5859200.html

转载于:https://www.cnblogs.com/kalar/p/10051019.html

你可能感兴趣的:(【Jmeter入门】Jmeter基础理论知识)