【软件测试】 性能测试 JMeter脚本开发!

一、JMeter脚本开发实战

实例:查询一个城市的天气预报

使用抓包工具观察请求所产生的请求列表,筛选最核心API。

A、获取城市代码

http://toy1.weather.com.cn/search?cityname=西安

B、获取天气

http://www.weather.com.cn/weather1d/101110101.shtml#search

C、编写JMeter脚本

1、JMeter参数化,用户自定义变量,也可以通过csv Data setConfig引入大量数据。

2、添加HTTP请求,获取城市代码。

通过${var}方式引用之前定义的变量,设定编码为UTF-8,否则结果为乱码。

3、为此次HTTP请求,增加HTTP头信息、响应断言、结果树。

响应断言:当断言失败时,断言结果会指出失败原因。

4、通过正则表达式,提取城市编码。

5、添加HTTP请求,获取具体城市天气预报。

二、场景设计

A、运行场景

  • 运行方式:GUI、命令行
  • 运行架构:本地运行、远程运行

1、GUI运行、本地运行 - 参考上文

2、命令行运行

命令行模式运行JMeter测试脚本能够大大缩减所需要的系统资源。

1).需要设置PATH环境变量把JMeter软件目录囊括进去

JMETER_HOME=D:\JavaDEV\Java\apache-jmeter-5.1.1 
PATH=%JMETER_HOME%\BIN

2).命令行执行

jmeter -n -t "D:\JavaDEV\Java\apache-jmeter-5.1.1\bin\demo\天气预报.jmx"

常用参数:

  • -h,帮助 - 打印帮助信息并退出
  • -n,非GUI模式 - 非GUI模式下运行JMeter
  • -t,测试文件 - 要运行的JMeter测试jmx文件
  • -l,日志文件 - 记录结果的文件
  • -r,远程执行 - 启动远程服务
  • -H,代理主机 - 设置JMeter使用的代理主机IP
  • -P,代理端口 - 设置JMeter使用的代理主机的端口号

3).结果查看

JMeter GUI->添加聚合报告->所有数据写入一个文件,选择刚生成的log文件就可以对执行结果进行直观分析了。

3、远程运行

1).修改设置控制机jmeter.properties文件,假设远程机的地址为192.168.0.10

# Remote Hosts - comma delimited 
remote_hosts=127.0.0.1,192.168.0.10
remote_hosts=localhost:1099,localhost:2010

2).运行远程机的jmeter-server.bat批处理文件

3).在控制机上运行远程按钮

B、性能参数配置

JMeter运行在JVM之上,因此可以根据场景修改JVM配置,具体的JVM参数参考相关总结。

三、JMeter元件库

元件的运行顺序和作用域是JMeter最精髓的所以,也是JMeter优缺点的体现。

A、执行顺序

元件执行顺序,配置元件config elements->前置处理程序Per-processors->定时器timers->取样器sampler->后置处理程序post-processors->断言assertions->监听器listeners

B、元件作用域

  • 配置元件,影响作用域内所有元件
  • 前置处理程序,作用域内每个取样器之前执行
  • 定时器,作用域内每个取样器有效
  • 取样器,无作用域
  • 后置处理程序,作用域内每个取样器之后执行
  • 断言,作用域内

C、线程组

通过「线程组」实现并发,同时去执行相同的一批次任务,每个线程之间都是隔离的,互不影响的。线程的执行过程中,操作的变量,不会影响其他线程的变量值

Delay Thread creation until needed(延迟创建线程直到需要): 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。

Ramp-Up Period:线程启动时间,多少个线程,多长时间启动(秒),每个线程执行多少次循环。

取样器错误:当线程执行取样器失败的时候,要执行的策略选项

  • 继续:忽略错误,继续执行
  • Start Next Thread Loop(启动下一线程循环):忽略错误,线程当前循环终止,执行下一个循环
  • 停止线程:当前线程停止执行,不影响其他线程正常执行
  • 停止测试:整个测试将在当前正在执行的线程执行完毕后停止
  • 立即停止测试:整个测试会立即停止执行,当前正在执行的取样器如果可能会被中断

调度器

If Loop Count is not 1 or Forever, duration will be min(Durationm, Loop Count * iteration duration).

如果不想立即执行执行,可以通过调度器控制测试执行的开始时间和结束时间。

  • 持续时间(秒):控制测试执行的时间
  • 启动延迟(秒):控制测试多久后启动执行

D、汇总报告(summary Report)

  • Label:取样器名称
  • Samples:发送的请求总数
  • Average:平均响应时间
  • Min:最小响应时间
  • Max:最大响应时间
  • Std.Dev.:所有请求响应时间的标准差
  • Error%:出错率(出错的request数/所有的request数)
  • Throughput:吞吐量,每秒/每分钟(具体看单位)处理的request数
  • Received KB/sec:每秒从服务器端接收到的数据量
  • Avg.Bytes:服务端返回给request数据的平均值,可以理解为:服务端返回所有数据/请求数

