Jmeter 环境和基本理论汇总

一.工具下载和准备:

二.jdk环境变量配置:

jdk-8u191-windows-x64.exe
安装运行下载好的jdk,后最高配置下jdk环境变量,右击计算机→属性→高级系统设置→高级→环境变量
新建环境变量JAVA_HOME
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_191  

新建环境变量CLASSPATH
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
注意:变量值前面的“.;”

配置环境变量Path
双击Path,点击新建,添加“%JAVA_HOME%\bin”;
再次点击新建,添加“%JAVA_HOME%\jre\bin”。

验证java环境变量配置:
java -version
javac -version

三.jmeter及插件的安装及简单理论说明:

pache-jmeter-5.0.zip
Jmeter不用安装,下载后,直接解压即可
然后将下载的插件plugins-manager.jar 放入到lib/ext目录
最后进入bin目录下运行jmeter.bat即可
    
jmeter.properties 

jmeter.bat 或jmeter.sh
set HEAP=-Xms512m -Xmx512m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
根据经验,堆值(HEAP)最多设置为物理内存的一半,默认设置为512m,如果堆值(HEAP)超过物理内存的一半,JMeter运行速度会变慢,设置会出现“内存溢出”的错误。
3.1 jmeter 基础概念:http://www.cnblogs.com/fnng/archive/2012/12/21/2828440.html
从性能工具的原理划分:
    Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分:
(1)负载发生器:用于产生负载,通常以多线程或是多进程的方式模拟用户行为。
(2)用户运行器:通常是一个脚本运行引擎,用户运行器附加在线程或进程上,根据脚本要求模拟指定的用户行为。
(3)资源生成器:用于生成测试过程中服务器、负载机的资源数据。
(4)报表生成器:根据测试中霍地的数据生成报表,提供可视化的数据显示方式。
3.2 测试计划元件
Test Plan (测试计划):用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本的性能测试的所有内容是于基于一个计划的。
Threads (Users)线程 用户: 虽然有三个添加线程组的选项,名字不一样, 创建之后,其界面是完全一样的。之前的版本只有一个线程组的名字。现在多一个setUp theread Group 与terDown Thread Group 
    1) setup thread group  
      一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。
    2) teardown thread group.  
      一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。
      可能你还是不太理他们与普通的线程组有什么不同。 如果您用过junit,想必你不会对setup ,teardown这2个字眼陌生。 即时每用过,也没关系。 熟悉loadrunner的应该知道,loadrunner的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块。 那么这里 setup thread group 和 teardown thread group 就是分别指这两部分。  其实从本质上来看,他们并没有什么不同。
    3) thread group(线程组).
            这个就是我们通常添加运行的线程。通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。
测试片段(Test Fragment) : 测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。
取样器(Sampler): 性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler ,如 HTTP Request Sampler 、 FTP  Request Sample 、TCP  Request Sample 、JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。
逻辑控制器(Logic Controller): 常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、循环控制器等。
    说明:JMeter有两种类型的控制器:取样器(sample)和逻辑控制器(Logic Controller),用这些原件来驱动处理一个测试。
配置元件(Config Element): 用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池(Data Pool),而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配制无件则可以修改Sampler的默认数据。(例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的cookie 进行管理)
定时器(Timer):用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。类似于LoadRunner里面的“思考时间”。JMeter 定义了Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的Timer。
前置处理器(Per Processors): 用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符则可以实现URL重写,当RUL中有sessionID 一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID 。
后置处理器(Post Processors): 用于对Sampler 发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。例如,XPath  Extractor 则可以用于提取响应数据中通过给定XPath 值获得的数据。
断言(Assertions): 断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。
监听器(Listener) : 用来监听系统资源的元件。它是用来对测试结果数据进行处理和可视化展示的一系列元件。 图行结果、查看结果树、聚合报告。都是我们经常用到的元件。
3.3 添加http接口测试 相关参数说明:
* 线程组:“测试计划”-->“添加”-->“Threads(Users)”-->“线程组”
    主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
    1)线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
    2)准备时长: 设置的虚拟用户数全部启动的时长。如果线程数为20 ,准备时长为10(秒) ,那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。
    3)循环次数:每个线程发送请求的个数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。
       如果勾选了“永远”,那么所有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束。

* HTTP请求取样器:(线程组”-->“添加”-->“Sampler”-->“HTTP请求)
    1)名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
    2)注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。
    3)服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
    4)端口号:目标服务器的端口号,默认值为80 。
    5)协议:向目标服务器发送HTTP请求时的协议,可以是HTTP或者是HTTPS ,默认值为http 。
    6)方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
    7)Content encoding :内容的编码方式,默认值为iso8859,常用使用utf8      
    8)路径:目标URL路径(不包括服务器地址和端口)
    9)自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。
    10)Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。
    11)Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。
    12)同请求一起发送参数 : 在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。
        用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应RUL中的 名称1=值1)。

四. 配合jmeter使用和测试:

