犀牛建设网站,wordpress 文章简介,照片拼图制作,房产官网v Jmeter是什么 Apache Jmeter是Apache组织开发的基于Java的压力测试工具。Jmeter可以用于对服务器、网络或对象模拟巨大的负载#xff0c;来自不同压力类别下测试它们的强度和分析整体性能。另外#xff0c;Jmeter能够对应用程序做功能、回归测试#xff0c;通过创建带有断…v Jmeter是什么 Apache Jmeter是Apache组织开发的基于Java的压力测试工具。Jmeter可以用于对服务器、网络或对象模拟巨大的负载来自不同压力类别下测试它们的强度和分析整体性能。另外Jmeter能够对应用程序做功能、回归测试通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大程度的灵活性Jmeter允许使用正则表达式创建断言。v Jmeter的特点 能够对HTTP和FTP服务器进行压力和性能测试也可以对任何数据库进行同样的测试通过JDBC即支持多协议webHTTP HTTPS 数据库JDBC MailPOP3 SMTP IMAP FTP LDAP TCP 面向消息的中间件JMS 完全的可移植性和100%纯JAVA带有图形界面开源应用程序可以模拟多用户进行并发负载测试5数据分析和可视化插件提供了很好的可扩展性以及个性化测试结果可视化图形、表格、树形、报告等完全多线程框架允许通过多个线程并发取样和通过单独的线性组对不同的功能同时取样具有提供动态输入到测试的功能各种负载统计表和可链接的计时器可供选择v Jmeter环境搭建 jmeter安装运行的前置条件是安装JDK1安装JDK默认安装路径C:\PrograMFiles\Java\jdk1.8.0_92 2配置环境变量l JAVA_HOME C:\PrograM Files\Java\jdk1.8.0_92 l PATH C:\PrograMFiles\Java\jdk1.8.0_92\bin 3测试运行l 打开cMd运行java –version能出现信息输出打印环境就成功了 v JMeter安装 版本目前更新至5.1我下载的是5.0版本的需要其他版本可以到官网下载 官网地址 http://jmeter.apache.org/download_jmeter.cgi下载之后解压即可v JMeter运行和语言设置 运行有两种方式 1直接命令行运行进入bin目录运行jmeter.bat启动jMeter 2直接双击jmeter.bat启动 启动成功之后命令行和图形界面窗口同时出现不要关闭命令行窗口 打开之后切换语言有两种方法 1 2 v 工作原理 v jmeter和LoadRunner对比 v Jmeter目录组成 Bin目录是可执行文件Jmeter.bat windows操作系统下启动Jmeter.sh linux操作系统下启动里面可以设置jvm参数 根据经验heap堆内存最多设置为物理内存的一半默认设置为512M如果heap超过物理内存的一半可能运行jmeter会慢甚至出现内存溢出Jmeter的log在jmeter.log中查看 Jmeter.properties配置文件文件中有一个属性是log_level.jmeter。可以设置改变日志详细度。默认是info,可改为debugDocs下是jmeter的java.docs常用的是Printable_docs的usermanual子目录下是jmeter用户手册其中component_reference.html是最常用的核心元件帮助手册 Extras目录下的文件提供了对ant的支持可以利用ant来实现自动化例如批量执行脚本产生html报告等运行jmeter的时候会产生一个jtl文件把它放到extras目录下运行ant.Dtest文件名report就可以生成测试统计报表Lib目录下的ext子目录是jmeter的核心jar包junit子目录是放junit脚本的。用户扩展所依赖的包直接放到lib下即可不需要放到lib/ext下v Jmeter的操作术语 1测试计划用来描述一个性能测试所有内容都是基于这个计划的 2 一般常用线程组可以理解为虚拟用户组 setup线程组设置可用于执行预测试操作这些线程的行为完全像一个正常的线程组元件 teardown线程组拆卸可用于执行测试后操作这些线程的行为完全像一个正常的线程组元件 3 取样器取样器是jmeter测试脚本的基础单元用户可以用它来向服务器发出一个特定的请求取样器会在超时前等待服务器的响应 4 逻辑控制器用户通过逻辑控制器来控制jmeter测试脚本的执行顺序以便测试能够按照用户期望的顺序和逻辑执行 5 监听器监听器用来收集测试结果信息并以用户指定的方式展示出来 6 配置元件配置元件被用来设置一些jmeter测试脚本公用的信息 7 断言断言被用来验证服务器实际返回的信息与用户期望的情况是否相符 8 定时器定时器被用来保存jmeter测试脚本与时间相关的一些信息 采样器Samplers采样器是jmeter测试脚本的基础单元用户可以用它来向服务器发出一个特定的请求采样器会在超时前等待服务器的响应。逻辑控制器Logic Controllers用户通过逻辑控制器来控制jmeter测试脚本的执行顺序以便测试能够按照用户期望的顺序和逻辑执行。监听器Listeners监听器被用来手机测试结果信息并以用户指定的方式加以展示。配置元件Configuration Elements配置元件被用来设置一些jmeter测试脚本公用的信息。断言Assertions断言被用来验证服务器实际返回信息与用户期望的情况是否相符。定时器Timers定时器被用来保存jmeter测试脚本与时间相关的一些信息例如思考时间Think Time。前置处理器Pre-Processors在前置处理器的作用范围内任何采样器被执行前都要先执行前置处理器。后置处理器Post-Processors在后置处理器的作用范围内任何采样器被执行后都要执行对应的后置处理器。测试计划Test Plan测试计划是jmeter测试脚本的根节点关于整个测试脚本的一些基础设置可以在测试计划中设定例如用户定义变量。线程组Thread Group线程组定义了一个虚拟用户池其中每一个虚拟用户都使用同样的测试脚本。工作台WorkBench:工作台被用来保存暂时不使用的测试元素当测试人员保存测试计划时工作台中的内容不会被一起保存。v Jmeter的两种录制脚本方法 录制方法一badboy推荐 1.概念badboy本身是一个独立的自动化功能或性能测试工具可以进行脚本录制导出的文件可以导入jmeter使用所以一般两个搭配起来使用它能够添加断言对脚本进行调试 2.下载地址http://www.badboy.com.au/download/add 双击安装默认安装路径C:\Program Files (x86)\Badboy点击badboy.exe打开工具 3.页面功能分析 1界面视图模拟浏览器能够进行操作 2需要录制脚本的url 3点击运行url 4概要运行的各项数据 5参数在录制到需要参数化的地方能够在这里操作之后导入jmeter 6目录树记录录制到的每一个操作 7录制按钮点击之后开始进行录制操作 8停止按钮停止录制 9回放按钮 10回放所有 11倒回按钮退回到前一步操作 12单独运行一个请求 4.执行步骤 1打开badboy工具点击录制按钮红色圆圈在地址栏输入被测试的项目的地址即url 2录制完成后点击结束录制按钮录制按钮后面的黑色方框点击文件—Export to Jmeter... 3打开jmeter工具选择文件—打开选择刚才保存的文件.jmx类型导入文件 4演示录制gogomall.com 录制方法二代理 操作步骤 1.创建一个线程组右键点击“测试计划”-“添加”-“线程组” 2.添加HTTP代理服务器右键点击“工作台”-“添加”-“非测试元件”-“HTTP代理服务器” 3.代理服务器端口默认8888可以修改不与其他应用端口冲突即可 4.目标控制器录制的脚本存放的位置可选择项为测试计划中的线程组自己选择即可 5.分组对请求进行分组 分组是将一批请求汇总分组可以把url请求理解为组 1不对样本分组所有请求全部罗列 2在组间添加间隔加入一个虚拟的以分割线命名的动作运行同【不对样本分组】无实际意义 3每个组放入一个新的控制器执行时按控制器输入结果 4只存储每个组的第一个样本对于一次url请求实际很多次http请求的情况 6.点击启动最下面启动按钮 注要用代理服务器需要配置 打开IE浏览器——点击工具——Internet选项——Internet属性——连接——局域网设置——勾选代理服务器——输入地址如是本机输入localhost——输入端口号与jmeter设置的代理端口号一致 6.点击jmeter的启动按钮打开IE浏览器输入需要录制的url地址jmeter会自动记录所访问的页面 7.录制完成之后点击jmeter的停止按钮最下面 注意录制完成后把IE浏览器中的局域网设置关掉 这种方法录制下来一些资源加载的也会显示比较杂所以一般还是推荐用badboy来录制导入 在使用 JMeter 做性能测试时我们可以使用 Badboy 工具协助录制测试脚本但录制脚本时经常会提示“当前页面的脚本发生错误”的错误信息如下图。 这个时候我们要去设置一下 Badboy 让 Badboy 在录制脚本时自动处理 javascript 错误。 点击Preferences点击Playing勾选了javascript Error Dialogs 错误对话框选项,点击确定再次用 Badboy 录制脚本时就不会提示上面的错误了。 v Badbaby使用 Badboy按钮功能讲解 默认情况下badboy在双击打开的时候就自动开启录制不过我们最好在一切准备工作就绪后再开始进行录制脚本这时候需要我们快捷键CtrlShiftP 1.Badboby检查点 检查点就是记录被测系统某个值的预期结果 以百度搜索人人网为例子 1录制脚本 2鼠标选中输入框中的内容要检查的内容点击Tools-Add Assertion for Selection,左侧添加了一行,图标为问号 3点击回放所有 4新添加的一行图标变为了对勾表示成功如果是×则表示没有找到改检查点 2.参数化 1.可选择www.sogou.com 或 https://www.google.com.hk/ 链接作实验这里以www.sogou.com 为实例讲解 2.点击红色按钮开启录制默认是开启的然后在地址栏输入www.sogou.com 点击回车 3.输入要搜索的东西如名字张三点击搜索 4.做数据处理添加断言即检查点选中搜索框中的张三然后Tools- Add Assertion For Selection 5.页面展开搜索结果后停止录制展开脚本树 6.点击Variable 标签, 空白处右击点击Add Variable输入参数化的名字和要搜索的内容点击ok 7.输入任意变量名如:“搜索词”,由于这个用例是测有效类那么我们加入有效测试数据如张三、李四等然后点击OK即可 8.右击脚本树中的ie 选择Properties修改成gbk 右击脚本树中的query选择Properties修改成${搜索词}将Value绑定参数搜索词 check for text参数化 9.观察脚本树的变化query的值已经被参数化 10.双击Step 1 , 或右击选择Properties此时查看脚本树的变化。 更改回放次数选择step右键选择properties 勾选for each value of vari,点击确定按钮 11.选择Step 1 运行脚本 1建立参数化列表 点击Variables标签空白处右击点击Add Variable输入参数化的名字和要搜索的内容点击ok 2在请求中替换${参数名称} 找到实际发请求的参数右键properties 找到关键字请求点击前面的加号打开列表找到要替换的关键字如上次搜索内容为badboby右击点击properties,将value的值替换成参数化列表中的名字如${searchtxt},点击确定如是中文会出现乱码把ieutf8改成gbk. 3更改回放次数选择step右键选择properties 勾选for each value of vari,点击确定按钮。 4进行回放 5如果是配合检查点使用的则还需要修改检查点不然也会报错 注中文可能会乱码更改请求中的编码即可 v 使用Badbody进行数据库参数化 在Badboy里进行数据库参数化是通过ODBC进行的。 使用ODBC的前提是要在本地安装上ODBC安装好之后要配置数据源 下载个odbc, 如公司项目用是MySQL所以安装mysql-connector-odbc-8.0.11-winx64Mysql官网下就可以https://dev.mysql.com/downloads/connector/odbc/添加数据源 1在开始那输入数据源--打开“设置ODBC数据源64位 2如下图 备注 1的位置随便写 2的位置的TCP/IP、Port、用户名和密码都需要填写你公司实际的IPportusername和password 3的位置填完2之后就会自动出现可用的库选择需要的即可 添加完后如下图片展示 在这里如果连接mysql数据库的时候报不能连接或者是拒绝连接可能是没有权限。 1设置访问单个数据库权限 mysqlgrant all privileges on test.* to root%; 说明设置用户名为root密码为空可访问数据库test 2设置访问全部数据库权限 mysqlgrant all privileges on *.* to root%; 说明设置用户名为root密码为空可访问所有数据库* 3设置指定用户名访问权限 mysqlgrant all privileges on *.* to liuhui%; 说明设置指定用户名为liuhui密码为空可访问所有数据库* 4设置密码访问权限 mysqlgrant all privileges on *.* to liuhui% IDENTIFIED BY liuhui; 说明设置指定用户名为liuhui密码为liuhui可访问所有数据库* 5设置指定可访问主机权限 mysqlgrant all privileges on *.* to liuhui10.2.1.11; 说明设置指定用户名为liuhui可访问所有数据库*只有10.2.1.11这台机器有权限访问。 一般如上步骤如果没有错误的话我们在进入badboy工具内部进行设置数据源。 3Badboy配置Data source 此处遇到坑了刚才配置的数据源没有出现在下拉列表。因为安装的ODBC是64位的而badboy是32位的所以重复前面的步骤需要找个32位的odbc“mysql-connector-odbc-5.1.1-win32.exe” 选择一个需用的表 上面的步骤完成之后需要把Data Source添加到脚本的最顶端只是必须的 因为按脚本顺序执行放到最顶端就可以先把数据取出来。 点着 Data Source拖到顶端的时候还会出现选择数据库和表的界面选择需要的即可 然后我们回到之前参数化设置的地方把参数值修改为${username},username为数据库字段也是参数列表名称。断言处输入数据处操作步骤step1处双击选择一共3个地方需要进行修改。 修改完成后脚本归零后重新进行脚本运行只要是按照数据库表customer中的字段username字段中的值进行运行就说明OK了。 v 并发 录制好脚本后点击tools-选择Run background Threads,填写并发数量、间隔时间点击Start开始启动 ①执行并发的数量 ②是否在每次执行完成之后清除cookie ③每次间隔的时间 ④开始执行 ⑤输出结果框 v 报告 View-Report 结果如下 v 断点 在相应的步骤上右键—Toggle Break Point。 取消断点-重复以上操作。 v 问题记录 1录制时一直提示错误弹窗 解决办法可以通过设置不再显示将“JavaScript Error Dialogs” 打勾意思是隐藏javascript的报错对话框。 要关闭警告可以在浏览器Internet选项然后单击“高级属性”页进入到浏览器标签并选中“禁止脚本调试”复选框 2切换浏览器 在谷歌浏览器设置中操作设置为默认浏览器即可 注设置成功之后可以看到浏览器图标更改为谷歌但是badboy内核为IE浏览器所以实际上运行的还是IE v Jmeter使用 添加线程组n 名称可以随意取我们保持创建是自动分配的名称 n 注释随意 n 在取样器错误后要执行的动作我们选择继续错误之后依然继续执行 n 线程数一般我们用来表示多少个用户即我们测试时的用户数量 n Ramp-up Period(in Seconds)表示每个用户启动的延迟时间上述我设为1秒表示系统将在1秒结束前启动我设置的1000个用户如果设置为1000秒那么系统将会在1000秒结束前启动这1000个用户开始用户的延迟为1秒 如果我设置为0秒则表示立即启动所有用户。 n 循环次数如果你要限定循环次数为10次的话可以取消永远的那个勾然后在后面的文本框里面填写10在这里我们勾上永远表示如果不停止或者限定时间将会一直执行下去 是为了方便调度器的调用。 n 调度器的配置我们勾选调度器时将会出现这个面板 n 启动时间表示我们脚本开始启动的时间当你不想立即启动脚本测试但是启动脚本的时间不会再电脑旁的时候你可以设定一个启动的时间然后再运行那里点击启动系统将不会立即运行而是会等到你填写的时间才开始运行。 n 结束时间与启动时间对应表示脚本结束运行的时间。 n 持续时间表示脚本持续运行的时间以秒为单位比如如果你要让用户持续不断登录1个小时你可以在文本框中填写3600。如果在1小时以内结束时间已经到达它将会覆盖结束时间继续执行。 n 启动延迟表示脚本延迟启动的时间在点击启动后如果启动时间已经到达但是还没有到启动延迟的时间那么启动延迟将会覆盖启动时间等到启动延迟的时间到达后再运行系统。 n 注意如果我们需要用到调度器来设定持续时间如果线程数不够多到持续时间结束我们就必须将循环次数勾选为永远特别地如果线程组里面有其他的循环我们也需将该循环次数勾选为永远如我上面录制的脚本中的Step1也是一个循环需要将永远勾选否则按我如上配置将永远去掉勾选文本里填1那么无论你将持续时间启动时间结束时间等设置多少系统运行1000次后将会停止不再运行。 添加HTTP请求设置n 名称本属性用于标识一个取样器名称可以随意取可以根据脚本的路径来取名 n 注释:对于测试没有任何作用仅用户记录用户可读的注释信息对界面做一个简单地介绍 n 服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址如是在本机上的项目填写localhost或者127.0.0.1 n 端口号目标服务器的端口号默认值为80后面的超时定义可以不用填写 n Implementation这里我们录制时默认填写为JAVA n 协议向目标服务器发送HTTP请求时的协议可以使http或者是https,默认是http n 方法发送http请求的方法可用方法get、post、head、put、options、trace、delect等 n Content encoding内容的编码方式可以不填写 n 路径目标URL路径不包括服务器地址和端口 n 自动重定向如果选定该选项当发送HTTP请求后得到的响应是302/301时JMeter自动重定向到新的页面 n Parameters参数即跟着路径一起发送的参数及文件 n 下面的代理服务器等可以忽略按需要填写 n Use keep Alive:当该选项被选中时jmeter和目标服务器之间使用Keep-Alive方式进行HTTP通信默认选中 n USE multipart/from-data for HTTP POST:当发送HTTP POST请求时使用USE multipart/from-data方式发送默认不选中 n Parameters同请求一起发送参数在请求中发送URL参数对于带参数的URLjmeter提供了一个简单地对参数化的方法。用户可以将URL中所有参数设置在本表中表中的每一行是一个参数值对对应URL中的名称1值1 n 通请求一起发送文件在请求中发送文件通常HTTP文件上传行为可以通过这种方式模拟 n 当该选项被选中时jmeter在发送HTTP请求并获得响应的HTML文件内容后还对该HTML进行Parse并获取HTML中包含的所有资源(图片、flash等)默认不选中如果用户只希望获取页面中的特定资源可以在下方的文本框中填入需要下载的特定资源表达式这样只有能匹配指定正则表达式的URL指向会被下载 n 此取样被当成监视器在Monitor Results Listener中可以直接看到基于该取样器的图形统计信息默认为不选中 n 选中该项在执行时只记录服务端响应数据的MDS值而不记录完整的响应数据在需要进行数据量非常大的测试时建议选中该选项减少取样器记录响应数据的开销 Jmeter的参数化方法参数化录制脚本中有登录操作需要输入用户名和密码假如系统不允许相同的用户名和密码同时登录或者想更好的模拟多个用户来登录系统。 这个时候就需要对用户名和密码进行参数化使每个虚拟用户都使用不同的用户名和密码进行访问。 一、利用函数助手获取参数值 选项-函数助手对话框 __CSVRead, __Random, 生成的函数字符串${__Random(,,)}第一个参数为随机数的下限第二个参数为随机数的上限第三个参数为储存随机数的变量名 ${__CSVRead(,)}第一个参数是文件名(包含路径)第二个参数是文件中的列列数从0开始 参数化数据 我们需要“参数化”的数据用记事本写了五个用户名和密码保存为.dat格式的文件编码问题在使用CSV Data Set Config参数化时要求的比较严格记事本另存为修改编码UTF-8. 注意用户名和密码是一一对应的中间用户逗号隔开。 我将这个文件放在了我的 C:\JmeterWorkSpace\t.dat 路径下。 __CSVRead:复制生成的参数化函数打开登陆请求页面在右则的参数化中找到我们要参数化的字段这里对用户名和密码做参数化第一列是用户名列号为0第二列是密码列号为1修改函数中对应的参数化字段列号就可以了点击运行会调用相应路径下的参数文件。 CSV文件列号是从0开始的第一列0、第二列1、第三列2、依次类推。。 _Random函数是从某数据段随机读取数据替换参数当需要添加多条数据记录且某些字段需要唯一性时使用。 复制生成的参数化函数打开登陆请求页面在右则的参数化中找到我们要参数化的字段这里对用户名和密码做参数化第一列是用户名列号为0第二列是密码列号为1修改函数中对应的参数化字段列号就可以啦。 现在我们的参数化设置完成在脚本的时候会调用我们C:\JmeterWorkSpace盘下面的t.dat文件第一列是用户第二列是密码。 二、利用配置元件CSV Data Set Config 1.选中线程组点击右键添加配置元件CSV Data Set Config Delimiter --- 如文件中使用的是逗号分隔则填写逗号如使用的是TAB则填写\t(如果此文本文件为CSV格式的默认用英文逗号分隔) Recycle on EOF是否循环读入因为CSV Data Set Config一次读入一行分割后存入若干变量中交给一个线程如果线程数超过 文本的记录行数那么可以选择从头再次读入. Recycle on EOF与Stop thread on EOF结果的关联 Recycle on EOF 到了文件尾处是否循环读取参数选项true和false Stop thread on EOF到了文件尾处是否停止线程选项true和false 当Recycle on EOF 选择true时Stop thread on EOF选择true和false无任何意义通俗的讲在前面控制了不停的循环读取后面再来让stop或run没有任何意义 当Recycle on EOF 选择flase时Stop thread on EOF选择true线程4个参数3个那么只会请求3次 当Recycle on EOF 选择flase时Stop thread on EOF选择flase线程4个参数3个那么会请求4次但第4次没有参数可取不让循环所以第4次请求错误 2.填写刚才定义好的变量 需要说明一下函数助手方法要比CSV控件方法参数化功能要弱推荐使用CSV控件方法。 三、用户自定义变量 一般定义测试系统的固定使用的变量比如主机地址端口号数据库账号密码等。选中线程组点击右键添加配置元件-用户定义的变量 用户自定义变量中定义的所有参数的值在测试计划的执行过程中不能发生取值的改变因此一般仅将测试计划中不需要随迭代发生改变的参数只取一次值的参数设置在此处。例如应用POST和port 取样器中的host和port用${host}和${port}代替即使被测应用的部署服务器发生了变化只需要简单地修改host和port参数的取值即可 值可以直接输入也可通过函数__CSVRead从文件中读取还可以通过前缀加随机数和方法获取。 比如用户名为user_0到user_100的用户那么用户名可设置名user_${__Random(0,100,)} 但是这种每次执行的多个线程所替换的参数一样因为先获取到随机参数再执行多个HTTP请求 四、用户参数 右键快捷菜单中选择 添加-前置处理器-用户参数 与用户自定义变量不同的是用户参数列表中的参数取值可以在测试计划执行过程中发生变化。 如图username和password分别有两组不同的取值。通过界面右下方的四个按钮可以向列表中增加参数增加参数值删除参数和删除参数值。 “每次迭代更新一次”选项控制参数取值的变化规则如果选中该选项则参数的值在每个迭代中保持不变在新的迭代开始时取下一个值。如果取消该选项则参数值在每个在其作用域内的sampler发出请求时取下一个可用值。 如果参数的取值范围很小使用用户比较合适如果参数的取值范围很大建议使用csv dada set config方法 五jmeter的属性 以命令行方式运行测试计划时用户可指定从命令行输入的值替换测试计划中的某些值。例如以命令行指定线程组的线程数和运行时长。 _property函数具有3个参数分别为属性名称、存放属性值的变量名称可选属性默认值可选。 Jmeter –n –t test.jmx –Jthreadcount10 –Jduration60 -J表示设置property的值以上命令行表示10个线程运行运行时间为60秒。 六从数据库中获取 当参数的值没有规律且量比较大时可以选用这种方法。 具体做法如下 4.1 下载MySQL JDBC “http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.12.zip/from/http://ftp.jaist.ac.jp/pub/mysql/” 4.2 解压下载的zip包后将其中的mysql-connector-java-5.1.12-bin.jar放到Jmeter的lib目录下 4.3 添加“配置元件”-“JDBC Connection Configuration”设置下列参数 Database URLjdbc:mysql://host:port/db如jdbc:mysql://localhost:3306/testlink JDBC Driver classcom.mysql.jdbc.Driver username连接数据库的用户名如root password连接数据库的密码 4.4 添加“Sampler”-“JDBC Request”在SQL Query中输入查询语句如下 SELECT CONCAT (“[, GROUP_CONCAT( CONCAT({username:,login,), CONCAT({password:,password),}),]“) AS json FROM users 4.5 在4.4中的JDBC请求中添加“后置处理器”-“正则表达式提取器”以提取3.4中的用户名和密码为例设置正则表达式提取器的参数 引用名称user 正则表达式username:’(.?)’\{password:’(.?)’ 模板$1$$2$ 使用时user_g1即为用户名user_g2即为对应用户名的密码更多正则表达式提取方法参见Jmeter正则表达式提取器 5.用正则表达式从前面请求的响应数据中提取具体操作见Jmeter正则表达式提取器 断言验证 在web测试中有的时候即使我们测试返回的response code为200也不能保证该测试是正确的这时候我们可以用到响应断言通过对比响应的内容来判断返回的页面是否是我们确定要返回的页面。 选择我们要判断的页面点击添加断言----响应断言将会出现如下图 名称随意这里我们不做改动 注释随意 Apply to这里我们选择默认值 要测试的响应字段这里我们选择响应的文本即返回的页面信息 模式匹配规则这里我们选择包括即响应的文本是否包括我们验证的信息 要测试的模式开发者名称即我们需要验证开发者名称是否在响应文本中存在也可以添加更多的字段来验证。 其他还有文件大小和响应时间等的断言后面介绍。 e、添加监听器 我们做性能测试的时候经常需要各种数据来验证我们的测试结果Jmeter里面也提供了相关的功能这里主要说一下Aggregate Report聚合报告。 点击添加---监听器选择查看结果树和聚合报告如果需要看到断言信息也可以选择断言结果将设置的一切保存之后然后点击启动系统将会运行将结果在监听器中表现出来。 四、分析结果 1、查看结果树 如图所示成功的为绿色失败则显示为红色。如果测试的结果太多你只需要看到错误的页面则勾选【仅日志错误】 2、聚合报告(Aggregate Report) 其中 Label标签即我们上面的请求名称 #Samples本次场景中一共发出了多少个请求 Average平均响应时间 Median中位数也就是50%的用户的响应时间 90%Line表示90%的用户的响应时间如果最小值和最大值相差很大的话我们一般选择这个作为最终测试结果 Min最小响应时间 Max最大响应时间 Error%出错率本次测试中出现错误的请求的数量/请求的总数 Throughput吞吐量 KB/sec每秒从服务器端接受到的数据量 五、监控内存及CPU等 很多时候我们测试性能都需要查看内存和CPU等信息来判断系统瓶颈关于CPU和内存的监控Jmeter并没有很好的支持很多时候我们都只能通过系统的资源监控器来观察一闪而过不会记录下来很不方便。幸好google开发了一款专门监控的Jmeter插件弥补了Jmeter这方面的不足下面就来介绍一些这款插件——JMeterPlugins目前我用的是0.5.6版本。 1、JMeterPlugins的下载地址 地址http://code.google.com/p/jmeter-plugins/downloads/list选择需要的版本下载 2、JMeterPlugins的配置使用 将下载的文件解压得到如下目录 将JMeterPlugins.jar包复制到Jmeter的lib目录下面的ext目录下面,重新启动Jmeter我们点击添加就可以看到出现了很多的jpgc-开头的文件. 这里监控内存我们使用的是jpgc - PerfMon Metrics Collectot 在使用之前我们需要运行/serverAgent/startAgent.bat这个文件我们需要将serverAgent目录及下面的文件复制到我们测试的服务器上然后点击打开(我这里是本机直接在本机上面打开这个应用系统即可)它的默认端口为4444。 一切准备好后点击启动即可得到如下图 你就可以得到系统运行时你所需要的常用的性能值了。 六、监控内存及CPU等jconsole 最近逛论坛的时候发现了一个比较好的监控内存CPU等的小工具本着开源小工具多多益善的原则记录一下。 打开这个小工具的步骤很简单如果你已经配置好了Jmeter运行的环境那么你也就不用去做其他的配置直接 点击开始——》运行——》输入cmd——》然后在出现的命令行界面输入“jconsole”即可弹出一个【java监视和管理控制台】 将会弹出如下界面 这里我们选择本地进程并点击一下sun.tools.jconsole.JConsole这一行然后点击连接就可以查看我们的内存和CPU的使用情况了。 当然我们要得到服务器的内存使用等信息也可以选择 本地进程下面的远程进程在文本框中输入我们需要测试的服务器的IP地址端口然后在下面输入用户名和密码点击连接看看会出现什么情况。 v Jmeter元件的作用域 配置元件config elements 元件会影响其作用范围内的所有元件。 前置处理程序Per-processors元件在其作用范围内的每一个sampler元件之前执行。 定时器timers 元件对其作用范围内的每一个sampler 有效 后置处理程序Post-processors元件在其作用范围内的每一个sampler元件之后执行。 断言Assertions元件对其作用范围内的每一个sampler 元件执行后的结果执行校验。 监听器Listeners元件收集其作用范围的每一个sampler元件的信息并呈现。 在jmeter中元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的作用域的原则是 取样器sampler元件不和其它元件相互作用因此不存在作用域的问题。 逻辑控制器Logic Controller元件只对其子节点中的取样器 和 逻辑控制器作用。 除取样器 和逻辑控制器 元件外其他6类元件如果是某个sampler的子节点则该元件公对其父子节点起作用。 除取样器和逻辑控制器元件外的其他6类元件如果其父节点不是sampler 则其作用域是该元件父节点下的其他所有后代节点包括子节点子节点的子节点等。通过两个栗子例子来理解一下他们的作用域。 A注下图只是为了说明作用域无法正常运行 取样器HTTP请求1 、FTP请求2 、TCP取样器3 逻辑控制器循环控制器 监听器图形结果1、聚合报告2 * HTTP请求1 、FTP请求2 、TCP取样器3 元件没有作用域的概念。 * 循环控制器 元件作用域名是其子节点FTP请求2 、TCP取样器3 。 * 图形结果1 元件的作用域是是FTP请求2 、TCP取样器3。 * 聚合报告2 元作的作用域是HTTP请求1 、FTP请求2 、TCP取样器3 B 注下图只是为了说明作用域无法正常运行 这个例子稍微复杂一些包含的元件较多。先来分分类。 取样器HTTP请求 、FTP请求 、TCP取样器、 JDBC Request 逻辑控制器循环控制器、随机控制器定时器固定定时器、Uniform Random Timer 断言响应断言、XML断言监听器图形结果、聚合报告 根据作用域原则这些元件的作用域分别为 * HTTP请求 、FTP请求 、TCP取样器、 JDBC Request 元件没有作用域名概念 * 循环控制器的作用域为 FTP请求 、TCP取样器和 随机控制器 * 固定定时器作用于HTTP请求 Uniform Random Timer 作用于所有取样器 * 响应断言作用于JDBC Request XML断言作用于FTP请求 、TCP取样和JDBC Request 。 * 图形结果作用于FTP请求 、TCP取样和JDBC Request 聚合报告作用于作用于所有取样器。 其实通过上面的分析并没有你想象的那么复杂我们从各个元件的层次结构就可以判断每个元件的作用域。 Jmeter 中的逻辑控制器Config Elements在其作用范围内的行为与其他元件相比稍有不同。逻辑控制器元件分两大类默认配置HTTP默认请求、FTP默认请求等和 管理HTTP 头管理、HTTP cookie 管理等。 其中默认配置Configuration Defaults元件中设置的值可以在作用域内叠加例如在一个测试计划中添加两个HTTP 默认请求其中第一个默认设置 Server name or IP 为www.google.com 第二个默认设置Path 为/page-not-exist 则在这两个元件作用域内的所有HTTP 默认请求其默认的Server name or IP 和Path 均为Server name or IP 和 /page-not-exist 。你有一个故事我有一个笑话我们一交换两个人都分别拥有了一个故事加一个笑话。 管理Manager类逻辑控制器元件的效果则不能进行叠加。如果两个或两个以上相同的管理类元件作用域有重叠。则在重叠作用域内的取样器元件只会随即受到其中一个的作用这样会导致取样器行为的不确定性。因此在使用管理类逻辑控制器时一定要注意保证相同的管理类元件的作用域不发生重叠。 v jmeter元件的执行顺序 了解了元件有作用域之后来看看元件的执行顺序元件执行顺序的规则很简单在同一作用域名范围内测试计划中的元件按照如下顺序执行。 1配置元件config elements 2前置处理程序Per-processors 3定时器timers 4取样器Sampler 5后置处理程序Post-processors 除非Sampler 得到的返回结果为空。 6断言Assertions除非Sampler 得到的返回结果为空。 7监听器Listeners除非Sampler 得到的返回结果为空。 关于执行顺序有两点需要注意 * 前置处理器、后置处理器和断言等元件功能对取样器作用因此如果在它们的作用域内没有任何取样器则不会被执行。 * 如果在同一作用域范围内有多个同一类型的元件则这些元件按照它们在测试计划中的上下顺序一次执行。 https://www.cnblogs.com/icy88/p/10456619.html http://www.cnblogs.com/yangxia-test/p/3966154.html http://blog.sina.com.cn/s/blog_671c968b0100jduq.html http://www.cnblogs.com/fnng/archive/2012/12/27/2836506.html转载于:https://www.cnblogs.com/jingdenghuakai/p/11131964.html