2010-07-06 59 views
1

有在LoadRunner方案一對夫婦的來源隨機:LR:我可以使LoadRunner確定性中的僞隨機?

  • rand()函數
  • 隨機思考的時間差(運行時設置)
  • 隨機起搏時組件(運行時設置)
  • 隨機參數(作爲VUGen測試的一部分)

我使用這些功能,我可以和他們的僞隨機性一起生活。然而,我不能忍受這樣一個事實,即所有包含至少其中一種功能的場景運行是僞隨機和不確定的,即對於給定的開始狀態(隨機種子),我希望兩次運行產生完全相同的負載,包括時間(步調和思考時間)。 所以我想要兩次運行基於完全相同的隨機序列。 這意味着我想自己種下所有的隨機生成器,作爲每次運行初始化的一部分。

我可以使用srand()爲rand()設置種子值。在初始化時設置特定的(硬編碼的)種子值通常會導致所有虛擬用戶通過rand()發送相同的序列。如果我使用VUser標識號進行播種,我甚至會爲每個vuser獲得不同的rand()序列,而對於每個用戶來說,它們仍然是相同的。

那麼LR中的其他僞隨機源,rand()以外的那些呢? 我是否有機會將它們全部種下,以便獲得確定性的場景行爲?

我認爲這將有很大的幫助。爲了「平均」出結果統計中的隨機性(你是否同意這一點?),我不得不計劃很長時間和/或非常高流量的測試場景。整天做。

回答

2

已經涵蓋。自4.51以來,我一直在使用LoadRunner,但我無法回想一個沒有設置隨機種子的版本。通常這是在控制器中設置的場景運行時間設置中。您應該能夠找到適用於您的LoadRunner版本的文檔,方法是打開Acrobat版本的控制器用戶指南並搜索「種子」一詞。

+0

哇,真酷。因爲這是真的。我怎麼能忽略這個。這是它應該是的地方,但我不知道它。下次,我會驗證這是否真的有效,但我認爲那正是我期待的指針。謝謝。 – TheBlastOne 2010-12-07 07:02:57

0

您的問題的簡短回答是:

Random implies just what it says => "Random". 

如果使用「內置」的,你必須通過內部隨機種子是如何初始化無法控制你幾乎擰參數隨機特徵,而這不能以任何方式下一個值預測。

如果您最終想要實現的是推斷結果並預測服務器在負載下的行爲,那麼您將處於非常艱難的道路之中。

推斷結果

Your run with 100 vusers and achieve an avg. of 50-60 hits/sec with 
response times under 3 sec. 

Logically 1000 vusers (10x load) would give you 500-600 hits/sec ... 

But what about the response times? How do you extrapolate them? How do you know 
when the web-server(s) chokes and achieves it's knee-point? 

記住,命中/ sec是成正比的響應時間...因此預測命中/秒(或頁/秒)變得非常困難和不準確

事情你無法控制

即使你達到另一個運行的「精確」的副本,你仍然必須處理與響應時間和網絡延遲一樣,無論情況如何(並且完全不受您的控制),效果總是不同。

更「現實」的方式本身定義負載

負載測試是不是一門精確的科學,空載測試都不能模擬真實世界完全,但我們可以親近。我們這樣做的方式是我們儘可能地模擬個人用戶。通過這種方式,我們可以根據用戶類型設置負載預期,這是「業務」人員通常所瞭解的情況。

我們還劃分了「用戶」分爲不同的類型,如電源,正常或新手用戶 - 這些差別是它們運行的​​速度(和他們使用的UI的方式)。

通過這樣做,我們可以通過「負荷」目標具有一定的「預期的用戶負載」,而不是頁/秒或點擊次數/秒值或其他技術應用米。

我們還執行長奔跑看到服務的行爲隨着時間的推移,這樣一個72小時以上的測試是不尋常的耐力測試階段。這也說明,如果有一段時間的服務器上,以及如何後臺進程在「夜間」

+0

我看,並同意在「72小時以上的測試是不尋常的耐久性試驗階段」的聲明,這就是我來自哪裏。 然而,我強烈反對「隨機意味着它說什麼=>'隨機'」,因爲我們正在談論僞隨機生成器,它們是100%確定性的,因此如果你能夠控制種子值就可以重現 - - 如果你不這樣做,仍然是僞隨機的。 因此,如果我*有*可以訪問所有的種子,我不明白爲什麼我不應該通過產生完全相同的負載 - 取決於測試目標而使某個負載測試運行更加可重複。 – TheBlastOne 2010-07-07 16:55:09

+0

當前的情況是,隨機選擇的測試用例會導致非常非常不同的數據集(複雜性方面)需要處理,而且我沒有一種便宜或可靠的方法來對我的測試用例數據集進行分類,以便只選擇複雜的,或者只選擇便宜的測試用例。因此,隨機選擇任何東西(而不是控制* all *種子)迫使我執行非常非常長的負載測試運行,因此測試用例之間的巨大差異「平均」和運行返回有用的結果。 – TheBlastOne 2010-07-07 16:59:56

+0

「通過這種方式,我們可以根據用戶類型設置負載預期,這是」業務「人員通常所知道的。」 - 是的,*通常*;) – TheBlastOne 2010-07-07 17:02:10

2

播種隨機數生成器是必要像負載亞軍的系統影響服務器性能的任何內存泄漏。完美的例子 - 我想要測試一個代碼更改。我種下隨機數發生器,然後在不更改代碼的情況下運行。執行的功能序列將是隨機的,但兩種測試都將使用相同的序列。這使我能夠看到我的代碼更改的確切影響。如果沒有能力看到隨機數發生器,我將不得不在非常高的負載下運行非常長的測試來嘗試平均隨機性。

沒有種子,第二個測試會選擇一個完全不同的道路。而在另一次迭代中,又一次完全不同的道路。我想要RANDOM序列,但是可重複的RANDOM序列。這就是爲什麼所有現代語言都允許你種下隨機數字生成器的原因。 Load Runner客戶端只需添加一個文本字段,該字段允許您爲其隨機數生成器輸入「種子值」。

+0

我完全同意。那麼如何給VUgen提供VUGen腳本的隨機生成器?特別是基於隨機的參數?問題不是「如果」,而是「如何」。 – TheBlastOne 2010-11-09 14:32:56

+0

我現在很難接受K.Sandell的「否」答案和John的「YES。IMPERATIVE」答案。兩者都是正確的 - 沒有,因爲它不能完成,是的,因爲它需要得到穩定的,可比較的結果,而不會產生很長時間的負荷(所以隨機「平均」)。 – TheBlastOne 2010-11-12 12:13:07

+1

我必須補充一點,即使你實現了一個精確的RND序列,控制器/ LoadGen上還有其他不同的東西,使得運行不同。 lr_think_time()使用(如果設置)隨機X%到Y%,並且這個隨機時間是你無法控制的,並且就我所知不可能的種子而言。 – 2010-11-23 08:29:31