五.参数化(参考资料,https://www.jianshu.com/p/7cc72f97d5ab)

1.User Parameters

HTTP取样器-->Add-->Pre Processors-->User Parameters
适用于参数取值范围很小的时候使用

2.CSV Data Set Config

HTTP取样器-->Add-->Config Element-->CSV Data Set Config
适用于参数取值范围较大的时候使用,该方法具有更大的灵活性

3.User Defined Variables

Thread Group-->Add-->Config Element-->User Defined Variables
一般用于Test Plan中不需要随请求迭代的参数设置,如:Host、Port Number

4.Function Helper中的函数

Options-->Function Helper Dialog
可作为其他参数化方式的补充项,如:随机数生成的函数${__Random(,,)},参考常用的jemter 函数https://www.cnblogs.com/imyalost/p/6802173.html

补充以另外一种常用的,通过读取数据库中的数据进行参数化
参考:https://blog.csdn.net/wuhenyan/article/details/53788242
结合beanshell参考:https://blog.csdn.net/foreverlemon/article/details/73792775

Jmeter连接Mysql

1、下载连接mysql数据库jar包,地址:https://dev.mysql.com/downloads/connector/j/ (下载通用版本,解压就可以使用了)
2、将文件拷贝到Jmeter\lib\ext目录下,我的是:D:\Program Files\apache-jmeter-2.11\lib\ext
3、启动Jmeter,在测试计划点击浏览添加刚刚拷贝的jar包。(如果启动后放入的需要重启jmeter)
jdbc:mysql://192.168.1.141:3306/bugfree
com.mysql.jdbc.Driver
root
123456

六.断言(参考资料:https://www.cnblogs.com/imyalost/p/6024306.html)

七.提取器

八.变量属性范围,以及跨线程共享变量方法

1.变量范围说明:
jmeter变量、jmter属性和system属性(https://www.cnblogs.com/yangxia-test/p/4846837.html
可以通过 添加debug Simpler,查看当前线程组的 所有变量和属性值
JMeter变量对于测试线程而言是局部变量,jmter属性和system属性是全局的
变量和属性的设置和获取方法:(https://www.jianshu.com/p/4c2c73955e1a)
- 变量: 
    1)jmeter界面中直接用 ${变量名}  
    2)beanshell脚本中使用vars变量进行 get("变量名")或put("变量名",value)
       如果是对象:getObject("变量名")putObject("变量名",value);
  - 属性: 
    1)jmeter界面中直接用 ${__getProperty(变量名)}  ${__setProperty(变量名,value)} 
    2)beanshell脚本中使用props变量进行 get("变量名")或put("变量名",value) 
      如果是对象:getObject("变量名")putObject("变量名",value);
2.jmeter跨线程共享变量方法
参考:http://note.youdao.com/noteshare?id=2a591ce7e65855f830afda242910f710
  • 方法一:将获取的cookies值(直接获取系统Cookies变量)设置为jmeter属性变量,这样所有线程组都能获取
  • 方法二:将获取的cookies值(通过提取器获取Cookies)通过线程间通信后处理器和预处理器,进行获取和设置也能获取。

九.beanshell 处理器:

Bean Shell常用内置变量
log:写入信息到jmeber.log文件,使用方法:log.info(“hello world !”);
ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
    a) vars.get(String key):从jmeter中获得变量值
    b) vars.put(String key,String value):数据存到jmeter变量中
props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。 
    a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义 
    b) props.put("PROP1","1234"); 
prev - (SampleResult):获取前面的sample返回的信息,常用方法:
    a) getResponseDataAsString():获取响应信息
    b) getResponseCode() :获取响应code
sampler - (Sampler):gives access to the current sampler

更多方法可参考官方API:org.apache.jmeter.samplers.SampleResult

10.ant 方式持续构建生成测试结果报告

参考:https://www.cnblogs.com/chengtch/p/6145867.html
逻辑控制器(参考资料:https://www.cnblogs.com/puresoul/p/4886574.html

10.1 简单控制器(Simple Controller):

作用:这是Jmeter里最简单的一个控制器,它可以让我们组织我们的采样器和其它的逻辑控制器(分组功能),提供一个块的结构和控制,并不具有任何的逻辑控制或运行时的功能。

10.2 循环控制器(Loop Controller):

作用:指定其子节点运行的次数,可以使用具体的数值,也可以使用变量

10.3 仅一次控制器(Once Only Controller):

作用:在测试计划执行期间,该控制器下的子结点对每个线程只执行一次,登录场景经常会使用到这个控制器。
  注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。

10.4 ForEach控制器(ForEach Controller):

作用:ForEach控制器一般和用户自定义变量一起使用,其在用户自定义变量中读取一系列相关的变量。该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。
参数:
Input Variable Prefix:输入变量前缀
Output variable name:输出变量名称
Start index for loop(exclusive):循环开始的索引(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
End index for loop(inclusive):循环结束的索引
Add””before number:输入变量名称中是否使用“”进行间隔。

10.5 事务控制器(Transaction Controller):

作用: 事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。

10.6 If 控制器(If Controller):

作用:根据给定表达式的值决定是否执行该节点下的子节点,默认使用javascript的语法进行判断(如下图红框内的文字)。

10.7 Switch控制器(Switch Controller):

作用:Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。有两种赋值方式:
第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容