性能测试学习第四天-----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条不重复的数据。

 

转载于:https://www.cnblogs.com/qingyuu/p/11303524.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值