全网最详细,Jmeter性能测试-性能进阶, 数据驱动将融入性能测试(五)

news2024/11/15 17:48:38

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

本节或者后面都可能需要用到jmeter的插件,因此需要先引入插件管理工具:plugin-manageI.x…x.jar ,把jar包放入jmeter的lib\ext目录下(由于这里不方便放文件,可以看最底下助理)

放入jar包后,重启jmeter,然后在选项卡的最下面就会有Plugins Manager

请添加图片描述

进入之后,选择Available Plugins,搜索需要的插件然后点右下角的Apply Changes and Restart JMeter即可安装插件

请添加图片描述

DDT数据驱动

性能测试因为是使用多用户并发,请求的时间也要几分钟到几十分钟不等,所以总请求量很大,因此经常需要准备测试数据。最典型的场景,就是使用一批账号不停的进行登录接口的压测,此时就需要用到DDT的概念。

1、CSV数据文件
通过在csv文件中提前写入测试数据,循环读取csv文件并提取其中数据以达到数据驱动。

(在用csv准备数据时,能用csv数据文件设置时,坚决不同${__CSVRead(,)}函数,这是个鸡肋)

添加配置元件->CSV数据文件设置

请添加图片描述

参数的含义大家可以去网上查查,这里列举几个重要的。

变量名称:

  • 就是csv的列,每一列都是一个参数。
  • 多个参数时,固定用逗号分隔
  • 如果中间有一列空列或者有一列的数据不想接受时,中间的可以用空格站位。例如:user, ,pwd

线程共享模式:

  • 所有现场(所有线程):当配置原件在线程组外部时,所有线程组共用这些数据。
  • 当前线程组:每个线程组的数据是独立的,每个线程组各自循环自己的数据。
  • 当前线程:每个线程(并发用户数)的数据是独立的,各自循环自己的数据。

2、使用sqllite实现数据驱动
使用sqlite数据库要注意,sqlite不只支持多线程的,所以使用多线程写入数据偶尔会出现错误。因此写数据时需要加上临界控制器,让所有用户串行。

操作步骤

准备测试数据,这个步骤可以有很多方法,使用Python、csv或其他方式生成测试数据都可以。这里是使用JMeter通过查询数据库。 为了方便查看结果,可以使用保存到响应文件配置元件,将结果保存到txt文件中查看。

首先编写查询sqlselect id,username,password,mobile from cb_account where password=“e10adc3949ba59abbe56e057f20f883e” and LENGTH(mobile)=11 limit 100 OFFSET 500;

配置数据库信息和jdbc请求,具体配置方式请看到多协议脚本中的JDBC脚本,记得填写Variable names,因为要去返回结果里面取值。

添加监听器->保存响应到文件(注意顺序),一般只需要勾选/填写下图中的内容,其他都不动。保存成功之后在bin目录可以找到保存的文件(这一步非必须,这里主要是为了看保存的结果,顺便介绍这个配置元件的使用)

请添加图片描述

至此,测试数据已经生成出来了,但要思考一下,这一次生成的数据只有100条,如果要继续生成,要200、300、400条以上的数据,那要怎么操作?

总不可能生成N个txt文件,然后循环去读取吧,因此就会引出下一步操作,往数据库中存入测试数据。。

这里引入一个叫sqlite的数据库,它是一个关系型数据库但同时也是一个内存数据库,它没有复杂的安装,也不需要登录账号,只要你的操作系统是图形界面且带有浏览器,那你的电脑就一定安装了sqlite。

把sqlite的jar包sqlite-jdbc-3.31.1.jar放到jmeter的lib目录里

再添加一个JDBC Connection Configuration配置元件并填写Variable Name for created pool

在地下的数据库配置信息里,Database URL填写jdbc:sqlite:sqltest.db, 后面的这个sqltest.db其实就是文件名称,这里写路径也可以。同样的,如果不写路径,它会根据文件名自动生成一个db文件并存放在bin目录下

JDBC Driver class选择org.sqlite.JDBC,剩下的就不用填写了,没有账号密码。

创建表,创建表可以通过jmeter完成,也可以通过Navicat等工具完成。我是使用jmeter去创建表的

请添加图片描述

数据库也创建完了,接下来就可以将数据写入到数据库中。再创建一个jdbc request取样器,编写写入数据的sql脚本

请添加图片描述

然后在这个取样器上再添加一个循环控制器,因为从mysql查询数据出来后后,它的数据格式是这样的,所以需要进行循环,循环的次数就是mb_#的值

请添加图片描述

然后再添加一个计数器。提一句,如果懂Python的话,现在的循环控制器+计数器≈for i in len(obj)

请添加图片描述

然后结合V函数,把变量名传进写入数据的脚本里,注意query type的选项

请添加图片描述

运行之后,去数据库就能看到插入的数据了。至此,测试数据已经有了。

请添加图片描述

将产生的数据融入到性能测试中

这里可能会有人有疑问,为什么要那么麻烦,还要再搞一个数据库,再去存数据。从MySQL上读到数据之后直接用不就好了吗?

