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/databasenamecnn = 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,下一行为空时返回falsewhile(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 stubreturn 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/databasenamecnn = 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/databasenamecnn = 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条不重复的数据。

分类: 教程分享 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录