Jmeter-记一次自动化造数引发的BeanShell写入excel实例
一、前言
最近工作和生活说忙也忙,说不忙也不忙,但就是已经感觉很长时间没有get新的技术技能了,就是一丢丢的那种也没有,哈哈哈,今天就来讲一下最近get到的小技能吧。
工作中,由于某个需求需要几百条数据去验证某个接口,肯定不能手动加啦,基于测试周期紧张,直接考虑用jmeter的循环控制器辅助实现。
二、接口背景介绍
业务说明:点击创建按钮,弹出创建界面,输入必填项后,点击确定,返回创建数据成功。
1、创建接口
就是需要用该接口创建数据,对于接口的说明如下:
1)接口请求方法:PUT
2)必传的入参需要变量的字段有:userCode,userId,userName,remarkid
3)其余字段根据实际业务,可以传固定值
思路tip:首先要确认变量字段,其次确认变量字段来源,最后确认如何能获取到变量。当前的实例中,除了remarkid,其余3个变量字段是从另外一个查询接口读取的,详细见第2点。
2、查询用户接口
在创建界面,输入用户名称时会调用【查询用户】接口,该接口返回的数据就是【创建】接口中所需要的入参字段,返回的json格式如下:

三、Loop Controller介绍
很早之前就已经在工作上用到过这个组件,今天突然发现我居然没有针对这个组件写详细的博客,太尴尬了,那现在就简单了解下这个组件的用法吧。

Loop Count:循环次数,分为永远、自定义次数——勾选Forever后,自定义次数置灰不允许输入,未勾选,则可以
按字面意思,其实它就是循环该控制器下的请求,一般跟计数器配合使用,具体根据实际场景来。
如果非常熟悉Jmeter工具的,想必也知道线程组也可以设置循环次数,这两者其实可以理解为父子关系,比如循环控制器设置循环2次,线程组设置循环4次,则执行的结果如下: 线程一共循环运行了4轮,每轮会循环请求接口2次

四、方法1— Loop Controller循环调用接口
1、脚本结构如下

2、使用强大的JSON提取器,提取返回的字段

3、用户查询接口返回结果如下
在察看结果树的Debug中可以看到提取的userCode,userId,userName,其中userCode_matchNr表示匹配到的总数
4、创建接口入参使用变量值
查询接口是提取了返回字段的所有值,要引用变量的写法就相当于 ${userCode_1},那总不能在入参里写死_1吧,因为要循环创建的,得想办法让userCode_x,后面的_x是可以每次自增的,所以要结合counter计数器函数。
而__V就是要把它们嵌套起来,__V属于嵌套函数,有兴趣可以网上百度,如果不懂的话直接复制那串改一下变量就行。
remarkid在业务上是不允许重复的,所以这里使用Random函数,即随机数函数,让它随机生成一串数字即可。
"userCode":"${__V(userCode_${__counter(\,)},)}","userName":"${__V(username_${__counter(\,)},)}","userId":"${__V(userId_${__counter(\,)},)}","remarkid":"${__Random(1000,9000,)}"
5、循环控制器循环次数使用变量值
循环控制器中的自定义次数考虑到灵活性,使用查询接口匹配到的总数(变量_matchNr),一共提取3个字段,所以用其中任意字段都行,引用格式: ${username_matchNr}

6、执行
完成以上步骤,就可以执行创建数据啦,执行结果我就不贴了。
五、方法2—Loop Controller循环调用JDBC
跟方法1的步骤是一样的,只是方法2是通过调用jdbc request,即sql循环插入数据,这里就不贴图啦,具体看脚本结构,然后在jdbc里写条insert语句,将相应字段替换成引用变量即可。
注:执行insert,Query Type需要选择【Prepared Update Statement】
六、方法3—BeanShell写入excel,手动生成sql语句
1、BeanShell PostProcessor
这种其实也是通过sql插入,只不过是手动插入,在用户查询请求下添加BeanShell PostProcessor,脚本如下:
//指定需要写入到哪个文件
FileWriter fs=new FileWriter("C:/Users/13710/Desktop/9000.csv",true);
//创建一个字符缓存输出流
BufferedWriter out = new BufferedWriter(fs); //另一种获取变量值的写法
//int b = Integer.valueOf("${username_matchNr}");
//System.out.println("接口返回的总数为:"+b); for(int i=1;i<= ${username_matchNr};i++){
username= vars.get("username_"+i);
userId = vars.get("userId_"+i);
userCode = vars.get("userCode_"+i);
out.write(username+","+userCode+","+userId);
out.write(System.getProperty("line.separator"));
System.out.println("输出的值是:"+username);
} out.close();
fs.close();
2、执行后自动生成.csv文件
可以看到excel里有3列,因为beanshell脚本拿到3个变量字段写到了excel里了

3、运用强大的excel功能生成sql语句
D4列是自己先写一条sql哈,写好后往下拖动就会自动生成其他的,其中需要变的均引用表格变量,格式:"&A1&"
温馨tip:如果公式中的字符串过长,要用CONCATENATE函数
例子1(这个没超的): =CONCATENATE("INSERT INTO contact(name, post,id)VALUES ("&A1&", '"&B1&","&C1&"');")
例子2(分成了4个字符串,因为公式中每一个字符串都不能超过255字符):


4、将D4列直接复制到数据库里执行即可

