性能自动化测试之Jmeter性能测试(一)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

一、相关术语

1.JMeter 是做什么的

jmeter可用于测试软件的性能,同时也可以用于测试软件接口。

2.线程组

线程数:虚拟用户数

3.Sampler 取样器

  • 用来模拟用户操作,向服务器(被测系统)发出请求。
  • http 请求
    ✔     发送 http 请求
  • 跟随重定向
    ✔     会沿用之前的 sessionid。
  • Debug Sampler
    ✔     用于显示正则表达式、参数等的结果。
  • Beanshell Sampler
    ✔     于输出参数值。

4.断言

  • 用来验证结果是否正确,相当于检查点。
    ✔     常用响应断言。

5.前置处理器

✔     请求发送前可能会做一些环境或者参数的准备工作,比如在对数据库进行操作前需要先建立一个数据库连接。

6.后置处理器

  • 一般放在取样器之后,用来处理服务器的返回结果。
  • 正则表达式处理器
    ✔     用于解决关联问题;
    ✔     要放在请求以下。

7.配置元件

  • CSV Data Set Config(CSV 数据集配置)
    ✔     用于参数化。
  • http cookie 管理器
    ✔     录制之前添加,用于解决 sessionid 存储于 cookie 中的情况。
  • 用户自定义变量

8.逻辑控制器

  • 事务控制器
    ✔     用于添加事务。
  • 循环控制器
    ✔     用于设置迭代次数。

9.定时器

  • Synchronizing Timer(同步计时器)
    ✔     用于设置集合点。
  • 固定定时器、Uniform Random Timer
    ✔     可用于设置思考时间,需要每一次思考时都加此定时器,不常用。
  • 高斯随机定时器
    ✔     产生服从正态分布的随机时间间隔,一般用于模拟思考时间,需要每一次思考时都加此定时器,不常用。

10.监听器

  • 用于对测试进行监控,查看运行结果,常用察看结果树。

二、搭建 Jmeter 环境

  • 控制机上安装 JDK 并配置环境变量(不能仅使用 JRE,负载机可以)
  • 复制 jmeter 文件夹到计算机
  • 安装 badboy
    ✔     与 jmeter 无关。
    ✔     用于录制脚本。
    ✔     常用于导出脚本到 jmeter。

1.安装JDK

  • 首先博主准备windows 7纯净版操作系统中进行演示,加载Jmeter环境所需镜像
    在这里插入图片描述
  • 安装JDK
    在这里插入图片描述
  • 安装完成
    在这里插入图片描述

2.配置Java环境

说明: 博主这里进行两种配置(可自我定位使用哪一种)

2.1 第一种配置(系统变量)

  • 在系统变量上新建 JAVA_HOME 变量,路径值选择你的JDK安装目录
    在这里插入图片描述
  • 点击系统变量寻找 Path变量,编辑%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原来Path的变量值末尾有没有; 如果没有则先输入; 再输入上面的代码)
    在这里插入图片描述
  • 新建CLASSPATH系统变量,变量值填写为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
    在这里插入图片描述
  • 完成后,在cmd输入以下命令如果出现如下显示,则表示java环境配置成功
    在这里插入图片描述

2.2 第二种配置(用户变量)

  • 首先删除上一步在系统变量中配置的Path和CLASSPATH值,选择新建用户变量Path,将JDK安装路径下的bin目录路径设置为变量值C:\Program Files (x86)\Java\jdk1.8.0_121\bin;
    在这里插入图片描述
  • 新建ClassPath用户变量,变量值为JDK目录下的lib目录下的tools.jar值即C:\Program Files (x86)\Java\jdk1.8.0_121\lib\tools.jar;
    在这里插入图片描述
  • 检验配置也是没有问题的
    在这里插入图片描述
  • 还有一种测试,则是直接创建一个java文件,编写打印hello代码,然后进行编译再打印
    在这里插入图片描述

3.拷贝Jmeter安装Badboy

  • 将镜像文件中的Jmeter程序拷贝到C盘中
    在这里插入图片描述
  • 安装Badboy
    在这里插入图片描述
    在这里插入图片描述
  • 最后将Badboy和Jmeter发送快捷方式到桌面,方便以后使用
    在这里插入图片描述

