JMETER工具:以录制手机app为例
JMETER工具:以录制手机app为例子
- JMETER安装和环境配置
- pc需要安装jdk,并进行jdk的环境配置,安装好jdk并配置好后,通过命令行输入java –version出现以下界面就表示安装成功:

(对应的jdk版本不可太低,一般jmeter3.0的对应jdk1.7,jmeter4.0对应jdk1.8以上,否者启用jmeter也会报错。)
- 拿到jmeter压缩包后解压,解压之后记住解压的位置,然后配置jmeter环境变量:
- 计算机---->右键,属性---->高级系统设置---->高级---->环境变量
- 新建系统变量
变量名:JMETER_HOME
变量值:JMETER的解压地址,我的地址为 D:\project\apache-jmeter-4.0
3)编辑系统变量CLASSPATH
变量名:CLASSPATH 变量值:在原来的后面添加 :
;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar
- 启动JMETER:
找到Jmeter解压路径下的bin文件中的jmeter.bat 文件,双击,此时会弹出两个界面,一个是命令窗口,一个是JMeter窗口,意味着JMeter已经安装成功了。如下图所示:

- 界面改为中文:

- 录制手机app脚本
- 先这样

- 再这样

- 配置http代理服务器:Global Settings下面的端口配置:8887(端口自定义,随便输),HTTPS Domains配置:192.168.30.239(本机IP),目标控制器配置:测试计划>线程组

- 手机上的设置:
- 手机连接到与pc端同一个的网络中,在手机网络设置上面设置代理服务器为手动,主机名为pc的IP地址192.168.10.115,端口为同一个端口8887;
- 把pc端JMETER文件中bin文件中的证书文件安装到手机上:

- http代理服务器—启动—OK:

启动成功(开始录制):

在手机上进行app操作,便可以在线程组下看到一些文件,这些文件便是抓到的请求。在手机app操作结束后,一定要停止http代理服务器,否则会一直抓包,线程组中便会出现许多无用的请求。

例如我在手机浏览器上百度了我自己的名字:

- 优化脚本
录制脚本前:HTTP代理服务器--选择requestes Filtering—选择排除模式—点击add suggested Excludes(添加建议排除):

录制脚本后:
- 没有传递任何数据的请求可以禁用掉;
- 与目标网站无关域名请求可以禁用掉;
- js/css/png/jpeg等这类请求禁用掉;
- 脚本参数化
以下举一些简单例子:
1.利用Csv数据文件设置文档进行s-47脚本的参数化

新建txt文件进行导入,设置变量名为word

Txt文件为

在以下脚本中设置变量,此脚本为打开手机上的百度浏览器,进行输入搜索,word的值为输入搜索的值,这里导入了txt文件进行设置,需要用到 ${ 变量 } 的格式来进行设置参数,在这里由于csv的变量为word,所以这里的值为 ${word},这样脚本便可以对txt中的值进行输入搜索

接下来在线程组中设置循环次数为5次,因为txt中有5个值,

选择察看结果树,点击运行,可以看到录制的脚本运行了5次,分别查看5次s-47脚本的响应结果,完成了对zhihu、douyu、huya、pantum、china分别进行了搜索



2.利用函数助手进行参数化

s-41脚本为打开浏览器进行输入搜索。打开函数助手后,选择一个随机生成数字函数,随机生成1-9之间的数字,点击生成,生成一个字符串,复制到s-41脚本参数设置中,修改脚本参数中的word的值为这个字符串


线程组设置循坏5次,察看结果树点击运行,每次脚本运行都相当于在浏览器中输入一个随机生成的1-9之间的数字,然后进行搜索。图中为在浏览器中输入4进行搜索

- 脚本回放/测试结果查看
- 查看测试结果:
添加监听器(察看结果树和聚合报告)查看测试结果:


1)察看结果树:以树形结构展示每个接口请求的测试结果,红色代表失败,绿色代表成功:


2)聚合报告:接口响应时间、吞吐量、通过率等

- 脚本联调与回放:
1)、回放脚本,查看脚本是否跑成功(如何去定义这个脚本是否成功?查看结果树还是app结果?)
2)、回放不成功查看每个请求的参数,那些是我们手动填写那些不是?
3)、从包含非手动填写数据的请求的前几个请求的返回结果里找数据(为何)
4)、利用正则表达式或JSONPATH正则表达式去获取数据,并传递给第二步的请求参数
5)、多次回放,多次修改并联调,直至脚本顺利通过
- Jmeter抓包出现乱码问题
Jmeter在抓取app请求时,抓取到的数据出现乱码,解决方案有常见以下2种:
- 修改JMeter,bin文件夹下的jmeter.properties文件,修改以下字段,将sampleresult.default.encoding字段修改为UTF-8.修改后重新启动JMeter;
- 增加后置处理器Bean Shell PostProcessor,添加代码,prev.setDataEncoding="utf-8"