E、聚合报告(Aggregate Report)

类似汇总报告。

F、HTTP代理服务器

对于一些HTTPS协议的系统需要在启动代理后,安装JMeter/bin下的证书,才能使用代理服务器,如果手机的录制,需要设置手机的代理服务器、端口,并在手机端安装证书。

  • TYPE,默认为空,可选项HttpClient4、Java、空值
    • Java,使用JDK中的net包模拟浏览器
    • HttpClient4,使用Apache HttpClient4模拟浏览器
    • 默认为空值,使用jmeter.properties中jmeter.httpsampler的配置
  • Requests Filtering->Content-Type filter
    • Include,Content-Type白名单,表示哪些Content-Type可以通过
    • Exclude,Content-Type黑名单,表示哪些Content-Type被拒绝
  • Prefix,对每个录制的HTTP请求的前缀命名,默认为空,则录制的请求会按照数字递增的方式进行命名
  • 自动重定向,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面,比如从页面A重定向到页面B,只会记录页面B的信息,页面A的信息称之为过程信息,如果要做关联就不能搞定了。另外自动重定向只针对GET和HEAD请求,不能使用在PUT和POST上
  • 跟随重定向,是否启用跟随重定向,是指发生重定向时,会生成Sampler请求
  • Use KeepAlive,JMeter和目标服务器之间使用Keep-Alive方式进行HTTP通信,默认选中,KeepAlive有一个保持时间,可以在不同的web服务器中设定这个时间
  • 从HTML文件获取所有内含的资源,当该选项被选中时JMeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse并获取HTML中包含的所有资源(图片、Flash等)

G、HTTP请求

  • 参数Parameters - 随着请求一起发送的参数,可以是GET/POST方法
  • 协议 - HTTP、HTTPS、FILE,默认为HTTP
  • 消息体数据Body Data:使用POST时用到
  • 文件上传File Upload - 当需要文件上传时用到,MIME类型可以通过网络抓包工具获取
  • 保存响应为MD5哈希Save response as MD5 hash:选中该项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据;在需要进行数据量非常大的测试时,建议选中该项以减少取样器记录响应数据的开销

H、用户定义的变量

名称、描述。

使用变量的方法:${variableName}

I、Http Cookie管理器

  • 每次清除Cookies - 每次线程组启动时都会清除Cookie
  • Cookie Policy - Cookies策略
    • ignoreCookies - 忽略所有Cookies,用来防止HttpClient接受和发送Cookies

J、Http Header管理器

头信息管理,User-Agent、Content-Type、Accept、Cookie等头部信息。

四、其他元件库

A、定时器

B、逻辑控制器

C、配置元件

D、前置处理器

E、后置处理器

F、断言

G、监听器

五、脚本开发

A、BeanShell

1、BeanShell概念

  • BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法。
  • BeanShell是一种松散类型的脚本语言。
  • BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有脚本语言特性,非常精简的解释器Jar包大小为175k。
  • BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

2、JMeter中常用的Bean Shell

  • 定时器:BeanShell Timer
  • 前置处理器:BeanShell PreProcessor
  • 采样器:BeanShell Sampler
  • 后置处理器:BeanShell PostProcessor
  • 断言:BeanShell断言
  • 监听器:BeanShell Listener

3、BeanShell的用法

JMeter的BeanShell中内置了变量,使用者可以使用内置变量与JMeter进行交互。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/763664.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】Redis学习笔记——第5章 跳跃表

第5章 跳跃表 有序集合,ZSet关键组成部分,时间复杂度媲美平衡树,且实现简单。 5.1 跳跃表的实现 可以简单理解为每个节点会有一些指向后面跨越N个节点的指针,比如说Node1不仅有指向Node2的指针,还可以有Node5的&…

尚硅谷k8s 2

p54-56 k8s核心实战 service服务发现 Service:将一组 Pods 公开为网络服务的抽象方法。 #暴露Deploy,暴露deploy会出现在svc kubectl expose deployment my-dep --port8000 --target-port80#使用标签检索Pod kubectl get pod -l appmy-depapiVersion: v1 kind: Service metad…

使用Python实现钉钉Stream模式服务开发及内部程序通信

1、什么是Stream模式 Stream 模式是钉钉开放平台提供的一种集成方式,它可以监听机器人回调、事件订阅回调和注册卡片回调。使用 Stream 模式接入,钉钉开放平台将通过 Websocket 连接与应用程序通讯,Stream 模式将极大降低接入门槛和资源依赖…

Android- Framework 非Root权限实现修改hosts

一、背景 修改system/etc/hosts,需要具备root权限,而且remount后,才能修改,本文介绍非root状态下修改system/etc/hosts方案。 环境:高通 Android 13 二、方案 非root,system/etc/hosts只有只读权限&…