4.安装被测软件webtours

  • 首先安装ActivePerl,也就是perl脚本解释器
    在这里插入图片描述
  • 安装完成
    在这里插入图片描述
  • 将webtours网站拷贝到C盘目录下,并发送服务器快捷方式到桌面
    在这里插入图片描述
  • 测试webtours网站正常访问
    在这里插入图片描述
  • 博主注册一个用户,并查看用户数据
    在这里插入图片描述

三、录制脚本

1.badboy 录制脚本

1.1 脚本录制

  • 输入 url 地址后,单击绿色箭头
    ✔     红色原点表示“开始录制”,默认已选中;
    ✔     黑色四方块:停止录制,需要手工停止。
    在这里插入图片描述
  • 输入完网站地址后,点击绿色箭头或回车,则进入网站,那么就可以操作起来,因为默认就在录制,但是该录制只会录制与数据交互的,博主这里先录制一个注册
    在这里插入图片描述
  • 录制完成,点击停止录制
    在这里插入图片描述

1.2 badboy回放脚本

  • 回放脚本
    ✔     右击 step1→Play All,或使用工具栏按钮。

  • 首先先删除录制时,注册的cdtaogang1用户,然后进行回放
    在这里插入图片描述

  • 用户cdtaogang1注册成功
    在这里插入图片描述

1.3 脚本导出

  • 将脚本导出为.jmx 格式
    ✔     File→Export to Jmeter
    在这里插入图片描述
    在这里插入图片描述
  • 说明一点,在badboy上点击保存,则是保存为badboy的脚本
    在这里插入图片描述

1.4 Jmeter导入jmx脚本

  • jmeter 导入 jmx 脚本
    ✔     打开 jmeter
           ★     \apache-jmeter-3.0\bin\jmeter.bat
    ✔     文件→打开
    在这里插入图片描述
  • 展开线程组,就能看到我们在badboy中录制的脚本数据了
    在这里插入图片描述

1.5 Jmeter回放脚本

  • jmeter 回放脚本
    ✔     右击 ThreadGroup 下的 Step1→添加→监听器→察看结果树
    在这里插入图片描述
    ✔     单击“察看结果树”,单击工具栏中的绿色播放图标则是执行脚本(代码)
    在这里插入图片描述
    ✔     查看图形方式的回放结果
           ★     单击“察看结果树”→选择下拉列表中的“HTML”→选中某个 url“→点击“响应数据”
    在这里插入图片描述
  • 如果想要查看HTML页面,则进行选择即可
    在这里插入图片描述
  • 删除cdtaogang1用户数据,然后清空察看结果树,不然再次跑脚本则会接着在当前脚本下写入脚本的
    在这里插入图片描述
  • 清除过后,再次运行
    在这里插入图片描述
  • 显示成功
    在这里插入图片描述

2.jmeter 代理录制脚本

2.1 脚本录制

  • 为计算机设置 IP
    在这里插入图片描述
  • 在浏览器中设置代理服务器
    ✔     打开浏览器→工具→Internet 选项→连接→局域网设置→勾选"为 LAN 设置代理服务器",地址输入 Jmeter 的 IP,端口 8888(jmeter 默认)
    在这里插入图片描述
  • 添加线程组到测试计划
    ✔     添加"配置元件"→http cookie 管理器,否则影响关联效果
    在这里插入图片描述
  • 在工作台下添加"非测试元件"→HTTP 代理服务器
    ✔     目标控制器:测试计划→线程组
    ✔     分组:不对样本分组
    在这里插入图片描述
  • 启动,操作软件后开始录制
    ✔     需要使用真实 IP,不能使用 localhost
    在这里插入图片描述
  • 点击启动后,直接打开ie浏览器,输入http://192.168.88.207:1080/webtours进行注册
    在这里插入图片描述
  • 录制完成后,停止
    在这里插入图片描述

2.2 脚本回放

  • 首先添加察看结果数
    在这里插入图片描述
  • 删除录制脚本时注册成功的cdtaogang1用户数据,点击回放
    在这里插入图片描述
  • 脚本执行成功
    在这里插入图片描述

3.自己编写脚本

  • 添加HTTP请求
    在这里插入图片描述
  • 配置参数
    在这里插入图片描述
  • 添加监听器,运行后,察看结果能正常访问说明配置无误
    在这里插入图片描述
  • 接下来还需要继续添加HTTP请求,因为webtours页面由如下三个框架组成,分别为三个不同的地址
    在这里插入图片描述
  • 右击查看网页源码,可以查看到组成页面的url地址
    在这里插入图片描述
  • 在添加HTTP请求之前,先将之前的HTTP请求命名为主页index
    在这里插入图片描述
  • 然后添加header页面、nav页面以及home页面
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 清空再运行察看结果树,查看添加的页面,是否能够正常访问
    在这里插入图片描述

