老李分享:loadrunner操作mysql数据库

 

     在poptest测试开发工程师就业培训的课程中,针对一套商业系统进行性能测试,目标是mysql后台数据库的负载能力,在这里我把测试代码进行了简化,主要是循环单插入数据100次,只是针对单表进行插入,在课堂上我们构造了复杂的应用测试场景,后台表涉及到多表,通过频繁插入操作查看负载情况。db2的数据库操作大家可以看前面的文章。

     测试开发工程师没有那么难,关键是训练,poptest是唯一一家在做测试开发工程师培训的机构,在不断的摸索更加有效的培训方式。

#define MAX 100
Action()
{
 
  int i,rc,fp;
  int db_connection; // 数据库连接
  int query_result; // 查询结果集 MYSQL_RES
  char** result_row; // 查询的数据
  char *server = "127.0.0.1";
  char *user = "laoli";
  char *password = "0123456";
  char *database = "testing";
  int port = 3306;
  int unix_socket = NULL;
  int flags = 0;
  long t;
  time(&t);

  rc = lr_load_dll("c:\\Program Files\\APMServ5.2.6\\MySQL5\\lib\\libmysql.dll");
 
  if (rc!= 0) {
    lr_error_message("Could not load libmysql.dll");
    lr_abort();
  }
 
  // 创建MySQL对象
  db_connection = mysql_init(NULL);
  if (db_connection == NULL) {
    lr_error_message("Insufficient memory");
    lr_abort();
  }
 
  // 连接到MySQL数据库
  rc = mysql_real_connect(db_connection, server, user, password, database, port, unix_socket, flags);
  if (rc == NULL) {
    lr_error_message("%s", mysql_error(db_connection));
    mysql_close(db_connection);
    lr_abort();
  }
    // 打开文件资源(初始化)
  fp=fopen("d:\\Test\\VirtualAccount\\CreateVirtualData.txt","at");
  if(fp == NULL){
     lr_log_message("Error !");
   //fprintf(stderr,"fopen failed!%s\n",strerror(errno));
  fclose(fp);
  lr_abort();
  }

//  其中 crtime必须为当日日期 pay_id每条记录不能重复。number为商品ID,money为本次入账金额。
   for(i=0;i<=MAX;i++)
   {
  
   // lr_output_message("Count: %d ",i);  
     lr_save_string (lr_eval_string("insert into tudou_money (`user`,`name`,  `time`, `num`) "
 "VALUES ('010','{name}', '2015-08-17 08:11:10', '1')"),"InsertQuery");
  rc = mysql_query(db_connection, lr_eval_string("{InsertQuery}"));
     
    lr_output_message("--------Current SQL is :%s",lr_eval_string("{InsertQuery}"));
   //写文件操作
    fprintf(fp,"CurrnetTime is:%s Counts:%d ---Current SQL is :%s\n",ctime(&t),i,lr_eval_string("{paramInsertQuery}"));

     //对执行语句的结果判断,当出错时输出错误到指定文件中并关闭资源终止脚本执行。

    if (rc != NULL) {
    fprintf(fp,"CurrnetTime is:%s Counts:%d ---Error SQL is :%s\n",ctime(&t),i,lr_eval_string("{paramInsertQuery}"));
    mysql_close(db_connection);
    fclose(fp);

   lr_abort();
  }
 

   }
  if (rc != 0) {
    lr_error_message("%s", mysql_error(db_connection));
    mysql_close(db_connection);
    lr_abort();
  }
  /*
  // 从数据库读取当前插入的数据并显示
  lr_save_string (lr_eval_string("select * from test_users where user_id='1'"),"SelectQuery");
  rc = mysql_query(db_connection, lr_eval_string("{SelectQuery}"));
  lr_output_message("--------Current SQL is :%s",lr_eval_string("{SelectQuery}"));
  if (rc != 0) {
    lr_error_message("%s", mysql_error(db_connection));
    mysql_close(db_connection);
    lr_abort();
  }
 
  query_result = mysql_use_result(db_connection);
  if (query_result == NULL) {
    lr_error_message("%s", mysql_error(db_connection));
    mysql_free_result(query_result);
    mysql_close(db_connection);
    lr_abort();
  }
  */
    // 释放MySQL与文件资源
  mysql_close(db_connection);
  fclose(fp);
  return 0;
}

  整个代码核心思路就是打开连接,操作数据库(操作n次,形态多样),关闭连接,

   poptest测试开发工程师,性能测试咨询群:450192312

最新文章

  1. Json与Bean互转,Timestamp类型的问题
  2. ubuntu优化使用
  3. spring与redis简单整合
  4. paip.环境配置整合 ibatis mybatis proxool
  5. HDU 5996:dingyeye loves stone(阶梯博弈)
  6. Python路径总结
  7. 序列变换(Lis变形)
  8. DSOframer 无法正常加载的解决方案
  9. 关于playframework2.5
  10. StreamWrite-StreamRead 读写文本文件
  11. [置顶] oracle存储过程中单引号及字符串拼接处理
  12. 通过加载Kernel32来动态判断 当前操作系统32bit还是64bit
  13. es6基础系列一:let和const
  14. flask刷新token
  15. vue axios封装以及登录token过期跳转问题
  16. python selenium Chrome模拟手机浏览器
  17. loadtxt函数
  18. java中值类型与引用类型的关系
  19. python之配置日志的几种方式
  20. 微信小程序tabbar设置样式在哪里改

热门文章

  1. 征服恐惧!用 Vim 写 iOS App
  2. kbhit()的三个测试
  3. path和classpath的用途
  4. devexpress设置系统全局字体(含工具栏字体)
  5. groovy学习(四)io
  6. git + tortoisegit安装及配置
  7. JavaScript内置对象-Array
  8. 2017-2-19 C#基础 基本数据类型的转换,转义字符,常量
  9. 从CMOS到触发器(二)
  10. Omi教程-插件体系