LoadRunner之腳本編寫

2021-03-02 金陽光測試

性能測試工程師要懂代碼麼?答案是必須的。好多測試員認為在loadrunner中編寫腳本很難很牛X ,主要是大多測試人員並未做過開發工作,大學的那點程序基礎也忘記的差不多了。還有非計算機專業出身的測試員,所以對代碼望都比較望而生畏。
  好多人認為loadrunner只支持C語言(包括我之前也一直這麼認為),因為loadrunner默認的腳本是C語言的,其實它支持目前所有主流的語言,如:Java User、VB User、VB script User 、Javascript User、Mmicrosoft .NET等,總有一款適合你的吧,最起碼C語言是必修課吧。
  對於編寫loadrunner腳本的態度
  現在有一輛自行車放在你的面前,你為顯示自己體力很好,每天走路去上班。我騎車只要半小時,而你走路卻要2小時,我們的目的是一樣的,你是為了讓人說你牛呢,還是讓人說你傻呢?當然自行車不是萬能的,比如,上班的地點在山上,自行車跟本上不去,自然走路就是唯一的選擇了。
  所以,對於loadrunner腳本,能錄製的部分就錄製改,不能錄製的就手寫,但前提是我們要會寫腳本。
  認識loadrunner腳本                           
  Loadrunner自帶了一個小飛機訂票系統

  我們先啟動 Start Web server 服務,如果啟動成功,桌面右下角會有一個綠色的X ,然後打開瀏覽器訪問
  http://127.0.0.1:1080/WebTours/  下面是我們loadrunner錄製一個登錄過程。
  Action()
  {
  web_url("WebTours",
  "URL=http://127.0.0.1:1080/WebTours/",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=",
  "Snapshot=t1.inf",
  "Mode=HTML",
  LAST);
  lr_rendezvous("集合點");
  lr_start_transaction("登陸時間");
  web_submit_form("login.pl",
  "Snapshot=t2.inf",
  ITEMDATA,
  "Name=username", "Value=test1", ENDITEM,
  "Name=password", "Value=123456", ENDITEM,
  "Name=login.x", "Value=59", ENDITEM,
  "Name=login.y", "Value=5", ENDITEM,
  LAST);
  lr_end_sub_transaction("登陸時間",LR_ABORT);
  return 0;
  }  
  上面的代碼中有大括號「{}」,返回函數「 return 」,如果你有編程基礎的不會說對於上面的代碼一點都看不懂。只是上面的腳本沒有使用我們平時用到的東西,如定義常量、變量,分支(if....else if....)、循環語句(for...)
  下面我們動手寫個小程序,一個乘法運算,求員工工資的總合。
  #define COUNT 100
  #define SALARY 4000
  Action()
  {
  int total;
  total = COUNT * SALARY;
  lr_output_message("100人合計薪資支出為:%d",total);
  return 0 ;
  }
  #define COUNT 100
  #define SALARY 4000     定義一個全局常量。
  lr_output_message    輸出語句,這個和我們所學的C 語言不一樣,在C中我們會用println 來輸入結果。
  運行結果:
  
  Starting iteration 1.
  Starting action Action.
  Action.c(9): 100人合計薪資支出為:400000    ----這裡將運行結果列印輸出
  Ending action Action.
  Ending iteration 1.
  
  一個有意思的小程序                                                              
  當然了,上面的程序太雞肋了,我只是想表達,loadrunner 也可以運行我們上學時學的那些普通的小程序。他們是一樣一樣的。
  下面看個比較有意思的小程序,通過隨即數和分支(選擇)語句switch來完成
  Action()
  {
  int randomnumber;  
  randomnumber = rand() % 3+1;
  switch (randomnumber) {
  case 1:
  {
  lr_rendezvous("訪問百度集合點");
  web_url("www.baidu.com",
  "URL=http://www.baidu.com/",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=",
  "Snapshot=t12.inf",
  "Mode=HTML",
  EXTRARES,
  "Url=http://s1.bdstatic.com/r/www/img/i-1.0.0.png", ENDITEM,
  "Url=/favicon.ico", "Referer=", ENDITEM,
  "Url=http://s1.bdstatic.com/r/www/img/bg-1.0.0.gif", ENDITEM,
  LAST);
  return 0;
  }
  case 2:
  {
  lr_rendezvous("訪問谷歌集合點");
  web_url("www.google.com.hk",
  "URL=http://www.google.com.hk/",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=",
  "Snapshot=t10.inf",
  "Mode=HTML",
  EXTRARES,
  "Url=http://ssl.gstatic.com/gb/images/b_8d5afc09.png", ENDITEM,
  "Url=/images/srpr/logo3w.png", ENDITEM,
  "Url=/extern_chrome/749e1ce3c3e5f171.js", ENDITEM,
  "Url=/images/swxa.gif", ENDITEM,
  "Url=/favicon.ico", "Referer=", ENDITEM,
  "Url=http://ssl.gstatic.com/gb/js/sem_0e1289051da7e9e3697c2025d9490acd.js", ENDITEM,
  "Url=http://www.google.com/textinputassistant/tia.png", ENDITEM,
  LAST);
  return 0;
  }
  case 3:
  {
  lr_rendezvous("訪問有道集合點");
  web_url("www.youdao.com",
  "URL=http://www.youdao.com/",
  "Resource=0",
  "RecContentType=text/html",
  "Referer=",
  "Snapshot=t7.inf",
  "Mode=HTML",
  EXTRARES,
  "Url=http://shared.ydstatic.com/oxo/p/pic.gif", ENDITEM,
  "Url=http://shared.ydstatic.com/oxo/p/logo.png?1", ENDITEM,
  "Url=http://shared.ydstatic.com/oxo/p/nv_line.gif", ENDITEM,
  "Url=http://shared.ydstatic.com/r/2.0/p/pic.gif", ENDITEM,
  LAST);
  return 0;
  }
  }
  }  

