zoukankan      html  css  js  c++  java
  • LoadRunner 测试 Mysql

    准备文件

    1. 下载 MySQL LoadRunner libraries。

    下载地址:http://files.cnblogs.com/files/xiaoxitest/MySQL_LoadRunner_libraries.zip

    2. 可以看到 MySQL LoadRunner libraries 里面有两个文件夹:bin 以及 include。

    将 bin 文件夹里的文件拷贝到 LoadRunner 安装路径下的 bin 文件夹下。

    将 include 文件夹里的文件全部拷贝到 LoadRunner 安装路径下的 include 文件夹下。

    LoadRunner安装路径一般都是 C:Program Files (x86)HPLoadRunner 或者 C:Program Files HPLoadRunner

    准备测试用的数据库

    新建test数据库

    在test数据库下新建表格 people:包含如下3个字段。

    id需要勾选自动递增。

    image

    简单版

    1. 编写 vuser_init文件

    //引入mysql lib的h文件
    #include "Ptt_Mysql.h"
    
    MYSQL *Mconn;
    
    vuser_init()
    {
        #define MYSQLSERVER "xx.xx.xx.xx"//mysql的ip
        #define MYSQLUSERNAME "root"//用户名
        #define MYSQLPASSWORD "xxxxxx"//密码
        #define MYSQLDB    "test"//数据库
        #define MYSQLPORT "3306"//端口 
        
        //引入libmysql的dll
        lr_load_dll("libmysql.dll");
    
        //连接mysql
        Mconn = lr_mysql_connect(MYSQLSERVER, MYSQLUSERNAME, MYSQLPASSWORD, MYSQLDB, atoi(MYSQLPORT));
    
        return 0;
    }

    Ptt_MySql.h 这个文件是刚刚拷贝到LoadRunner的include文件夹里面的文件之一。

    可以打开看到 Ptt_MySql.h  这个文件主要包含3个函数:lr_mysql_connect 、lr_mysql_query、lr_mysql_disconnect。这都是我们后边要用到的,所以拿出来放到 vuser_init() 初始化函数之前 。

    然后就是定义连接数据库所需要的东西:IP、用户名、密码等。通过下面的 lr_mysql_connect()函数来连接数据库。

    连接数据库前,需要加载  libmysql.dll 文件。

    2. 编写action文件

    Action()
    {
        
        char chQuery[128];
        int result;
    
        //把字符存到chQuery[]中
        sprintf(chQuery, "INSERT INTO people (username,password) VALUES('user11','111111')");
    
        //执行sql
        result = lr_mysql_query(Mconn, chQuery);
    
        if(result == 0){
            lr_output_message("insert 成功");
        }
        else{
            lr_error_message("insert 失败");
        }
    
        return 0;
    }

    这里进行的是插入操作。

    数据库常见的增删改查,这里只需要把 sprintf里面的字符串替换掉就可以。

    3. 编写vuser_end文件

    vuser_end()
    {
        //关闭数据库连接
        lr_mysql_disconnect(Mconn);
        return 0;
    }

    这里就是关闭数据库连接。

    复杂版

    1. 编写 vuser_init文件

    这里添加了一些文件是否存在的验证,以及多次连接Mysql 的尝试。

    #include "Ptt_Mysql.h"
    #include "mysql.h"
    #include "mysql_com.h"
    #include "mysql_time.h"
    #include "mysql_version.h"
    #include "typelib.h"
    #include "my_list.h"
    #include "my_alloc.h"
    
    #define MYSQLSERVER "localhost"
    #define MYSQLUSERNAME "root"
    #define MYSQLPASSWORD "xxxxxx"
    #define MYSQLDB    "test"
    #define MYSQLPORT "3306"
    
    int statu=1;
    MYSQL *Mconn;
    int conn_fail=0, conn_iter=0;
    
    vuser_init()
    {
        // Load libmysql.dll
        int rc;
        rc = lr_load_dll("libmysql.dll");
        if (rc != 0) {
            lr_error_message("Could not load libmysql.dll");
            lr_abort();
        }
    
        lr_start_transaction("mysql_connection");
    
        //Initialise MySQL
        if(!(Mconn = mysql_init(NULL)))
            {
            lr_message("Error -1: Cannot initialize MySQL - %s", mysql_error(Mconn));
            statu = 0;
            lr_end_transaction("mysql_connection", LR_FAIL);
            }
    
        do{
            // Connect to database
            if (!mysql_real_connect(Mconn, MYSQLSERVER, MYSQLUSERNAME, MYSQLPASSWORD, MYSQLDB, atoi(MYSQLPORT), NULL, 0))
                {
                    conn_fail = -2;
                    conn_iter++;
                    sleep(100);
                }
                else
                    conn_fail = 0;
            }
        while(conn_fail < 0 && conn_iter < 10); 
    
        if (conn_fail < 0) 
            { 
                lr_message("Error : %s", mysql_error(Mconn)); 
                statu = 0; 
                lr_end_transaction("mysql_connection", LR_FAIL);
                return -2;
            } 
        else 
            { 
                lr_message("MySql - Good Connection"); 
                statu = 1; 
                lr_end_transaction("mysql_connection", LR_PASS);
            } 
        
        return 0; 
    
    }

    2. 编写 Action_insert 文件

    这里尝试向 people表格插入一条数据。

    可以看到这里使用的数据是直接从 参数文件读取的,所以需要事先建立好参数 user 以及 pwd。

    Action_insert()
    {
        if(statu)
            { 
                char chQuery[1024];
                int status=0;
    
                lr_start_transaction("mysql_insert"); 
    
                lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
                lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
                sprintf(chQuery, "INSERT INTO people (username,password) VALUES('%s','%s')",lr_eval_string("{user}"),lr_eval_string("{pwd}")); 
                
                status = lr_mysql_query(Mconn, chQuery);
    
                if(status!=0)
                    {
                        lr_end_transaction("mysql_insert",LR_FAIL ); 
                    }
                else
                    { 
                        lr_end_transaction("mysql_insert", LR_PASS); 
                    } 
              } 
        return 0; 
    }

    3. 编写 Action_update 文件

    Action_update()
    {
        if(statu)
            { 
                char chQuery[1024];
                int status=0;
    
                lr_start_transaction("mysql_update"); 
    
                lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
                lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
                sprintf(chQuery,"UPDATE people SET password = '123456789' WHERE username='%s'",lr_eval_string ("{user}")); 
    
                status = lr_mysql_query(Mconn, chQuery);
    
                if(status!=0)
                    {
                        lr_end_transaction("mysql_update",LR_FAIL ); 
                    }
                else
                    { 
                        lr_end_transaction("mysql_update", LR_PASS); 
                    } 
              } 
        return 0; 
    }

    4. 编写 Action_select 文件

    查询出来的结果保存在多维数组中,可以使用 row[][].cell 来获取数据。

    Action_select()
    {
        if(statu)
            { 
                char chQuery[1024];
                int status=0;
    
                lr_start_transaction("mysql_select"); 
    
                lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
                lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
                sprintf(chQuery,"SELECT username,password FROM people WHERE username='%s'",lr_eval_string("{user}")); 
                
                status = lr_mysql_query(Mconn, chQuery);
    
                lr_save_string(row[0][0].cell,"user1");
                lr_save_string(row[1][0].cell,"pw1");
    
                lr_output_message(lr_eval_string("User:{user1}"));
                lr_output_message(lr_eval_string("Password:{pw1}"));
    
                if(status!=0)
                    {
                        lr_end_transaction("mysql_select",LR_FAIL ); 
                    }
                else
                    { 
                        lr_end_transaction("mysql_select", LR_PASS); 
                    } 
              } 
        return 0; 
    }

    5. 编写 Action_delete 文件

    Action_delete()
    {
        if(statu)
            { 
                char chQuery[1024];
                int status=0;
    
                lr_start_transaction("mysql_delete"); 
    
                lr_output_message("The parameter user is : %s",lr_eval_string("{user}"));
                lr_output_message("The parameter password is : %s",lr_eval_string("{pwd}"));
                sprintf(chQuery, "DELETE FROM people WHERE username='%s'",lr_eval_string("{user}")); 
    
                status = lr_mysql_query(Mconn, chQuery);
    
                if(status!=0)
                    {
                        lr_end_transaction("mysql_delete",LR_FAIL ); 
                    }
                else
                    { 
                        lr_end_transaction("mysql_delete", LR_PASS); 
                    } 
              } 
        return 0; 
    }

    6. 编写 vuser_end 文件

    vuser_end()
    {
        lr_mysql_disconnect(Mconn);
        return 0;
    }
  • 相关阅读:
    ZOJ Problem Set–2417 Lowest Bit
    ZOJ Problem Set–1402 Magnificent Meatballs
    ZOJ Problem Set–1292 Integer Inquiry
    ZOJ Problem Set–1109 Language of FatMouse
    ZOJ Problem Set–1295 Reverse Text
    ZOJ Problem Set–1712 Skew Binary
    ZOJ Problem Set–1151 Word Reversal
    ZOJ Problem Set–1494 Climbing Worm
    ZOJ Problem Set–1251 Box of Bricks
    ZOJ Problem Set–1205 Martian Addition
  • 原文地址:https://www.cnblogs.com/miniren/p/7151224.html
Copyright © 2011-2022 走看看