Jmeter-记一次自动化造数引发的BeanShell写入excel实例的更多相关文章
- C#将数据以XML格式写入Excel
本文转载:http://www.cnblogs.com/eflylab/archive/2008/09/21/1295580.html c#将数据导入Excel另类方法 今天公司突然给个Excel模版 ...
- Jmeter发送jdbc请求进行大批量造数
创建批量造数脚本,一个简单的结构如下图所示, 1.线程组(10个线程重复运行2次,相当于造20个数) 2.用户定义变量(这是全局变量,用于后面随机筛选用) 3.数据库连接配置 4.计数器(用于主键递增 ...
- Jmeter+ant+Jenkins接口自动化框架搭建
摘自:https://testerhome.com/topics/13389 一.背景 上一篇讲了Jmeter 接口自动化-脚本数据分离实例,我们知道怎么利用Jmeter去编写接口自动化脚本,但是接 ...
- 转:利用ant与jmeter实现负载测试自动化
性能测试一直以来都是测试领域一个令人争议的话题.测试的参考标准.评判依据及测试的方法选择都很难有一个统一的说法.但无论如何,对于需要能够承受一定压力而运行的程序来说,进行其进行功能和性能测试是一个必不 ...
- 通过DbVisualizer 工具运行DB2存储过程实现INSERT语句主键自增造数
1.需求简介 最近开发人员需要进行一批数据进行生产上SQL语句耗时过长问题的验证与优化.所以在性能测试库中批量建造数据,由于交易本身业务逻辑过于复杂以及需要各种授权,最后决定采用插表的方式完成. 2. ...
- mysql存储过程造数
性能测试时,数据库表通常需要很多数据,此时我们可以用存储过程来造数,以下代码mysql.Oracle都可以用 首先,先查看数据库表的设计,可以看到每张表有多少字段,分别都是什么类型,哪个字段是自动增长 ...
- 基于Jmeter跟Jenkins的自动化性能测试的一站式解决方案(转)
www.MyException.Cn 网友分享于:2015-08-26 浏览:0次 基于Jmeter和Jenkins的自动化性能测试的一站式解决方案 作者: Yu, Qingguo Shen, ...
- MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例
主要实例:把临时表tmp_table数据插入到目标表target_table 一.MySql造数存储过程实例 mysql造数 -- 第一步,创建临时表 CREATE TEMPORARY TABLE I ...
- Jmeter任在运行,线程数上不去
问题 jmeter在运行,但是线程数上不去(本来模型设计了100个总线程,但运行时线程只能上到5,根据图上观察总共也只能运行5个线程) 之前更新了random csv插件 解决办法 查看jmeter. ...
随机推荐
- VUE3 之 自定义指令的实现 - 这个系列的教程通俗易懂,适合新手
1. 概述 老话说的好:能屈能伸的人生,才是完满而丰富的人生. 言归正传,今天我们来聊聊 VUE 中自定义指令的实现. 2. 自定义指令 2.1 文本框聚焦的实现 <body> < ...
- TS 自学笔记(一)
TS 自学笔记(一) 本文写于 2020 年 5 月 6 日 日常废话两句 有几天没有更新了,最近学的比较乱,休息了两天感觉好一些了.这两天玩了几个设计软件,过几天也写篇文章分享分享. 为啥要学 TS ...
- vmware ubuntu 看不到网卡或连接不到网络
执行以下命令就可以重新请求 dhcp 服务器,一般就可以联网了, ens33 是网卡名称,根据自己的情况替换 sudo dhclient ens33 右上角网络图标消失 # 先停止服务 sudo se ...
- Kafka 生产者解析
一.消息发送 1.1 数据生产流程 数据生产流程图解: Producer创建时,会创建⼀个Sender线程并设置为守护线程 ⽣产消息时,内部其实是异步流程:⽣产的消息先经过拦截器->序列化器-& ...
- unity---世界坐标和本地坐标的转换
会受到缩放的影响 用的比较多的是 本地坐标转换为世界坐标,比如在自己周围释放物体 当物体发生旋转,方向会发生变化
- C#实现找二维数组中的鞍点
鞍点定义:该位置上的元素值在行中最大,在该列上最小 代码示例: using System; using System.Collections.Generic; using System.Linq; u ...
- 第06组Alpha冲刺(6/6)
目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2.曹兰英 3. 方梓涵 4.曾丽莉 5.鲍凌函 6.杜筱 7.黄少丹 8.詹鑫冰 9.董翔云 10.吴沅静 1.3 冲刺成果展示 1.1 基 ...
- CSP 2021 总结
CSP 2021 总结 PJ 开题顺序:1342 应该先做 T2 ,导致我 T2 直接看错 T1.T3 T1 :直接推规律即可,考场的想法应该正确 T3 :好家伙直接 map 走起 T2 最崩溃的来了 ...
- [二进制漏洞]栈(Stack)溢出漏洞 Linux篇
目录 [二进制漏洞]栈(Stack)溢出漏洞 Linux篇 前言 堆栈 堆栈(Stack)概念 堆栈数据存储方式 函数调用 函数调用C语言代码 函数调用过程GDB调试 函数Call返回原理 函数栈帧 ...
- CAD图在线Web测量工具代码实现(测量距离、面积、角度等)
CAD如今在各个领域均得到了普遍的应用并大大提高了工程技术人员的工作效率.在桌面端,AutoCAD测量工具已经非常强大:然后在Web端,如何准确.快速的对CAD图在Web进行测量呢? 功能 能Web在 ...