上面的程序,我分別錄製了百度、谷歌、有道訪問三個網的首頁的代碼,我想在運行腳本時,隨機的去訪問其中一個網站,如何做呢?我們通過隨機函數,隨機出1~3之間的整數,根據隨機來的結果,然後執行switch語句中的代碼。  
  下面來看我的結果
  為了查看腳本結果更清晰,我在每一段腳本前面加了一個集合點「lr_rendezvous」函數。
  Starting iteration 1.
  Starting action Action.
  Action.c(57): Rendezvous 訪問有道集合點
  Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/pic.gif" (specified by argument number 9)      [MsgId: MMSG-26577]
  Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/logo.png?1" (specified by argument number 11)      [MsgId: MMSG-26577]
  Action.c(59): Downloading resource "http://shared.ydstatic.com/oxo/p/nv_line.gif" (specified by argument number 13)      [MsgId: MMSG-26577]
  Action.c(59): Downloading resource "http://shared.ydstatic.com/r/2.0/p/pic.gif" (specified by argument number 15)      [MsgId: MMSG-26577]
  Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/yd.js?201207131" in HTML "http://www.youdao.com/"      [MsgId: MMSG-26659]
  Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/nav.js?201207131" in HTML "http://www.youdao.com/"      [MsgId: MMSG-26659]
  Action.c(59): Found resource "http://shared.ydstatic.com/dao/search/outweb/js/suggest.js?201207131" in HTML "http://www.youdao.com/"      [MsgId: MMSG-26659]
  Action.c(59): web_url("www.youdao.com") was successful, 30006 body bytes, 3347 header bytes, 39 chunking overhead bytes      [MsgId: MMSG-26385]
  Ending action Action.
  Ending iteration 1.
  通過腳本讀取文件                                                                         
  為了增加語言的強大,高級語言不可以把一個程序的實現從頭到尾寫到文件裡,這樣可讀性和維護很差,也無法實現團隊發,肯定會相互調用接口函數庫等。當然,讀取文件也是常用的操作,下面我們來看一個讀取文件的例子。
  我們事先準備一個文件test.txt ,裡面隨便你輸入些什麼內容吧!
  Action()
  {
  int count,total=0;
  char buffer [50];
  long file_stream;
  char * filename = "C:\test.txt";  //讀取文件的存放位置
  //判斷是否可以讀取文件
  if((file_stream =fopen(filename,"r"))==NULL)  
  {
  lr_error_message("不能打開%s文件!",filename);
  return -1;
  }
  while(!feof(file_stream))
  {
  count=fread(buffer,sizeof(char),50,file_stream);  //從文件中讀取50個字符
  total=total+count;   //字符個數計數
  if(total>=50)
  {
  fclose(file_stream);  //關閉文件
  lr_output_message("文件的前50字符:%s",buffer);
  break;  //退出循環
  }
  }
  return 0;
  }
  上面的代碼中我加了注釋,這裡沒必須再做解釋。
  下面來看我的運行結果:
  Starting iteration 1.
  Starting action Action.
  Action.c(24): 文件的前50字符:01234567890123456789012345678901234567890123456789
  Ending action Action.
  Ending iteration 1.
  loadrunner難麼? 對於有編程基礎的一點都不都。我們所要做的就是熟悉loadrunner的常用函數罷了。

