735-JMeter性能测试入门篇
https://www.imooc.com/learn/735
简介:本课程通过通俗易懂的讲法,非常容易理解的方式去讲解如何使用jmeter进行web应用的性能测试。
第1章 jmeter基本介绍
了解Jmeter及本课程的主要内容,知道如何下载到Jmeter;了解Jmeter的组成并了解性能测试工具的组成;了解jmeter的目录及为什么使用jmeter
1-1 Jmeter整体简介 (20:20)
软件架构:
BS:browser-server
CS:client-server
Jmeter简介:
需要Java环境作为支撑。
下载:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip
Jmeter组成:
取样器
进行脚本逻辑控制(控制业务流程。什么样的请求,什么时候发出请求等)
线程组
场景设置(多少线程。多少用户访问,访问多少次等)
监视器
监控我们的脚本运行,取得性能指标(电量等)
任何一款性能测试工具都应该是由这三部分组成
Jmeter操作:
添加线程组(Thread Group):[Test Plan]-[Add]-[Threads(Users)]-[Thread Group]
Thread Properties(线程属性)
- Numbers of Threads(users):控制多少用户进行并发
- Ramp-UpPeriod(in seconds):在多少秒之内进行并发。加压策略
- Loop Count:循环次数
添加取样器(Sampler):[Thread Group]-[Add]-[Sampler]-[HTTP Request]
添加监听器(Listener)
查看结果树(View Results Tree):[Thread Group]-[Add]-[Listener]-[View Results Tree]
【查看结果树(View Results Tree)】辅助进行脚本调试
聚合报告(Aggregate Report):[Thread Group]-[Add]-[Listener]-[Aggregate Report]
统计访问了多少次,访问时间,错误率
逻辑控制器(Logic Controller)
配置元件(Congif Element)
如果在压测过程中出现no cookies信息,就添加HTTP Header Manager、HTTP Cookie Manager
定时器(Timer)
前置处理器(Pre Processors)
在做取样器(Sampler)之前需要做些什么操作
后置处理器(Post Processors)
断言(Assertions)
在后置处理器(Post Processors)之后判断返回是否和期望值一致。
在做多并发处理时,不建议使用JMeter进行断言。在访问请求时自定义了变量,由于多个请求访问速度的影响,共享的一个变量就有可能出现数据的不准确。
测试碎片(Test Fragment)
第2章 使用badboy录制jmeter脚本
熟悉jmeter的录制方式及如何思考去制作一个脚本;了解badboy的组成;学会使用badboy录制脚本;能够使用jmeter将badboy脚本调试运行成功
2-1 Jmeter录制方式和思路及badboy简介 (10:10)
JMeter脚本的两种录制方式:
使用badboy进行录制
badboy(也是一款软件)能够进行浏览器的操作行为的录制,并且能够导出JMeter脚本。
使用代理方式进行录制
代理方式是指不借助第三方软件,然后进行浏览器中的一些设置。监听端口号捕捉在浏览器上的网络请求,然后进行录制
类似于抓包工具Fiddler。抓包工具:Fiddler、Charles、Wireshark
脚本录制的流程与思路
业务流程=>录制工具=>脚本制作=>性能测试
Badboy:http://www.badboy.com.au
注:目前(2019-09-14)访问不了官网,Badboy似乎也没有Mac版。
Badboy组成:
工具区、地址栏、脚本区、视图区
Badboy介绍与演示
- 地址栏输入地址
- 视图区进行操作
- 脚本区自动记录生成相应操作
- 点击工具栏小红点完成录制
2-2 使用badboy进行jmeter脚本录制 (07:30)
BugFree:Bug管理系统。目前已由禅道代替。
Badboy进行JMeter脚本录制:
- 地址栏输入地址
- 视图区进行录制步骤操作
- 脚本区自动记录生成相应操作
- 点击工具栏小红点完成录制
- 点击File=>Export to JMeter=>保存*.jmx文件
.jmx后缀名就是JMeter可执行文件
2-3 Jmeter运行badboy脚本 (17:57)
- 点击File=>Open(command+O)=>选择*.jmx文件=>Open
- Thread Group出现了相应步骤
- Thread Group=>Add=>Listener=>View Results Tree
- 点击Start(工具栏上的绿色三角形)回放所有步骤
【查看结果树】中的请求为绿色并不代表请求成功,而只是代表网络是否联通。通过HTML模式查看相应结果发现所有的返回页面都是登录界面
Redirect Automatically(自动重定向)
Follow Redirects(跟重定向)
Use KeepAlive(保持长链接)
Use multipart/form-data
Browser-compatible headers
第三方录制下来的脚本可能存在的出错点:
检查是否登录系统
录制产生的URL与实际不同
根据网页路径修改
选择为[跟踪重定向]
录制后的脚本参数出现乱码
修改字符编码格式[Content encoding]为UTF8
自动重定向与跟随重定向的区别:
自动重定向:HttpClient接收到请求后,如果请求中包含重定向请求,HttpClient是可以自动跳转的,但是只针对GET和Head请求。勾选此项则“跟随重定向”失效。
自动重定向可以自动转向到最终目标页面,但是JMeter是不记录重定向过程内容的,比如在[查看结果树]中是无法找到重定向过程内容的。如果此时你想做关联,那就比较遗憾了,你无法关联到。
例如:A重定向到B,此时只记录B的内容不记录A的内容,A的响应内容我们暂时且叫过程内容
跟随重定向:Http Request取样器的默认选项,但响应Code是3XX时(比如301是重定向),自动跳转至目标地址。与自动重定向不同,JMeter会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,所以你可以对响应的内容做关联。
比如你要测试登录,你把POST请求改为跟随重定向就可以了
第3章 jmeter代理录制及运行
了解jmeter代理录制的设置方式;能够把代理录制设置完成;可以使用代理录制方式录制完成脚本;能够使用jmeter将代理录制的脚本调试运行成功
3-1 JMeter性能测试入门篇-代理录制及脚本运行 (23:35)
JMeter代理录制:
HTTP请求默认值
输入被测试的URL地址(域名/IP+端口号)
HTTP代理服务器
HTTP代理服务器和国外翻墙代理服务器的工作原理差不多
浏览器设置
局域网设置的端口号需要与代理服务器的端口号保持一致。然后在浏览器的操作就会被代理服务器捕捉到,从而形成系统测试的脚本。
创建HTTP代理服务器:Test Plan=>Add=>Non-Test Elements=>HTTP(S) Test Script Recorder
在[Global Settings]-[Port]设置端口
在[Test Plan Creation]-[Test Plan content]-[Target Controller]选择。必须设置。
浏览器设置:
- IE浏览器:[工具]-[Internet选项]-[连接]-[局域网设置]-[代理服务器]-[地址+端口]
- Chrome:[工具]-[设置]-[高级]-[打开代理设置]-[网页代理(HTTP)/安全网页代理(HTTPS)]–[地址+端口]
地址、端口为JMeter代理服务器的相应设置。
在浏览器进行相应业务操作,JMeter会自动记录操作及资源文件
使用包含模式、排除模式,保留或过滤不需要的资源文件。
[Requests Filtering]-[URL Patterns to Exclude]-[Add suggested excludes],或者点击[Add]自定义正则匹配
Web应用程序需添加HTTP Cookie Manager(HTTP Cookie管理器)和HTTP Cache Manager
[Test Plan]-[Add]-[Config Element]-[HTTP Cookie Manager]
[Test Plan]-[Add]-[Config Element]-[HTTP Cache Manager]
注:必须添加【查看结果树(View Results Tree)】和【聚合报告(Aggregate Report)】通过直观数据判断脚本是否出现问题。
第4章 jmeter脚本制作
能够自定义变量,实现值的统一化管理;可以自主使用函数助手进行参数化;可以使用csv文件进行参数化配置,达成参数化的目的
4-1 JMeter性能测试入门篇-用户自定义变量 (07:33)
用户自定义变量作用:
把IP地址、端口号、应用上下文等字段用一个变量去代替,测试环境变化时改变一下变量值即可。
添加用户变量:[Thread Group]-[Add]-[Config Element]-[User Defined Variables]
使用用户变量:${variable_name}
4-2 JMeter性能测试入门篇-CsvReader函数参数化 (07:11)
文件参数化方式:
- 函数助手
- csv data set config
函数助手:
[Tools]-[Function Helper Dialog(Shift+Command+F1)]-[Choose a function]-[_CSVRead]-[填写文件名称+列号]-[Generate & Copy to clipboard]-[粘贴到对应属性值框]
如:${_CSVRead(D:\csv.txt,column_idx)}
注:
- 文件可以是*.txt,但必须以
,
隔开。 - 列号从
0
开始 - 更改线程数(Number of Threads),_CSVRead会自动遍历(行号递增)csv.txt
4-3 JMeter性能测试入门篇-CsvDataSetConfig参数化 (09:03)
csv data set config:
[Thread Group]-[Add]-[Config Element]-[CSV Data Set Config]
Variable Names(comma-delimited):设置变量名称,
title,build
- 引用声明的变量:
${title}
、${build}
- 引用声明的变量:
Delimiter:分隔符
Allow quoted data:是否允许带引号
Recycle on EOF:遇到文件结束符再次循环
Stop thread on EOF:遇到文件结束符停止线程
Sharing mode:线程共享模式
- All threads:测试计划中所有线程,假如说有线程1到线程n (n>1),线程1取了一次值后,线程2取值时,取到的是csv文件中的下一行,即与线程1取的不是同一行。
- Current thread group:当前线程组,假设有线程组A、线程组B,A组内有线程A1到线程An,线程组B内有线程B1到线程Bn。取之情况是:线程A1取到了第1行,线程A2取第2行,现在B1取第1行,线程B2取第2行。
- Current thread:当前线程。假设测试计划内有线程1到线程n (n>1),则线程1取了第1行,线程2也取第1行。
第5章 关联的使用及总结
通过关联的学习,可以准确的进行关联,排查脚本错误,完成性能测试脚本,学到这里,可以完成整个脚本的制作,独立进行基本的性能测试
5-1 JMeter性能测试入门篇-关联的使用及总结 (26:40)
关联:
当上文中的有一些变量的值在下文中被使用。
添加正则表达式提取器:[HTTP Request]-[Add]-[Post Processors]-[Regular Expression Extractor]
引用名称(Name of created variable):
bugId
正则表达式(Regular Expression):
左边界(.+?)右边界
.
匹配任意字符(除了斜杠),+
一次或多次,?
0次或多次模版(Template):
$1$
。指的是匹配第一个结果匹配数字(0代表随机)(Match No.(0 for Random)):
0
引用上文变量名称:${bugId}
注:在调试测试脚本时,多注意编码。
:star: 解决中文乱码:
[Content encoding]设置为UTF-8,同时勾选参数后的[编码?]
vim ~/bin/jmeter.properties
sampleresult.default.encoding=UTF-8
loadrunner与JMeter关联的不同之处:
在loadrunner中,关联函数是写在要获取变量值的页面的前面;
在JMeter中,关联函数是写在要获取变量值的页面的后面。
在loadrunner中,关联函数是注册函数;
在JMeter中,使用正则表达式提取器进行关联
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com
文章标题:735-JMeter性能测试入门篇
文章字数:3k
本文作者:神秘的小岛岛
发布时间:2019-09-28, 23:42:43
最后更新:2019-11-05, 16:33:08
原始链接:https://www.tuyrk.cn/imooc/735-JMeter/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。