• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何利用loadrunner做mysql壓力測試

    發表于:2011-08-31來源:未知作者:領測軟件測試網采編點擊數: 標簽:loadrunner
    最近跟測試組學習loadrunner的使用,測試組的姑娘們習慣用界面進行操作,而習慣linux平臺使用的我很多功能都使用代碼來實現了。 最近用loadrunner寫了一個模擬社區用戶壓測論壇數據庫的一個腳本,進行數據庫的壓力測試和優化工作。

      最近跟測試組學習loadrunner的使用,測試組的姑娘們習慣用界面進行操作,而習慣linux平臺使用的我很多功能都使用代碼來實現了。

      最近用loadrunner寫了一個模擬社區用戶壓測論壇數據庫的一個腳本,進行數據庫壓力測試和優化工作。

      用戶行為分析:

      在社區中,看帖的人是發帖人的10倍以上,而看帖人大概80%以上都在看新帖,20以下的用戶有挖墳行為。

      因此,設定如此的比率:每11個用戶,1個發帖,8個看最近30%的帖,兩個看老的70%的帖。

      我的論壇帖子回復表大概是:973505個帖子的回復,兩千多萬的回帖。

      根據這些數據,配合mysql的c api,寫如下腳本:

      注:腳本的my_mysql_insert()函數是有問題的,多線程下有一個資源符沒處理好,因為還不太了解loadrunner的線程機制,所以留下了一個bug。

      在做完這個腳本后,我發現我們測試機性能都不錯,很難在一個5G大小的單表上主鍵查詢造成很大的壓力,所以,計劃把dz論壇架設,用php+mysql真實環境下進行壓測,這樣可以順便練習http函數下的loadrunner編程。

      globals.h

      #ifndef _GLOBALS_H

      #define _GLOBALS_H

      #include "lrun.h"

      #include "web_api.h"

      #include "lrw_custom_body.h"

      #include "modal_dialog_callbacks.h"

      #define random(x) (rand()%x)

      #include

      #include

      #include

      #include

      #include

      #include

      #include

      #endif // _GLOBALS_H

      

     

     

      vuser_init.c

      MYSQL *db;

      MYSQL_ROW record;

      vuser_init()

      {

      char sql[128];

      MYSQL_RES *results1;

      lr_load_dll("libmysql.dll");

      db = mysql_init(NULL);

      mysql_real_connect(db, "192.168.8.32", "root", "123456", "sunboyu_test", 3311, "/tmp/mysql3311.sock", 1);

      sprintf(sql, "show tables");

      mysql_query(db, sql);

      results1 = mysql_store_result(db);

      while((record = mysql_fetch_row(results1)))

      {

      lr_log_message("table = %s", record[0]);

      }

      mysql_free_result(results1);

      return 0;

      }

      vuser_end.c

      vuser_end()

      {

      mysql_close(db);

      mysql_server_end();

      return 0;

      }

      Action.c

      Action()

      {

      int r1 = 0;

      char sql[128];

      r1 = random(11); //10種用戶,8種正常訪問,兩種在挖墳

      lr_log_message(" %d", r1);

      if(r1==11)

      {

      my_mysql_insert();

      }

      else

      {

      my_mysql_query( r1 );

      }

      return 0;

      }

      int my_mysql_query( int randid )

      {

      int r2 = 0;

      int j = 0;

      int count = 0;

      int page = 0;

      char sql[128];

      MYSQL_RES *results2;

      if(randid<2) //老數據,小部分 20%

      {

      r2 = random(700000);

      sprintf(sql, "SELECT COUNT(*) AS count FROM posts_jx3 WHERE tid = %d;",r2);

      lr_log_message("%s",sql);

      mysql_query(db, sql);

      results2 = mysql_store_result(db);

      while((record = mysql_fetch_row(results2)))

      {

      lr_log_message("count = %d", record[0]);

      }

      mysql_free_result(results2);

      page = count/10;

      lr_log_message("page = %d", page);

      for(j=0;j< =page;j++)

      {

      sprintf(sql, "SELECT * FROM posts_jx3 WHERE tid = %d LIMIT %d,10;",r2,j);

      mysql_query(db, sql);

      lr_log_message("%s", sql);

      if (j>0) {

      results2 = mysql_store_result(db);

      while((record = mysql_fetch_row(results2)))

      {

      lr_log_message("pid = %d", record[0]);

      }

      mysql_free_result(results2);

      }

      }

      }

      else //新數據,大部分 80%

      {

      r2 = random(273505);

      r2 = r2+700000;

      sprintf(sql, "SELECT COUNT(*) AS count FROM posts_jx3 WHERE tid = %d;",r2);

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>