相關焦點

  • LoadRunner性能測試系統學習教程:腳本編寫之關聯技術(6)
    上期講到LoadRunner性能測試腳本編寫之參數化技術,這期我們一起來學習腳本編寫之關聯技術。
  • LoadRunner腳本開發
    根據改進腳本方法和腳本語言規則來修改腳本。   改進腳本的方法:   1)為每一個GUI的screen添加事務語句來獲得事務時間。   2)添加顯示數據來幫助調試。   3)添加驗證點來驗證是否期望的文本或者圖片在每個腳本執行後顯示。
  • 手把手教你學習Loadrunner腳本函數(一)
    吳老的《selenium webdriver 實戰寶典》出版了loadrunner
  • 一次使用 Go 語言編寫腳本的經歷
    本文介紹了我如何嘗試使用 Go 語言進行腳本編程的經歷。文中我將討論 Go 腳本的必要性,我們預期的表現以及可能的實現方式。在討論過程中,我講深入探討腳本、Shell 和 Shebang。最終,我們將會討論讓 Go 腳本工作的解決方案。為什麼 Go 語言適合編寫腳本?
  • C4D教程-Python腳本編寫基礎案例教程 Python Scripting,,從此腳本編寫不再難
    同時,作者還有一些很棒的建議創建類似於Photoshop的動作,你可以創建一個腳本並運行只需一個點擊,就可以完成多步驟過程。腳本可以經常為你做的任何事,腳本可以節省大量的時間。不管怎樣,希望你喜歡。他有很多學習的腳本和其他資源的連結。
  • 手把手教你編寫抖音自動評論腳本
    某註冊機自動生成註冊碼——按鍵精靈PC版腳本編寫2. 抖音自動評論——按鍵精靈手機版使用及腳本編寫3. Lua插件使用及編寫 4. 拓展功能,看結尾Tips5. 非技術工作者可以了解到,很多功能表現,沒有那麼複雜,程序可以代替手工6. ++0×02 某註冊機自動生成註冊碼不是本文重點,會簡單概過(Kuo)。
  • 短視頻小白如何寫腳本,編寫拍攝腳本的步驟
    腳本是製作短小故事視頻的強大工具,但它們也嚇跑了許多準備拍攝短小故事視頻的創作者。其實,對於短視頻小白來說,寫劇本並不難用,企鵝的眼睛要為大家總結製作短片的「三個步驟」。在確定了需要執行的細節後,考慮使用哪種鏡頭來呈現它,然後編寫一個非常具體的快照腳本。結語對於短視頻創作團隊來說,腳本是提高效率,保證主題,節省溝通成本的重要工具。天海傳媒抓住短視頻拍攝製作,歡迎諮詢。創作腳本則要先明確主題,再一步步細化,直至形成能保證視頻順利拍攝的詳細腳本。
  • 初學者如何編寫Jmeter測試腳本?
    大致流程1、導入jar包:導入Jmeter相關jar包2、編寫腳本:使用Eclipse或者IntelliJ IDEA,進行Java測試腳本的編寫3、導出為jar包:使用Eclipse或者IntelliJ IDEA將測試腳本編譯打包為jar包導出4、配置Jmeter:使用自編譯的jar包,以及一些相關配置進行性能測試5
  • jmeter錄製腳本
    看師資,看課程看實戰,看就業選擇軟體測試,選擇松勤教育對大多數剛開始接觸性能測試的人來說,代碼功力可能不是太好,我們可以通過工具,錄製腳本來進行測試,以達到我們的目的一般來講,錄製腳本有兩種方法一、利用badboy進行腳本錄製1、下載安裝
  • 如何編寫IVR腳本(附示例)
    CTI論壇(ctiforum.com)(編譯/老秦):我們提供了一個編寫IVR腳本的八步過程,同時提供了一些關鍵的注意事項。  第3步--想想是什麼導致客戶拿起電話  創建IVR腳本應該是整個客戶旅程的一部分,而不是作為一個孤立的系統來對待。IVR不應以聯絡中心為中心。  正如SteveHindley所說,「當設計一個聯絡中心的腳本時,設計師真的需要考慮客戶是從哪裡來的,以及是什麼導致他們拿起電話的。因此,腳本需要與此類查詢匹配。」
  • 2012影視編導:編寫分鏡頭腳本的寫作方法
    對於30秒的影視廣告,要充分表達廣告信息內容,是件不容易的事,所以編寫鏡頭的長度,要儘可能考慮時間這一因素。  (2)鏡頭技巧因素。  影視廣告的畫面要求緊湊,有邏輯性。 因此,運用景別技巧要符合認知規律和邏輯規律,鏡頭組接技巧要富有節奏辱感。  (3)畫面與解說因素。
  • GG入門學習第七課:新人五分鐘學會GG腳本編寫
    GG入門學習第七課:新人五分鐘學會GG腳本編寫   什麼是GG腳本?
  • 使用Visual studio code 作為外部 IDE 編寫 Blender2.9 腳本
    Blender 有自己的內置文本編輯器,用於編寫腳本和加載項,但在外部 IDE中開發它們非常方便,這些 IDE 為用戶提供了更多功能,如自動完成、語法突出顯示、與版本控制系統的集成以及其他使開發更快、更容易的工具。這是一個免費的通用環境,支持各種程式語言的開發,包括 Blender API 和 Python語言。
  • 開源軟體分享:一個免ROOT支持用JS編寫自動化腳本的神器
    最近在逛github時發現一個不錯的安卓開源項目,支持用javascript編寫自動化腳本,可以模擬人工點擊、滑動等一系列操作。iOS 應用,可以執行標準的 JavaScript 腳本)和Workflow。
  • 開始你的第一個JMeter腳本:利用Jmeter錄製腳本的2種方法匯總
    但Jmeter與LoadRunner相比也有很多的不同點,那麼我們就先來看看這兩個工具的異同:1、jmeter 的架構跟loadrunner原理一樣的,都是通過中間代理,監控&收集並發客戶端發現的指令,把他們生成腳本,再發送到應用伺服器,再監控伺服器反饋的結果的一個過程.
  • 在LoadRunner中執行命令行程序之:popen()取代system()
    在LoadRunner中執行命令行程序之:popen()取代system()    我想大家應該都知道在LoadRunner可以使用函數system()來調用系統指令,結果同在批處理裡執行一樣。lr_output_message("設備信息: %s", lr_paramarr_idx("output", i));     }     pclose(fp);     return 0; }》》》推薦閱讀《《《1、性能測試學習筆記-場景設計2、Web站點性能調優完全攻略3、應用系統性能調優之性能分析
  • Linux下高效編寫shell腳本的10個建議
    腳本的編寫應該是一個必備的基本技能了,本文將分享 10 個寫出高效可靠的 shell腳本的實用技巧本文主要內容來源於《10 Useful Tips for Writing Effective Bash Scripts in Linux》,再加上自己的一點理解而成。
  • 編寫Linux Shell腳本的最佳實踐
    具體的來說,對於shell腳本,注釋一般包括下面幾個部分: shebang 腳本的參數 腳本的用途 腳本的注意事項 腳本的寫作時間,作者,版權等 各個函數前的說明注釋 一些較複雜的單行命令注釋 參數要規範 這一點很重要,當我們的腳本需要接受參數的時候,我們一定要先判斷參數是否合乎規範
  • 什麼是腳本語言,你用過哪些腳本語言
    一個腳本可以使得本來要用鍵盤進行的相互式操作自動化。一個Shell腳本主要由原本需要在命令行輸入的命令組成,或在一個文本編輯器中,用戶可以使用腳本來把一些常用的操作組合成一組序列。主要用來書寫這種腳本的語言叫做腳本語言。很多腳本語言實際上已經超過簡單的用戶命令序列的指令,還可以編寫更複雜的程序。