四、增强 Jmeter 脚本

1.添加断言

  • 【例 1】检查注册是否成功
    ✔     先根据“结果树”中的“HTML”中的“响应数据”,找到需要检查的网页中的文本
    ✔     复制上述内容,根据“结果树”中的“Text”中的“响应数据”,确定最终确定要检查的文本(可能含有标记)
    ✔     在线程组下找到需要检查的 url,右击“添加”→断言→响应断言
           ★     要测试的响应字段:响应文本
           ★     模式匹配规则:包括
           ★     要测试的模式:添加
                   ■     预期结果如“Thank you, <b>zhsan1”
           ★     注意
                   ■     找不到会报错,找到无反应

  • 首先打开之前保存到桌面的badboy转换的jmeter注册脚本
    在这里插入图片描述

  • 展开Step1,将以下的HTTP请求名称前面加上数字标识,方便查看(在Jmeter中记得随时随地的进行保存)
    在这里插入图片描述

  • 添加监听察看结果树,删除cdtaogang1用户数据,运行查看结果注册用户成功
    在这里插入图片描述

  • 因要对打开网站、点击注册链接、提交注册数据添加断言,所以这里博主对名称进行命名
    在这里插入图片描述

  • 删除cdtaogang1用户数据,清除结果,重新跑一遍
    在这里插入图片描述

  • 添加检查点这里跟在前面的loadrunner中不一样,需要切换到text筛选条件,根据返回的响应数据中使用Ctrl+C进行复制,如果是html筛选条件查看的响应数据显示为页面,如果是出现html语言如<b>则不会显示在页面中
    在这里插入图片描述

  • 右击打开网站,添加响应断言
    在这里插入图片描述

  • 断言配置如下
    在这里插入图片描述

  • 右击打开注册链接,添加响应断言
    在这里插入图片描述

  • 右击提交注册数据,添加响应断言
    在这里插入图片描述

  • 接下来删除cdtaogang1用户,清空结果,运行后全部通过,即表示断言成功
    在这里插入图片描述

  • 再运行一遍,则会在提交注册数据显示断言失败
    在这里插入图片描述

2.事务

  • 首先将Step1 下的数据全选鼠标拖动到线程组下,然后删除Step1
    在这里插入图片描述
    在这里插入图片描述
  • 右击线程组→添加→逻辑控制器→事务控制器,添加以下三个事务
    在这里插入图片描述
  • 拖动事务位置,将 url 拖动到合适的事务中
    在这里插入图片描述
  • 拖动完成如下
    在这里插入图片描述
  • 运行后,事务全部通过
    在这里插入图片描述

3.参数化

  • 配置元件→CSV Data Set Config
    ✔     Filename:参数文件名
           ★     可用相对或绝对路径,相对路径须在…\jmeter 安装位置\bin 中;
           ★     当前目录下使用./;参数文件中不能使用列名。
    ✔     File encoding:文件编码格式
           ★     常用且建议 UTF-8
    ✔     Variable Names(comma-delimited)
           ★     以英文逗号间隔的列名,与数据的间隔符可以不一致
    ✔     Delimiter(use ‘\t’ for tab)
           ★     指定数据间隔符,Tab 用’\t’(不加引号),默认逗号
    ✔     Allow quota data
           ★     表示数据中是否有分隔符
    ✔     Recycle on eof
           ★     参数不够用时,是否从头开始重新循环
  • 【例 1】注册 200 个账号,客户名使用用户名。
    ✔     手动编辑参数文件,写入参数,但不要写列名
    在这里插入图片描述
    ✔     找到需要参数化的输入数据的 url
           ★     在前面的位置,右击“添加”→配置元件→CSV Data Set Config
           ★     将参数的“值”改为“${参数名}”
                   ■     使用参数时不加引号
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ✔     负载测试
           ★     单击“Thread Group”,设置“线程数”为并发人数
                   ■     一个线程对应一个模拟用户
           ★     Ramp-Up Period(in second)
                   ■     线程启动开始运行的时间间隔,单位是秒,即所有线程在多长时间内开始运行。
                   ■     如设置线程数为 200,数据为 75 秒,相当于 15s 加载 40 个用户。
    在这里插入图片描述
  • 删除cdtaogang1用户数据,清空结果树
    在这里插入图片描述
  • 运行完成
    在这里插入图片描述
  • 200个用户注册成功
    在这里插入图片描述

