2011-11-29 169 views
3

在我們公司我們有單元測試。 我們正在考慮編寫一些自動化性能測試,這些測試也將成爲測試套件的一部分,以便開發人員和自動化構建人員都能夠運行它們。如果測試花費的時間超過一些預估時間,測試將會執行一些操作,然後失敗。自動化性能測試

的問題是,不同的計算機具有不同的CPU速度,並還處理在後臺運行可以減慢執行。那麼我們應該如何去做這些測試呢?

+0

這是什麼類型的應用程序? - 網頁,桌面... – blank

+0

網格計算。 – Lev

回答

2

一種策略是設計該代碼將運行在最好的機器你的性能指標;只要在更差的機器上運行得足夠快,就可以保證在生產中獲得更好的性能。基本上,包括知道它必須在較慢的機器上運行的模糊因素,大概在測試/開發期間。

另一種策略是測試設置過程中做一些基準,並使用該時間的金額作爲「單位時間」,而不是用秒。例如,使用dog-slow遞歸算法計算第20個斐波納契數,然後說所有的測試都必須在10「20-fibs」內運行,所以雖然在慢速機器上掛鐘時間將會變慢,你有一個獨立於機器的度量來衡量它的運行情況。

在後臺運行的進程比較困難。顯然,你通常不希望其他事情干擾你的測試,所以一種策略是儘可能地嘗試並消除它 - 常規開發人員可能會殺死一些進程並在出現故障時再次運行,並且持續集成框應該是保持相對清晰。

如果這不起作用,或者不夠好,可以嘗試相反的方法:在測試的同時運行一堆CPU/IO密集型進程以模擬過載系統,如果測試通過與環境,性能應該在一個正常的系統

1

根據您的程序(I/O,CPU,內存)的限制資源被罰款,你可以得到良好的結果測量所使用的CPU時間和比較它以系統速度。例如,我當前程序的性能測試通過time獲取用過的CPU時間,並從/proc/cpuinfo獲取CPU速度以測量計算所花費的週期數。

這種方法有兩個注意事項:首先,它不測量實現並行性,其次,它不衡量外在表現因素,如I/O使用。

1

如果想知道代碼更改如何影響性能並確保性能大於或等於先前的構建,那麼您需要每次都在已知的硬件配置文件上運行測試。做到這一點的最準確的方法是設置一臺機器,每次執行測試時用於測試。如果許多開發人員需要這樣做,有時候可能會同時創建一個虛擬機鏡像,然後他們可以啓動並指向測試執行,這將是值得的。

你不應該對開發商框自身運行這些,因爲正如你所提到的各種因素可能會影響對那些方框的測試的結果。

除非這些條件是作爲測試的一部分專門設置的,否則您應該避免嘗試在受測試系統外部(低磁盤空間,網絡帶寬,內存,cpu等)負載/應變情況下測量性能案件。例如,您可以進行3次不同的測試運行,一次是機器空載,另一次是中等負載(模擬其他程序在後臺運行),另一次是在高負載下。

您也可以在各種硬件配置文件上運行測試,作爲其他壓力/性能測試的一部分,但是對於每個構建來說,運行它們可能不會獲得太多價值。但是,如果您希望您可以針對不同的硬件配置文件進行幾次不同的測試運行,則需要更多的設置,因爲您需要設置額外的機器和/或VM映像以及啓動針對這些機器的測試的基礎結構,收集結果並報告。

1

+1對於Sam的迴應。過去我已經做了很多次,關鍵是要鎖定你的性能測試環境,並確保你最大限度地減少任何潛在的流量。

在devs的系統上運行測試可能是個別開發者的有用標誌,但是有一箇中央系統來運行測試是至關重要的。關於在虛擬機中執行此操作的一個警告:確保您瞭解虛擬機主機系統上的負載,因爲那裏的負載可能會影響託管虛擬機的性能。

我在夜間煙霧檢查期間運行這些套件時,得到了最好,最一致和最有用的結果。

0

這也是一個關於容差(或可接受的容量範圍)的問題,它會使您的測試有效。如前所述,理想情況下,您需要一個可預測,穩定和一致的設置來進行任何有用的比較。這就是說,如果你瞭解SUT的基本操作範圍(CPU可用,Mem Available等),那麼早期的開發人員測試可以在已知資源容限內的系統和條件的混合和匹配上完成。