性能测试学习第四天-----loadrunner:jdbc批量制造测试数据 & controller应用
Javavuser协议
1.过程概述:在eclipse中用java编写sql执行脚本,复制到lr中,调整后通过参数化迭代批量制造测试数据;
2.步骤:
1).在eclipse中新建java project, 新建文件夹lib,将mysql-connector-java-5.1.11-bin.jar包拖到lib文件夹中,选择后右键:bulid path-add;
2).编写脚本---select语句:
package jdbc_select;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; public class jdbcSelect {
String username="root";
String password="123456";
String url="jdbc:mysql://localhost:3306/oa?useUnicode=true&characterEncoding=utf8";
String sql="select * from itcast_role where name=?";
Connection cnn;
PreparedStatement ps; public static void main(String[] args) throws Throwable{
jdbcSelect select = new jdbcSelect();
select.init();
select.action();
select.end();
} public int init() throws Throwable {
//System.out.println("envrinoment-test");
//注册驱动,通过驱动名称加载
Class.forName("com.mysql.jdbc.Driver");
//通过用户名、密码、数据库url等信息和mysql建立连接,返回Connection对象
//jdbc:mysql://dpid:3306/databasename
cnn = DriverManager.getConnection(url,username,password);
System.out.println("获取的连接为:"+cnn);
return 0;
} public int action() throws Throwable {
//System.out.println("hello");
//使用cnn对象中的预编译防范,对sql语句提前进行编译,目的是为了提升执行sql语句的性能,返回一个已经编译过的对象
ps=cnn.prepareStatement(sql);
//执行前,对sql参数化
ps.setString(1,"中文");
//执行sql语句,select操作均使用executeQuery方法,返回ResultSet类型数据,结果集对象
ResultSet set=ps.executeQuery();
//指针默认位置在第一行数据之前。next()指针指向的下一行数据不为空时返回true,下一行为空时返回false
while(set.next()){
String name = set.getString("name");
String description = set.getString("description");
System.out.println("name:"+name+" description:"+description);
}
return 0;
} private char[] getArray(ResultSet set) {
// TODO Auto-generated method stub
return null;
} public int end() throws Throwable {
//关闭连接
cnn.close();
return 0;
}
}
3).编写脚本---insert语句,有md5加密数据时,先导入md5.jar包,步骤同mysql-connector-java-5.1.11-bin.jar:
package db; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import com.lee.util.Md5Util; public class jdbcInsert {
String username="root";
String password="123456";
String url="jdbc:mysql://localhost:3306/oa?useUnicode=true&characterEncoding=utf8";
String sql="insert into itcast_role(name,description) values(?,?)";
static String pwd=Md5Util.getMd5Hex("123456");
Connection cnn;
PreparedStatement ps; public static void main(String[] args) throws Throwable {
jdbcInsert insert=new jdbcInsert();
System.out.println(pwd);
insert.init();
insert.action();
insert.end();
}
public int init() throws Throwable {
System.out.println("envrinoment-test");
//注册驱动,通过驱动名称加载
Class.forName("com.mysql.jdbc.Driver");
//通过用户名、密码、数据库url等信息和mysql建立连接,返回Connection对象
//jdbc:mysql://dpid:3306/databasename
cnn = DriverManager.getConnection(url,username,password);
System.out.println("获取的连接为:"+cnn);
return 0;
}
public int action() throws Throwable {
System.out.println("hello");
//使用cnn对象中的预编译防范,对sql语句提前进行编译,目的是为了提升执行sql语句的性能,返回一个已经编译过的对象
ps=cnn.prepareStatement(sql);
//执行前,对sql参数化
ps.setString(1,"firstreplace");
ps.setString(2, "secondreplace");
//执行sql语句,insert/update/delete操作均使用excuteUpdate方法
int rows=ps.executeUpdate();
System.out.println("影响的行数为:"+rows);
return 0;
}
public int end() throws Throwable {
//关闭连接
cnn.close();
return 0;
}
}
4). 打开loadrunner,新建脚本---all projects--java Vuser,将脚本复制到loadrunner的action中,经过增加事务判断、参数化 处理后,综合插入、查询脚本,编写如下:
import lrapi.lr;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import com.lee.util.Md5Util;
import java.sql.ResultSet; public class Actions
{
String username="root";
String password="123456";
String url="jdbc:mysql://localhost:3306/oa?useUnicode=true&characterEncoding=utf8";
String sql="insert into itcast_user(loginName,password,name,phoneNumber,departmentId) values(?,?,?,?,?)";
String sql2="SELECT COUNT(DISTINCT(loginName)) ,COUNT(DISTINCT(phoneNumber)) FROM itcast_user";
Connection cnn;
PreparedStatement ps;
PreparedStatement ps2; public int init() throws Throwable {
System.out.println("envrinoment-test");
//注册驱动,通过驱动名称加载
Class.forName("com.mysql.jdbc.Driver");
//通过用户名、密码、数据库url等信息和mysql建立连接,返回Connection对象
//jdbc:mysql://dpid:3306/databasename
cnn = DriverManager.getConnection(url,username,password);
System.out.println("获取的连接为:"+cnn);
//使用cnn对象中的预编译防范,对sql语句提前进行编译,目的是为了提升执行sql语句的性能,返回一个已经编译过的对象
ps=cnn.prepareStatement(sql);
ps2=cnn.prepareStatement(sql2);
return 0;
} public int action() throws Throwable { //插入MD5加密的密码数据, 这里密码也可以参数化
String pwd=Md5Util.getMd5Hex("<num>");
System.out.println("加密后的密码为:"+pwd);
//执行前,对sql参数化
ps.setString(1,"name<num>");
ps.setString(2,pwd);
ps.setString(3,"name<num>");
ps.setString(4,"136<phone>");
ps.setString(5,"<deptID>"); lr.start_transaction("insert"); lr.rendezvous("集合点"); //执行sql语句,insert/update/delete操作均使用excuteUpdate方法
int rows=ps.executeUpdate();
System.out.println("影响的行数为:"+rows); if(rows>0){
lr.end_transaction("insert", lr.PASS);
}else{
lr.end_transaction("insert", lr.FAIL);
};
return 0;
} public int end() throws Throwable { lr.start_transaction("select"); //执行sql语句,select操作均使用executeQuery方法,返回ResultSet类型数据,结果集对象
ResultSet set = ps2.executeQuery(); //仅返回一条数据时使用,打印查询结果
if(set.next()==true){
String count_user = set.getString("COUNT(DISTINCT(loginName))");
String count_phone = set.getString("COUNT(DISTINCT(phoneNumber))");
System.out.println("用户数量:"+count_user+" 手机号数量:"+count_phone);
lr.end_transaction("select", lr.PASS); }
else{
lr.end_transaction("select", lr.FAIL);
}
set.next(); /*
//返回多条数据时使用
if(set.next()==true){
lr.end_transaction("select", lr.PASS);
set.beforeFirst(); // next() 每调用一次,指针后移一个位置。使用beforeFirst(),让指针回到初始位置。当仅有一条数据时,指针回到初始位置,后面循环打印才有结果输出。
}
else{
lr.end_transaction("select", lr.FAIL);
} //指针默认位置在第一行数据之前。next()指针指向的下一行数据不为空时返回true,下一行为空时返回false。打印每次迭代的查询结果
while(set.next()){
String count_user = set.getString("COUNT(DISTINCT(loginName))");
String count_phone = set.getString("COUNT(DISTINCT(phoneNumber))");
System.out.println("用户数量:"+count_user+" 手机号数量:"+count_phone);
}
*/ //关闭连接
cnn.close();
return 0;
}
}
5).运行调试无误后,设置参数num为唯一数,起始值100000,block为1000,超出后从最后一个值开始再次后推。点击tools--create ctroller scenario;
6).在controller中设置并发数--虚拟用户数10,运行至全部完成。run-time-setting中设置:
添加jar包:
配置jdk路径:
7).运行,即可生成10000条不重复的数据。
性能测试学习第四天-----loadrunner:jdbc批量制造测试数据 & controller应用的更多相关文章
- 性能测试学习第四天_Loadrunner概述
1.Loadrunner的组成部分 ·脚本生成器VuGen:virtual user generator ·压力控制器Controller,License主要在这里控制 ·结果分析软件Analysis ...
- 性能测试学习 第七课 --loadrunner中JavaVuser脚本的编写
1.环境准备: LoadRunner11----->对应JDK1.6版本(32位) LoadRunner12----->对应JDK1.7版本(32位) (一).JDK下载安装完成 ...
- 性能测试学习第三天-----loadrunner接口测试&中文乱码处理
loadrunner 接口测试: get.post(3种参数格式).cookie及token处理.加密接口.webservice.socket.文件上传接口.文件下载接口 & 中 ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- MyBatis学习 之 四、MyBatis配置文件
目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...
- HBase学习(四) 二级索引 rowkey设计
HBase学习(四) 一.HBase的读写流程 画出架构 1.1 HBase读流程 Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeepe ...
- 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式
本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...
- 性能测试学习之三—— PV->TPS转换模型&TPS波动模型
PV->TPS转换模型 由上一篇“性能测试学习之二 ——性能测试模型(PV计算模型)“ 得知 TPS = ( (80%*总PV)/(24*60*60*(T/24)))/服务器数量 转换需要注意: ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- MyBatis 存储过程
From<MyBatis从入门到精通> <!-- 6.2 存储过程 6.2.1 第一个存储过程 delimiter ;; create procedure 'select_user_ ...
- [记录]优化Linux 的内核参数来提高服务器并发处理能力
优化Linux 的内核参数来提高服务器并发处理能力PS:在服务器硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题.要提高Linux 系统下的负载 ...
- [记录]HAproxy负载均衡配置教程
HAproxy负载均衡配置教程 一.简介 haproxy是一个开源的高性能负载均衡软件:支持双机热备.虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能:支持TCP(四层).HTTP(七层)应用 ...
- 使用ML-Agents Toolkit(0.5)训练游戏ai之游戏打包
这篇文章介绍如何训练官方的一个例子3dball. 确保在此之前已经安装好训练环境可以参考下面的文章. https://www.cnblogs.com/pojdd/p/9804322.html 游戏打包 ...
- 个人永久性免费-Excel催化剂功能第38波-比Vlookup更好用的查找引用函数
谈起Excel的函数,有一个函数生来自带明星光环,在表哥表姐群体中无人不知,介绍它的教程更是铺天盖地,此乃VLOOKUP函数也.今天Excel催化剂在这里冒着被火喷的风险,大胆地宣布一个比VLOOKU ...
- 吐槽下Excel的十大不规范使用问题
Excel是个老少咸宜的软件工具,这是不争的事实,无论哪个级别的用户,都能在乐在其中.但问题是太多的人群因为不懂得正确的使用姿势,硬生生地把Excel玩得让人啼笑皆非,同样留给接手者一个难堪无比的烂摊 ...
- python 读取文件1
1.脚本 from sys import argv script,filename = argv txt = open(filename) print ("the filename is % ...
- Java_转换流和缓冲流
今日内容介绍 转换流 缓冲流 1 转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamR ...
- Web容器启动中执行某个Java类
1.监听(Listener) <!-- 配置监听 --> <listener> <listener-class>com.xian.jdbc.GetPropertie ...
- LongAdder和AtomicLong性能对比
jdk1.8中新原子操作封装类LongAdder和jdk1.5的AtomicLong和synchronized的性能对比,直接上代码: package com.itbac.cas; import ja ...