性能测试学习第四天-----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 ...
随机推荐
- [HAOI2006]聪明的猴子 题解
题意: 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在 ...
- Spring框架之IoC和AOP
Spring框架简介: 2003年2月,Spring框架正式成为一个开源项目,并发布于SourceForge中.致力于Java EE应用的各种解决方案,而并不是仅仅专注于某一层的方案,是企业应用开发的 ...
- “朕赐给你,才是你的;朕不给,你不能抢”--custome role在Azure权限管理中的简单实践
在开始详细讨论技术问题之前,有一些个人观点想发表一下: ---作为一个甲方云平台的掌控着,如果任何事情你都是让partner全部帮你搞定,自己既不审核也不研究,那无论是对于公司还是个人发展来说都是没任 ...
- 《VR入门系列教程》之13---相机与立体渲染
相机.透视图.视口.投影 渲染好的场景都需要一个可以供用户查看的视图,我们通常在3D场景中用相机来提供这种需求.相机相对场景有位置和方向,就像我们生活中的相机一样,它也提供透视图查看方式,这种 ...
- 第一章jQuery基础
一.jQuert简介 1.什么是jQuery jQuery是javaScript的程序库之一,它是javaScript对象和实用函数的封装. jQuery是继Prototype之后又一个优秀的java ...
- PHP与ECMAScript_6_常用运算符
优先级从上到下 PHP ECMAScript 特殊运算符 [ ] ,( ) [ ] ,( ) 自增减/类型 ++ -- ! int float string array object @ (错误抑 ...
- spring与actionMQ整合
出处:http://www.cnblogs.com/leiOOlei/p/5075402.html 一.配置部分 ActiveMQ的安装这就不说了,很简单, 这个例子采用maven构建,首先看一下po ...
- 原创:用node.js搭建本地服务模拟接口访问实现数据模拟
前端开发中,数据模拟是必要的,这样就能等后台接口写完,我们直接把接口请求的url地址从本地数据模拟url换成后台真实地址就完成项目了.传参之类的都不用动. 之前网上找了很多类似于mock等感觉都不太实 ...
- QQ第三方登录逻辑(微信,微博等同)
实现过程:生成qq扫码登录连接(需要注册,链接里有几个参数需要按照开发文档的格式进行拼接,要后端完成),点击QQ登录按钮,前端Vue发送axios请求,后端收到请求把生成的QQ登录链接发送给vue,v ...
- SCI论文的时态
如果有的杂志对时态有要求,则以下所述都没有用了. 有些杂志也会专门有些比较“特别”的要求,比如Cell,要求Abstract全部使用一般现在时. 英语谓语动词时态共有16种,在英文科技论文中用得较为频 ...