这个问题,其实是可以,但仅能用在功能或自动化测试中!因为性能测试中,去请求MySQL,这无疑是额外增加了MySQL的压力,这会影响到性能测试结果。

那为什么会用sqlite?再单独拉一个MySQL出来不行吗?
答案是可以,但不推荐。因为sqlite是一个内存数据库,它的读取速度是肯定比MySQL快的,而且它比MySQL更轻便,数据文件可以跟着脚本走。

然后要使用sqlite的数据做性能测试需要考虑一个问题,每个线程使用的数据是独立的还是共用的?

下面这种场景就是每个线程使用的数据都是独立的,可以使用仅一次控制器去控制读取次数。

先查询sqlite,得到全部用户的手机号

请添加图片描述

把这个取样器放入到仅一次控制器中
在登录时候,引用变量

请添加图片描述

最终得到的结果就是,每个线程都会去查询一次sqlite数据库,然后得到数据后,单独去循环。

请添加图片描述

另一种场景就是所有数据都是共用的,此时就不能用仅一次控制器了。

第一步也是查询手机号,但是要放入setup线程组中

请添加图片描述

添加循环控制器,循环次数是${mb_#}

请添加图片描述

然后在循环控制内部添加一个调试取样器,并使用setProperty函数把参数写入到属性中。

请添加图片描述

最后在登录脚本中,通过P函数引用属性即可

请添加图片描述

请添加图片描述

补充,上面用的是count函数去计数的,但如果运行次数比数据大时会出现取不到值的情况,因为下标越界了。要解决的其实只需要把count函数替换成计数器就好了。

请添加图片描述

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只要你肯努力,就没有什么是无法实现的。每一次奋斗和拼搏,都是为了成就更好的自己。所以,请勇敢向前,迎接挑战,不断超越自己!

相信自己,拼尽全力去追求梦想。道路不会一帆风顺,但只要坚持不懈、乐观向上,就一定能够战胜困难,实现自己的目标。

生命不息,奋斗不止。无论遇到什么挑战和困难,我们都要坚持、坚韧不拔地前行,用勇气和毅力去迎接未来的每一个日出和日落。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【汇总版】计算机组成原理思维导图

目录导读与总结汇总思维导图导读与总结 这是一份涵盖计算机组成原理基础知识的思维导图,它包括计算机系统的层次结构、指令和指令执行、CPU的组成和工作原理、存储器的层次结构和管理、输入输出设备的原理和接口、以及汇编语言的基础知识。通过这份思维导图&#x…

Zookeeper源码分析——ZK服务端初始化源码解析

持久化源码 快照 public interface SnapShot {/*** deserialize a data tree from the last valid snapshot and * return the last zxid that was deserialized* 反序列化方法*/long deserialize(DataTree dt, Map<Long, Integer> sessions) throws IOException;/*** …

在Linux中搭建Apache和多个版本PHP源码的集群

ApachePHP安装在公网IP为x.x.x.x的服务器上 需要下载安装的软件版本&#xff1a;httpd-2.4php-5.6php-7.4php-8.0 安装httpd 第一步&#xff0c;查看Linux系统中是否安装了apache。 命令&#xff1a;rpm -qa | grep httpd 若已经安装了&#xff0c;则需要使用命令“yum -y…

前端学习:HTML图像、表格、列表

目录 图像 一、图像标签和源属性(Src) 二、替换文本属性(Alt) 三、设置图片样式基本属性 四、图像标签 表格 一、标签 补充: 二、表格的表头 三、表格常用标签和属性 标签 属性 列表 一、无序列表 二、有序列表 三、定义列表 四、列表常用标签属性 图像 一、…

MATLAB三相LCL滤波型PWM逆变器仿真设计matlab代码(链接在文章结尾)

MATLAB三相LCL滤波型PWM逆变器仿真设计 参考并网电流外环电容电流前馈内环的双闭环控制结构&#xff0c;可以用于光伏和风力发电网侧变换器中进行改造。 三相逆变器通常采用三相桥式逆变电路&#xff0c;采用IGBT作为开关器件的电压型三相桥式逆变电路 在并网逆变器系统中,滤波…

MySQL数据库学习笔记(七)实验课三之拼命的李绿

一来就是实验课三了&#xff0c;那么实验课二呢&#xff1f;实验课二是装配mysql环境那些东西&#xff0c;而我们在前面的笔记中也有关于配置环境的&#xff0c;所以在这里就不再赘述了。 文章目录注意&#xff1a;1&#xff0c;本地文件导入2&#xff0c;数据范围3&#xff0c…

paddle 进行数字识别 (使用ocr数据集)

要点&#xff1a; 喵了个喵&#xff0c;没使用 OCR参考文档&#xff1a; PaddleOCR数字仪表识别——2.数据合成及数据集制作_数字仪表数据集https://blog.csdn.net/castlehe/category_10459202.html?spm1001.2014.3001.5482最佳参考&#xff1a; 基于PaddleOCR的数字显示器字…

SpringBoot ElasticSearch 【SpringBoot系列16】

SpringCloud 大型系列课程正在制作中&#xff0c;欢迎大家关注与提意见。 程序员每天的CV 与 板砖&#xff0c;也要知其所以然&#xff0c;本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 elasticsearch是一款非常强大的开源搜索引擎&a…

Logstash:部署和扩展 Logstash

Elastic Stack 用于大量用例&#xff0c;从操作日志和指标分析到企业和应用程序搜索。 确保你的数据可扩展、持久且安全地传输到 Elasticsearch 非常重要&#xff0c;尤其是对于任务关键型环境。 本文档的目的是强调 Logstash 最常见的架构模式以及如何随着部署的增长而有效扩…

c++学习之c++对c的扩展2

目录 1.c/c中的const 1 const概述 2 c/c中const的区别 c中的&#xff1a; c中的const&#xff1a; c/c中的const异同 c中const修饰的变量,分配内存情况 尽量以const替换define 2.引用 函数的引用&#xff1a; 引用的本质 指针的引用 5 常量引用 内联函数 内联函数…

(排序7)归并排序(递归)

归并排序 归并排序采用的是两个有序数组的归并。比如说现在想让一个数组有序。之前我们讲过&#xff0c;如果说你现在有两个有序数组的话&#xff0c;那么我们就可以把这两个有序数组给他合并成一个有序数组。两个有序区间归并的思路其实很简单&#xff08;这个也是归并的单趟…

Android 自定义View 之 计时文字

计时文字前言正文一、XML样式二、构造方法三、API方法四、使用五、源码前言 在Android开发中&#xff0c;常常会有计时的一些操作&#xff0c;例如收验证码的时候倒计时&#xff0c;秒表的计时等等&#xff0c;于是我就有了一个写自定义View的想法&#xff0c;本文效果图。 正文…

Vue2-黑马(八)

目录&#xff1a; &#xff08;1&#xff09;router-动态路由 &#xff08;2&#xff09;router-重置路由 &#xff08;3&#xff09;router-页面刷新 &#xff08;1&#xff09;router-动态路由 我们有这样一个需求&#xff0c;不同的用户根据自己的身份不一样&#xff0c;…

Seaborn 数据可视化基础

目录 介绍 知识点 Seaborn 介绍 快速优化图形 Seaborn 绘图 API 一、散点图&#xff1a; 参数hue hue hue_order 参数style 二 、线形图 三、类别图 绘制箱线图 绘制小提琴图 绘制增强箱线图 绘制点线图 绘制条形图 绘制计数条形图 四、分布图 五、回归图 …

nginx配置

单线程应用 稳定性高 系统资源消耗低 线程切换消耗小 对HTTP并发连接处理能力高 单台服务器可支持2w个并发请求 nginx与apache区别 Nginx相对于Apache的优点: 轻量级&#xff0c;同样是 web 服务&#xff0c;比Apache 占用更少的内存及资源&#xff0c;高并发&#xff0…

攻防世界-file_include(convert.iconv的使用)

代码审计&#xff0c;存在文件包含&#xff0c;直接上伪协议 发现不行&#xff0c;应该是存在字符过滤 知识盲区&#xff1a; 1.file://协议&#xff0c;需要填写绝对路径&#xff0c;只能读取txt文件&#xff0c;后面直接跟绝对路径。 file:///etc/passwd 2.php://filter …

深入浅出 Golang 内存管理

了解内存管理~ 前言&#xff1a; 本节课主要介绍了内存管理知识与自动内存管理机制&#xff0c;并对目前 Go 内存管理过程中存在的问题提出了解决方案&#xff0c;同时结合了上次课程学习的《Go 语言性能优化》相关知识&#xff0c;提供可行性的优化建议 … 自动内存管理 Go…

spring-boot怎么扫描不在启动类所在包路径下的bean

前言&#xff1a; 项目中有多个模块&#xff0c;其中有些模块的包路径不在启动类的子路径下&#xff0c;此时我们怎么处理才能加载到这些类&#xff1b; 1 使用SpringBootApplication 中的scanBasePackages 属性; SpringBootApplication(scanBasePackages {"com.xxx.xx…

C++linux高并发服务器项目实践 day5

Clinux高并发服务器项目实践 day5程序和进程单道、多道程序设计时间片并行和并发进程控制块&#xff08;PCB&#xff09;进程状态转换进程的状态进程相关命令进程号和相关函数进程创建父子进程的关系GDB多进程调试程序和进程 程序是包含一系列信息的文件&#xff0c;这些信息描…

你知道怎么实现定时任务吗?

诸位读者都知道笔者写东西都是用到才写&#xff0c;笔者的学习足迹自从参加工作之后就是 非系统 学习了&#xff0c;公司里源代码只要有笔者不知道的技术细节&#xff0c;笔者就会仔细的研究清楚&#xff0c;笔者是不喜欢给自己留下问题的那种学习习惯。 为何要写 笔者最近负…