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简介:

下载:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip

Jmeter组成:

  • 取样器

    进行脚本逻辑控制(控制业务流程。什么样的请求,什么时候发出请求等)

  • 线程组

    场景设置(多少线程。多少用户访问,访问多少次等)

  • 监视器

    监控我们的脚本运行,取得性能指标(电量等)

任何一款性能测试工具都应该是由这三部分组成

Jmeter操作:

  1. 添加线程组(Thread Group):[Test Plan]-[Add]-[Threads(Users)]-[Thread Group]

    Thread Properties(线程属性)

    • Numbers of Threads(users):控制多少用户进行并发
  • Ramp-UpPeriod(in seconds):在多少秒之内进行并发。加压策略
    • Loop Count:循环次数
  1. 添加取样器(Sampler):[Thread Group]-[Add]-[Sampler]-[HTTP Request]

  2. 添加监听器(Listener)

    • 查看结果树(View Results Tree):[Thread Group]-[Add]-[Listener]-[View Results Tree]

      【查看结果树(View Results Tree)】辅助进行脚本调试

    • 聚合报告(Aggregate Report):[Thread Group]-[Add]-[Listener]-[Aggregate Report]

      统计访问了多少次,访问时间,错误率

  3. 逻辑控制器(Logic Controller)

  4. 配置元件(Congif Element)

    如果在压测过程中出现no cookies信息,就添加HTTP Header Manager、HTTP Cookie Manager

  5. 定时器(Timer)

  6. 前置处理器(Pre Processors)

    在做取样器(Sampler)之前需要做些什么操作

  7. 后置处理器(Post Processors)

  8. 断言(Assertions)

    在后置处理器(Post Processors)之后判断返回是否和期望值一致。

    在做多并发处理时,不建议使用JMeter进行断言。在访问请求时自定义了变量,由于多个请求访问速度的影响,共享的一个变量就有可能出现数据的不准确。

  9. 测试碎片(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介绍与演示

  1. 地址栏输入地址
  2. 视图区进行操作
  3. 脚本区自动记录生成相应操作
  4. 点击工具栏小红点完成录制

2-2 使用badboy进行jmeter脚本录制 (07:30)

BugFree:Bug管理系统。目前已由禅道代替。

Badboy进行JMeter脚本录制:

  1. 地址栏输入地址
  2. 视图区进行录制步骤操作
  3. 脚本区自动记录生成相应操作
  4. 点击工具栏小红点完成录制
  5. 点击File=>Export to JMeter=>保存*.jmx文件

.jmx后缀名就是JMeter可执行文件

2-3 Jmeter运行badboy脚本 (17:57)

  1. 点击File=>Open(command+O)=>选择*.jmx文件=>Open
  2. Thread Group出现了相应步骤
  3. Thread Group=>Add=>Listener=>View Results Tree
  4. 点击Start(工具栏上的绿色三角形)回放所有步骤

【查看结果树】中的请求为绿色并不代表请求成功,而只是代表网络是否联通。通过HTML模式查看相应结果发现所有的返回页面都是登录界面

Redirect Automatically(自动重定向)

Follow Redirects(跟重定向)

Use KeepAlive(保持长链接)

Use multipart/form-data

Browser-compatible headers

第三方录制下来的脚本可能存在的出错点:

  1. 检查是否登录系统

  2. 录制产生的URL与实际不同

    根据网页路径修改

  3. 选择为[跟踪重定向]

  4. 录制后的脚本参数出现乱码

    修改字符编码格式[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代理服务器和国外翻墙代理服务器的工作原理差不多

  • 浏览器设置

    局域网设置的端口号需要与代理服务器的端口号保持一致。然后在浏览器的操作就会被代理服务器捕捉到,从而形成系统测试的脚本。

  1. 创建HTTP代理服务器:Test Plan=>Add=>Non-Test Elements=>HTTP(S) Test Script Recorder

  2. 在[Global Settings]-[Port]设置端口

  3. 在[Test Plan Creation]-[Test Plan content]-[Target Controller]选择。必须设置

  4. 浏览器设置:

    • IE浏览器:[工具]-[Internet选项]-[连接]-[局域网设置]-[代理服务器]-[地址+端口]
    • Chrome:[工具]-[设置]-[高级]-[打开代理设置]-[网页代理(HTTP)/安全网页代理(HTTPS)]–[地址+端口]

    地址、端口为JMeter代理服务器的相应设置。

  5. 在浏览器进行相应业务操作,JMeter会自动记录操作及资源文件

  6. 使用包含模式、排除模式,保留或过滤不需要的资源文件。

    [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)

文件参数化方式:

  1. 函数助手
  2. 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)}

注:

  1. 文件可以是*.txt,但必须以,隔开。
  2. 列号从0开始
  3. 更改线程数(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]

  1. Variable Names(comma-delimited):设置变量名称,title,build

    • 引用声明的变量:${title}${build}
  2. Delimiter:分隔符

  3. Allow quoted data:是否允许带引号

  4. Recycle on EOF:遇到文件结束符再次循环

  5. Stop thread on EOF:遇到文件结束符停止线程

  6. 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]

  1. 引用名称(Name of created variable):bugId

  2. 正则表达式(Regular Expression):左边界(.+?)右边界

    .匹配任意字符(除了斜杠),+一次或多次,?0次或多次

  3. 模版(Template):$1$。指的是匹配第一个结果

  4. 匹配数字(0代表随机)(Match No.(0 for Random)):0

  5. 引用上文变量名称:${bugId}

注:在调试测试脚本时,多注意编码。

:star: 解决中文乱码

  1. [Content encoding]设置为UTF-8,同时勾选参数后的[编码?]

  2. vim ~/bin/jmeter.properties

    sampleresult.default.encoding=UTF-8

loadrunner与JMeter关联的不同之处:

  1. 在loadrunner中,关联函数是写在要获取变量值的页面的前面;

    在JMeter中,关联函数是写在要获取变量值的页面的后面。

  2. 在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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