工业智能网关的功能特点有哪些?工业智能网关在工业企业的应用-天拓四方

随着工业4.0时代的到来,数字化转型已成为工业企业提升竞争力、实现可持续发展的必经之路。在这一过程中,工业智能网关以其强大的连接、数据处理和安全防护能力,成为推动工业数字化转型的关键力量。本文将深入探讨工业智能网关的功能特点、应用…

基于Java中的SSM框架实现大学生就业预测系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现大学生就业预测系统演示 摘要 科技不断飞速发展,人类文明走向一个又一个的高峰。在科技进步的浪潮中,计算机技术得到了巨大的发展,随着技术的完善,生产成本的降低,计算机走进千家万户。计算机…

API-Window对象

学习目标: 掌握Window对象 学习内容: BOM(浏览器对象模型)定时器-延时函数JS执行机制location对象navigation对象history对象 BOM(浏览器对象模型): BOM是浏览器对象模型。 window对象是一个全…

Outlook 2021 LTSC for Mac v16.86.2中文正式版

Outlook 2021是微软公司推出的一款电子邮件、日历、联系人管理器和任务管理器应用程序。它是Microsoft 365套件的一部分,适用于Windows、macOS以及iOS和Android移动设备。Outlook 2021在界面设计、功能性和性能方面进行了多项改进,以帮助用户更有效地管理…

(超详细)数据结构——“队列”的深度解析

目录 前言: 1.队列的概念 2.队列的实现 3.代码实现队列 3.1 队列的初始化 3.2 插入 3.3 删除 3.4 队列的队头,队尾和大小 3.5 判空 3.6 销毁 3.7 测试 前言: 队列与栈都是线性表,它们的结构也非常类似&#…

备份SQL Server数据库并还原到另一台服务器

我可以将SQL Server数据库备份到另一台服务器吗? 有时您可能希望将 SQL数据库从一台服务器复制到另一台服务器,或者将计算机复制到计算机。可能的场景包括测试、检查一致性、从崩溃的机器恢复数据库、在不同的机器上处理同一个项目等。 是的&#xff0c…

DevExpress WinForms磁贴导航面板 TileBar组件,让桌面应用触摸更友好!

界面控件DevExpress WinFormsTileNavPane被设计为位于应用程序窗口的顶部(就像Ribbon一样),可以被认为是Windows桌面应用程序中传统导航元素的触摸友好版本。 P.S:DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力…

使用高斯混合模型识别餐厅热点

使用 GMM 识别加拿大多伦多的直观餐厅集群(附 Python 代码) 聚类算法(例如 GMM)是一种有用的工具,可帮助识别数据中的模式。它们使我们能够识别数据集中的子组,从而提高你的理解或增强预测模型。在本文中&a…

LVM核心概念

1. LVM简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。 优点: 可以灵活分配…

postgresql命令行基本操作指令

文章目录 前言一、psql下载安装二、未配置环境变量连接方式1.可视化工具2. 命令行操作连接到postgreSQL 三、配置环境变量四、常用操作指令1. 连接数据库2. 查看数据库3. 创建数据库4. 切换数据库5. 创建数据库表结构6. 查看表结构7. 查看所有的表8. 插入数据9. 查看数据10. 更…

YOLOv8改进 | 主干网络 | C2f融合动态卷积模块ODConv

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、…

Open3D 点云CPD算法配准(粗配准)

目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 一、概述 在Open3D中,CPD(Coherent Point Drift,一致性点漂移)算法是一种经典的点云配准方法,适用于无序点云的非…

Top 5 免费 PDF 转 Word 转换工具

PDF 是可移植文档格式的缩写,是一种文件格式,用于独立于软件、硬件或操作系统可靠地呈现和交换文档。PDF 不是为编辑而设计的,因此如果您想更改某些内容,可能需要将 PDF 转换为 Word/Doc 转换器。 Top 5 免费 PDF 转 Word 转换工具…

OFDM关键技术——ICI消除技术

ICI消除算法可以分为以下几类: 1、OFDM符号长度和载波间隔的最优选择,较短的符号周期更有利于降低ICI 2、OFDM基信号的最佳选择,选择频域衰减更快的OFDM基带脉冲 3、自干扰消除技术,将信息调制到一组子载波上 4、频域均衡器&a…

电影交流平台小程序的设计

管理员账户功能包括:系统首页,个人中心,电影类型管理,留言反馈管理,电影中心管理,系统管理 微信端账号功能包括:系统首页,电影中心,留言反馈 开发系统:Window…

Rust Eq 和 PartialEq

Eq 和 PartialEq 在 Rust 中&#xff0c;想要重载操作符&#xff0c;你就需要实现对应的特征。 例如 <、<、> 和 > 需要实现 PartialOrd 特征: use std::fmt::Display;struct Pair<T> {x: T,y: T, }impl<T> Pair<T> {fn new(x: T, y: T) ->…