4.关联

  • 后置处理器→正则表达式提取器
    ✔     引用名称
           ★     根据指定规则找到的字符串存放到此名表示的参数中。
    ✔     正则表达式
           ★     一个用( )表示一个模式;left(?)right:?表示遇到行中的第一个 right 就作为右边界,然后不断向后寻找。
    ✔     模板
           ★     $1$指第一个模板(模式),$2$第二个…,此项必填;
           ★     允许$1$ $2$ 的写法。
    ✔     匹配数字
           ★     找到的第某项,1 为第 1 项,-1 为所有项,0 是随机
                   ■     参数名_matchNr(区分大小写)中存着找到几项,必写-1
                   ■     参数名_gi 表示找到的第 i 项,i 从 1 开始,g0 表示包含左右边界在内的整个字符串
                           ●     g 是关键字
                   ■     有多个模板时,参数名_i_gj 表示找到的第 i 行第 j 列数据
  • 正则表达式案例
    ✔     网页内容
    在这里插入图片描述
  • 将test.html文件拷贝到xitami服务器目录下,使其在webtours网站地址下可以进行访问
    在这里插入图片描述
    在这里插入图片描述
  • 将之前的项目保存后关闭,新建线程组配置HTTP请求
    在这里插入图片描述
  • 运行后,确保能正常访问test.html页面
    在这里插入图片描述
  • 然后添加正则表达式提取器
    在这里插入图片描述
    ✔     正则表达式:<tr><td>hello</td><td>(.*)</td><td>(.*)</td>
    在这里插入图片描述
  • 【例 1】模板:$1$,匹配数字:1
    在这里插入图片描述
  • 添加Debug Sampler获取匹配出的打印结果
    在这里插入图片描述
  • 运行结果数,查看Debug Sampler显示出匹配的cdtaogang
    在这里插入图片描述
  • 【例 2】模板:$1$,匹配数字:2
    在这里插入图片描述
  • 运行后匹配出zhnagsan没有问题
    在这里插入图片描述
  • 【例 3】模板:$2$,匹配数字:1
    在这里插入图片描述
  • 运行查看结果
    在这里插入图片描述
  • 【例 4】模板:$2$,匹配数字:2
    在这里插入图片描述
    在这里插入图片描述
  • 【例 5】模板:$1$ $2$,匹配数字:-1
    在这里插入图片描述
  • 说明一点,因为在上一步中模板$1$和$2$之间博主用的,隔开,所以在下面匹配结果中显示的为cdtaogang,123以及zhangsan,6789
    在这里插入图片描述
  • 【例 6】?的用法
    ✔     正则表达式:<td>(.*)</td>与<td>(.*?)</td>
    ✔     查看正则表达式的结果
  • 首先使用<td>(.*)</td>正则
    在这里插入图片描述
  • 运行结果发现,并没有到第一个</td>就结束,而是找到最后没有了才结束
    在这里插入图片描述
  • 修改正则为<td>(.*?)</td>,运行结果这才是想要匹配出的数据,加了?则表示遇到</td>则取,而不是只取到最后一个</td>
    在这里插入图片描述
    在这里插入图片描述
  • 在线程组中添加 BeanShell Sampler,移到正则表达式提取器之后,写入下面的代码之一
    在这里插入图片描述
    ✔     ${参数名};或"字符串${参数名}";
           ★     结果出现在请求中,最后一个数据时不时出现在响应中
           ★     如果省略分号,则数据都不出现在响应中,此外还会报错,但是数据还会正常显示
    在这里插入图片描述
    在这里插入图片描述
    ✔     ResponseMessage=“字符串${参数名}”;
           ★     结果出现在响应中,最后一个数据出现在响应中
    在这里插入图片描述
    在这里插入图片描述
    ✔     log.error(数据);
           ★     向日志中写数据
           ★     点击“警告”图标可以清除日志
    在这里插入图片描述
    在这里插入图片描述
    ✔     log.info(数据);
           ★     向日志中写数据
    在这里插入图片描述
    在这里插入图片描述
发布了143 篇原创文章 · 获赞 306 · 访问量 400万+

猜你喜欢

转载自blog.csdn.net/qq_41782425/article/details/104209200