性能测试学习第四天-----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 ...
随机推荐
- 20131221-Dom练习-第二十六天(未完)
[1] //总结,写代码,一要动脑,理解用脑 //二要练,要动手,要有用身体记忆代码的觉悟,记忆用手 //三学编程最快的方法是,直接接触代码,用脑,用手接触代码 //面向对象的编码方式,对象还是对象, ...
- Java中的单例模式(Singleton Pattern in Java)
Introduction 对于系统中的某个类来说,只有一个实例是很重要的,比如只有一个timer和ID Producer.又比如在服务器程序中,配置信息保留在一个文件中,这些配置信息由一个单例对象统一 ...
- Android 隐藏软键盘功能的实现
Activity context = (Activity) mContext; final View v = context.getWindow().peekDecorView(); if (v != ...
- vijos P1848 记数问题
自答[119ms内存456.0 KiB] #include<iostream>using namespace std;int num = 0;void judge(int n, int x ...
- SQL Server 保存特殊字符时乱码
场景:协同完成的项目,数据库是同事创建,我们共同使用的表. 客户反应有一些字符查看的时候出现乱码.第一反应是否编码规则的问题.后来去数据库查发现数据库里就是乱码,百度了一下发现说特殊字符要保存在NVA ...
- IOCP Input/Output Completion Port IO完成端口
I/O completion ports provide an efficient threading model for processing multiple asynchronous I/O r ...
- MyBatis-Plus 使用说明介绍
先看一下和MyBatis 不同点说明: @GetMapping("/select_sql") public Object getUserBySql() { User user=ne ...
- Java编程基础阶段笔记 day01 Java语言概述
目录内容 DOS命令 电脑配置 Java语言的特性 Java两种核心机制 Java语言环境搭建 第一个Java程序 注释 Java语句说明 编程风格 作业 常用的DOS命令 dir : 列出当 ...
- java一个类 继承HttpServlet 和实现Servlet区别
java一个类 继承HttpServlet 和实现Servlet区别 servlet 是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法 而HttpServlet实现了servlet接 ...
- java练习---4
//程序员:罗元昊 2017.9.17 今天好累吖咦吖咦吖 package demo;import java.util.Scanner;public class Lk { public static ...