- app接口测试
使用工具:
Fiddler、Jmeter
测试步骤:
1.确认接口
从开发人员那里获取接口文档,接口文档应该包括完整的功能接口、接口请求方式、接口请求URL、接口请求参数、接口返回参数。
如果当前项目没有接口文档,则可以使用fiddler对APP进行抓包确认。
在手机上对APP进行操作,然后在Fiddler中可以抓取对应的网络交互信息(一个功能中可能设计多个接口的交互)。在抓取的信息中可以看到接口请求方式、接口请求URL、接口请求参数、接口返回参数。
2.在Jmeter中编写测试脚本
1)在测试计划中添加一个线程组。
可以将线程组的名称改成测试项目的名称。
在性能测试时可以通过配置线程属性中的参数来控制并发用户数:
线程数:虚拟用户数,即并发数,一个线程表示一个虚拟用户;
Ramp-Up 时间:所有线程启动的时间,单位s。通过这个参数可以设置每个线程间的启动间隔,防止给电脑造成太大性能压力;
循环次数:测试循环的次数,如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止运行脚本;
2)在线程组中添加HTTP请求。
在Web服务器中填入请求服务器的地址和端口号;
协议中填入HTTP请求的协议,可以是http或https;
在方法中选择HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE;
在路径中填入接口请求的URL;
请求参数:如果是GET方法的请求,请求参数直接写在URL后面即可;如果是POST的方法,则需要在Body Data中填入包含请求参数的数据(Body Data可以从Fiddler抓的包中获取,将Fiddler抓取的到数据包中Inspectors-TextView中的数据复制到Body data中即可);
3)在线程组中添加HTTP信息头管理器进行配置
4)添加监听器:聚合报告和察看结果树
5)添加响应断言
查看测试结果时我们会发现有时候网络侧返回数据不符合要求时Jmeter给出的结果仍是通过的。这时候我们需要通过断言来判断网络的返回数据是否符合要求。
比如,我们可以添加一个断言来检查返回信息中是否包含关键字“errMsg”来判断错误信息:
首先添加一个相应断言,在要测试的响应字段中选择响应文本,在模式匹配规则中选择包括,勾选否,在要测试的模式中添加提一条,输入关键字“errMsg”;
意思是检查网络返回结果中不包含“errMsg”的才会判定为通过。
另外我们还可以从监听器中添加一个断言结果,在断言结果中可以查看断言的详细返回信息。
参考:【小说app实战】fiddler+jmeter的实战和进阶用法_哔哩哔哩_bilibili
相关文章:
JMETER工具:以录制手机app为例
JMETER工具:以录制手机app为例子 JMETER安装和环境配置 pc需要安装jdk,并进行jdk的环境配置,安装好jdk并配置好后,通过命令行输入java –version出现以下界面就表示安装成功: (对应的jdk版本不可太低&…...
PDF文件权限密码保护:如何去除及解决方法
如果你忘记了PDF文件密码,不用担心!PDF解密、找回密码、去除密码的方法简单易行。只需两步:1、打开百度搜索“密码帝官网”;2、在官网页面点击“立即开始”,上传文件,稍等片刻即可找回密码。这种方法安全、…...
【电子信息(工程)】电子通信创新创业教育综合
电子通信创新创业教育 阐述电磁场、电磁波和电磁频谱及应用一、电磁场 法拉第根据电流与磁场的关系,提出了电磁感应定律:如果电磁场中有处于运动状态下的闭合回路导体存在,流经该导体磁场的磁场强度和磁场量,通常都会出现相应的变化,电磁感应电流由此而产生。随后,英国的…...
光伏无人机巡检的工作原理是什么?
随着科技的飞速发展,无人机技术已经深入到众多领域,其中光伏电站的巡检工作便是其应用的一个重要方向。光伏无人机巡检,通过搭载各种先进的传感器和设备,对光伏电站进行全面的、高效的、安全的检测,为电站的运维管理提…...
泛型中K T V E ? Object等分别代表的含义
E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定的java类型&…...
常用损失函数学习
损失函数(Loss Function),在机器学习和统计学中,是用来量化模型预测输出与真实结果之间差异的函数。简而言之,损失函数衡量了模型预测的好坏,目标是通过最小化这个函数来优化模型参数,从而提高预…...
判断视频moov的位置
前言 MP4文件由若干称为Atom(或称为box)的数据对象组成,每个Atom的起首为四个字节的数据长度(Big Endian)和四个字节的类型标识,数据长度和类型标志都可以扩展。Atom可以嵌套,即其数据域可以由…...
python安装依赖
创建 requirement.txt 文件并填充内容 flask2.0.0 pandas1.3.3 numpy1.21.2 安装模块 pip install -r requirement.txt...
如何利用GitHubAction来发布自己的Python软件包
我们开发的python软件包如果想发布到网上,可以让其他人通过pip install下载,一般是把软件包发布到PYPI平台。 PYPI准备 我们要现在pypi注册登录一下 文件组织架构 一般的python软件包的文件组织架构为包名文件夹__init__.py程序,包文件夹的…...
raspberry pi/orienge pi等arm架构硬件打包ros humble docker视觉及机器人开发镜像
raspberry pi/orienge pi等arm架构硬件打包ros humble docker开发镜像 文章目录 前言准备工作拉取镜像编写Dockerfile编译docker镜像启动镜像docker-compose文件编写总结前言 这篇文章主要用于定制化打包需要的docker镜像,由于ros1提供的镜像源是国外的很多软件无法更新,所以…...
springboot+mysql在线考试系统-计算机毕业设计源码82584
摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算…...
LangChain - 建立代理
本文翻译整理自:Build an Agent https://python.langchain.com/v0.2/docs/tutorials/agents/ 文章目录 一、说明概念 二、定义工具1、TavilyAPI参考: 2、RetrieverAPI参考:API参考: 3、工具 三、使用语言模型四、创建代理五、运行…...
爬虫案例:有道翻译python逆向
pip install pip install requestspip install base64pip install pycrytodome tools 浏览器的开发者工具,重点使用断点,和调用堆栈 工具网站:https://curlconverter.com/ 简便请求发送信息 flow 根据网站信息,preview,respon…...
仅需一块 4GB 的 GPU ,就能运行开源大语言模型:Llama3 70B
最强的开源大语言模型 Llama3 已经发布一段时间了,一些盆友资源有限,私信询问是否可以使用 4GB 的 VRAM 在本地运行 Llama3 70B。 与 GPT-4 相比,Llama3 的性能如何?Llama3 使用了哪些关键的前沿技术使其变得如此强大?…...
一战成电失败,二战上岸复旦!
这个系列会邀请往届学长学姐进行经验分享~ 本篇是复旦大学957来自专业课134分上岸同学的经验分享。 经验分享 大家好,大伙能点进这个帖子倍感荣幸。 先说一下个人情况吧,鼠鼠本科武汉大学物院,总共四年混了四年,绩点低&#x…...
27寸2K显示器 - HKC G27H2
HKC G27H2是一款面向电竞市场的高性能显示器,以其2K分辨率和180Hz的刷新率作为主要卖点,旨在为玩家提供流畅而清晰的视觉体验。配备HDR 400技术和95% DCI-P3色域覆盖,这款显示器还支持升降旋转支架,为用户提供了高度的人体工程学适…...
编程实战:类C语法的编译型脚本解释器(七)语句
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 系列入口: 编程实…...
实体-联系图
为了把用户的数据要求清楚、准确地描述出来,系统分析员通常建立一个概念性的数据模型(也称为信息模型)。概念性数据模型是一种面向问题的数据模型,是按照用户的观点对数据建立的模型。它描述了从用户角度看到的数据,它反映了用户的现实环境, 而且与在软件系统中的实现方法无关。…...
ROCm上来自Transformers的双向编码器表示(BERT)
14.8. 来自Transformers的双向编码器表示(BERT) — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import torch from torch import nn from d2l import torch as d2l#save def get_tokens_and_segments(tokens_a, tokens_bNone):""&qu…...
期权课程之第一节【用生活的例子解释什么是期权】
1、用生活的例子解释什么是期权 期权的英文名也就叫Option【选择】,实际上期权本质也就是一种选择权。 买入资产的例子 假如你【买家】看上了一套老王的【卖家】房子,现价100W、但是目前手头比较紧、但是你又不想错过这个房子,你可以先给老…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
