qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          LoadRunner腳本編寫之三(事務(wù)函數(shù))

          關(guān)于腳本的這塊,前兩篇都在講C語(yǔ)言,其實(shí),要整理點(diǎn)實(shí)用的東西挺難,在應(yīng)用中多對(duì)錄制的腳本分析,但對(duì)于新手學(xué)腳本確實(shí)無(wú)從下手。

            先貼一個(gè)腳本:

            重點(diǎn)代碼部分:

          Action()
          {


              web_url("webhp",
                  "URL=http://www.google.com.hk/webhp?hl=zh-CN&sourceid=cnhp",
                  "Resource=0",
                .....
              lr_start_transaction("登陸");    //設(shè)置事務(wù)開始

              web_submit_data("ServiceLoginAuth",
                  "Action=https://accounts.google.com/ServiceLoginAuth",
                  "Method=POST",      
             ........

              web_file("web_find","defnngj@gmail.com",LAST);  //設(shè)置檢查點(diǎn)

              lr_end_transaction("登陸",LR_AUTO);    //設(shè)置事務(wù)結(jié)束

              return 0;
          }

            上面的一段代碼是我錄制的一個(gè)google登錄的過程,詳細(xì)過程描述:

            1、進(jìn)入google首頁(yè)

            2、點(diǎn)擊右上角的登錄鏈接,跳轉(zhuǎn)到登錄頁(yè)面

            3、設(shè)置登錄事務(wù)開始,輸入用戶名密碼,點(diǎn)擊登錄

            4、登錄成功后跳轉(zhuǎn)后google 首頁(yè),右上角出現(xiàn)登錄的用戶名,設(shè)置事務(wù)結(jié)束。

            檢查點(diǎn)

            在上面的操作中,我設(shè)置了一個(gè)檢查點(diǎn),web_fiind ,判斷后我是否登錄成功一個(gè)重點(diǎn)的標(biāo)志是在google首頁(yè)右上角是否出現(xiàn)我的用戶名。所以,我根據(jù)這個(gè)特點(diǎn)設(shè)置檢查點(diǎn),來檢查登錄是否成功。設(shè)置檢查點(diǎn)的函數(shù)有三個(gè),

            web_find()函數(shù):在頁(yè)面中查找相應(yīng)內(nèi)容

            web_reg_find()函數(shù):在緩存中查打相應(yīng)的內(nèi)容

            web_image_check()函數(shù):在頁(yè)面中查找具體圖片。

            他們的具體用法,你們可以在腳本的編寫中,光標(biāo)定位在函數(shù)中,按F1 查看幫助文檔或參考其它文檔。

            關(guān)于腳本中的事務(wù)

            我們?cè)谝粋€(gè)腳本中可能要做很多操作,我們?yōu)榱朔智迥_本中某一段代碼具體是做什么,所以,在執(zhí)行某個(gè)操作的前后需要添加事務(wù),用來標(biāo)志事務(wù)的開始與結(jié)束,這樣可以使腳本更清晰。當(dāng)然,對(duì)于不同的事務(wù)需要分開錄制。比如,某電子商務(wù)網(wǎng)站的瀏覽商品與交易。他們的比例是不同的,對(duì)于比較復(fù)雜的場(chǎng)景,是多個(gè)事務(wù)按不同的比例并行的。設(shè)置80%的用戶瀏覽商品,20%的用戶進(jìn)行交易。

            當(dāng)然,事務(wù)與事務(wù)之間是會(huì)有依賴關(guān)系的。如果我們把訪問首頁(yè)定為一個(gè)事務(wù),登錄定為一個(gè)事務(wù),瀏覽商品定為一個(gè)事務(wù),交易定為一個(gè)事務(wù)。那么我們要想錄制(編寫)交易的事務(wù),那么前面三個(gè)事務(wù)是先覺條件。所以,我們知道錄制一個(gè)腳本的目的是哪個(gè)操作,然后在其前后添加事務(wù)標(biāo)識(shí)。

            對(duì)80%的用戶瀏覽商品,20%用戶交易,交易的前提是先瀏覽一個(gè)商品,也就是所有用戶(100%)都瀏覽了商品,只有20%的用戶去交易。這樣是合乎邏輯的。

            事務(wù)函數(shù)

            在上面的腳本中我們用到了lr_start_transaction()函數(shù)和 lr_end_transaction()函數(shù)來標(biāo)識(shí)一個(gè)事務(wù)的開始與結(jié)束,除些之外,loadrunner還提供了許多與事務(wù)相關(guān)的函數(shù),這里介紹幾個(gè)常用的。

            1、lr_set_transaction_instance_status 用于設(shè)置事務(wù)的狀態(tài),事務(wù)的狀態(tài)包括:LR_PASS、 LR_FAIL 、  LR_AUTO 、  LR_STOP  。可以在腳本中根據(jù)條件設(shè)置事務(wù)的狀態(tài),例如,根據(jù)檢查點(diǎn)返回的結(jié)果來設(shè)置事務(wù)為通過還是失敗。

          if(event == GENERAL_ERROR)
                  lr_set_transaction_instance_status(LR_FAIL);
              lr_end_transaction("登陸",LR_AUTO);

            2、lr_fail_trans_with_error與lr_set_transaction_instance_status 類似,都可以用于設(shè)置事務(wù)的狀態(tài),區(qū)別在于lr_fail_trans_with_error除了可以設(shè)置的狀態(tài),還可以輸出錯(cuò)誤日志信息。

          if(status != SUCCESS)
                  lr_fail_trans_with_error("an error has occurred:%s",my_get_error_string(status));
              lr_end_transaction("登陸成功",LR_AUTO);

            3、lr_get_transaction_status與前兩個(gè)函數(shù)的作用相反,用于獲取事務(wù)的狀態(tài)。

          if (lr_get_transaction_status() == LR_FAIL)
              {
                  //由于web_url請(qǐng)求失敗了,所以沒有必要繼續(xù)執(zhí)行下去,因些設(shè)置事務(wù)狀態(tài)為FAIL
                  lr_end_transaction("登陸失敗",LR_FAIL);
                  return;
              }

            4、lr_get_transaction_duration 用于獲取事務(wù)所消耗的時(shí)間。這個(gè)就比較有意思了。

            我們登錄百度首頁(yè),插入一個(gè)事務(wù),然后訪問百度注冊(cè)頁(yè)面。下面計(jì)算訪問注冊(cè)頁(yè)面的時(shí)間。

            完整腳本:

          Action()
          {
              double trans_time;  //定義變量

              web_url("www.baidu.com", 
                  "URL=http://www.baidu.com/", 
                  "Resource=0", 
                  "RecContentType=text/html", 
                  "Referer=", 
                  "Snapshot=t14.inf", 
                  "Mode=HTML", 
                  EXTRARES, 
                  "Url=http://s1.bdstatic.com/r/www/cache/aoyun/img/i-1.0.1.png", ENDITEM, 
                  "Url=/favicon.ico", "Referer=", ENDITEM, 
                  "Url=http://s1.bdstatic.com/r/www/img/bg-1.0.0.gif", ENDITEM, 
                  "Url=http://nsclick.baidu.com/v.gif?pid=201&pj=www&rsv_sid=1289_1328_1262_1228_1344_1342_1186_1281_1178_1287_1320_1294_1330&fm=behs&tab=tj_reg&un=&path=http%3A%2F%2Fwww.baidu.com%2F&t=1343538345708", ENDITEM, 
                  "Url=https://passport.baidu.com/favicon.ico", "Referer=", ENDITEM, 
                  LAST);

              lr_start_transaction("訪問注冊(cè)頁(yè)");  //定義事務(wù)開始

              web_link("???", 
                  "Text=???", 
                  "Ordinal=2", 
                  "Snapshot=t15.inf", 
                  EXTRARES, 
                  "Url=../img/breadbg.gif", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, 
                  "Url=../js/pass_api_reg.js?v=20120711", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, 
                  "Url=../img/v2/regbtn-split.gif", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, 
                  "Url=../cgi-bin/genimage?0013435383780156BF1F30CF18D2332EA927154DCDAB3B6B40F9E25197273F556454857E2FADF7BA23531BE59EEDE0EF92F2F006F8D595B88A907E318D2A249CBAB109FCDB3AB38ED4453F3BC149C6A5FD6240B97D598BA84EE3CEEE3F4359D3469309D88EE55C19B04251D2212171720B476D0A0D6277787DD43D9BA29E426A82BFD90E248FA15A32F1838B3E15D63B8CFE4E3DC6EAD4F23FE0DB457E5AE6B82DACCB79EE9EF289", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, 
                  "Url=../img/v2/reg_input_bg.gif", "Referer=https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F", ENDITEM, 
                  LAST);

              trans_time=lr_get_transaction_wasted_time("訪問注冊(cè)頁(yè)");  //獲得消耗時(shí)間

              if (trans_time) {
                  lr_output_message("The duration up to the submit is %f seconds",trans_time);  //打印數(shù)輸出消耗實(shí)時(shí)間
              }else{
                  lr_output_message("the duration cannot be determined. ");
              }

              lr_end_transaction("訪問注冊(cè)頁(yè)",LR_AUTO);  //事務(wù)結(jié)束

              return 0;
          }




            重點(diǎn)代碼部分:

          Action()
          {
              double trans_time;  //定義變量

              web_url("www.baidu.com", 
                  "URL=http://www.baidu.com/", 
                 .....

              lr_start_transaction("訪問注冊(cè)頁(yè)");  //定義事務(wù)開始

              web_link("???", 
                  "Text=???", 
                  "Ordinal=2", 
                  "Snapshot=t15.inf", 
               ......

              trans_time=lr_get_transaction_wasted_time("訪問注冊(cè)頁(yè)");  //獲得消耗時(shí)間

              if (trans_time) {
                  lr_output_message("The duration up to the submit is %f seconds",trans_time);  //打印數(shù)輸出消耗實(shí)時(shí)間
              }else{
                  lr_output_message("the duration cannot be determined. ");
              }

              lr_end_transaction("訪問注冊(cè)頁(yè)",LR_AUTO);  //事務(wù)結(jié)束

              return 0;
          }

            運(yùn)行結(jié)果:

          .......
          Action.c(39): The duration up to the submit is 0.029588 seconds
          Action.c(45): Notify: Transaction "訪問注冊(cè)頁(yè)" ended with "Pass" status (Duration: 5.0300 Wasted Time: 0.0296).
          Ending action Action.
          Ending iteration 1.

            39行:持續(xù)時(shí)間長(zhǎng)達(dá)0.029588秒的提交

            45行:通知:交易”訪問注冊(cè)頁(yè)”結(jié)束,“通過”狀態(tài)(持續(xù)時(shí)間:5.0300 浪費(fèi)時(shí)間:0.0296)。

            從上面的結(jié)果中發(fā)現(xiàn),我們?cè)O(shè)置lr_get_transaction_wasted_time函數(shù)的時(shí)間0.029588 與事務(wù)結(jié)束浪費(fèi)的時(shí)間 0.0296 非常接近。 這是因?yàn)槲野?lr_get_transaction_wasted_time函數(shù)插入在了事務(wù)結(jié)果的前面,其實(shí),我們可以將lr_get_transaction_wasted_time插入在事務(wù)執(zhí)行過程的任意位置來計(jì)算消耗時(shí)間。

          相關(guān)鏈接:

          LoadRunner腳本編寫之一

          LoadRunner腳本編寫之二


          posted on 2012-08-10 10:21 順其自然EVO 閱讀(585) 評(píng)論(0)  編輯  收藏 所屬分類: loadrunner性能測(cè)試

          <2012年8月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 司法| 策勒县| 南川市| 南和县| 东港市| 沐川县| 轮台县| 温州市| 琼海市| 泾源县| 罗城| 义乌市| 通化市| 铜山县| 山西省| 灌云县| 东港市| 晋宁县| 内黄县| 武川县| 体育| 平邑县| 黄浦区| 华宁县| 土默特左旗| 诏安县| 尚志市| 武隆县| 大连市| 灵川县| 祁连县| 介休市| 含山县| 舞阳县| 新龙县| 当雄县| 安顺市| 璧山县| 遂平县| 炎陵县| 资兴市|