?? stressmark使用指南.html
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>StressMark 使用指南</title>
<style>
<!--
h1 { font-size: 16pt; font-weight: bold; color: #000080 }
p { font-size: 11pt }
pre { font-family: Courier New; font-size: 10pt; color: #006600 }
-->
</style>
</head>
<body bgcolor="#C0C0FF">
<table width="800" cellspacing="0" cellpadding="0" bgcolor="#000000"><tr>
<td width="100%" bgcolor="#000000" valign="top"
style="filter:wave(freq=7,lightstrength=20,strength=3)">
<i><font face="Courier New" size="2" color="#006600">
StressMark StressMark StressMark StressMark StressMark StressMark StressMark StressMark
StressMark StressMark StressMark StressMark StressMark StressMark StressMark StressMark
StressMark StressMark StressMark StressMark StressMark StressMark StressMark StressMark
StressMark StressMark StressMark StressMark StressMark StressMark StressMark StressMark
StressMark StressMark StressMark StressMark
</font></i>
</td></tr></table>
<div style="position:absolute;top:32;left:200;
filter:alpha(opacity=50,finishopacity=100,style=1)">
<span style="font-family:黑體;font-size:28px;font-style:italic;color:#80FF40">
StressMark 使用指南
</span>
</div>
<h1>簡介</h1>
<p>StressMark測試軟件是一個使用Visual C++編寫的,開放源代碼的測試工具,可以完成服務程序及重要算法的功能和性能測試,其最主要的功能是模擬多線程或多客戶端的自動化壓力測試。</P>
<p>
我們可以利用StressMark軟件完成的典型測試任務包括:</P>
<p>1. 在多線程環境下測試一個軟件模塊、一段關鍵算法是否可以正確運行,即代碼是否是多線程安全的。</P>
<p>2. 測試一個軟件模塊、一段關鍵算法在并發執行時的效率,如每個線程的平均執行時間等。</P>
<p>3. 模擬一個服務程序的多個客戶端,測試該服務程序對并發請求的響應是否正確。</P>
<p>4. 模擬一個服務程序的多個客戶端,測試該服務程序在并發請求的情況下,對每個客戶請求的響應效率。</P>
<p>5. 使用一臺或多臺高配置的測試計算機(多CPU,大內存),每臺計算機上運行一套StressMark,每套StressMark模擬多個客戶線程,以此測試服務程序在大壓力情況下的響應能力,這一方法甚至可以測出服務程序支持的并發數上限。</P>
<p>因為StressMark軟件的源代碼是完全開放的,基于這套源代碼,你完全可以改造出符合你的特定需求的自動測試程序,使StressMark可以完成更多的測試任務。</P>
<h1>相關概念</h1>
<p><B>測試包:</B>用戶根據特定測試需求制訂的,包含一個或多個不同測試用例
及其配置方式的描述性大綱。</p>
<p><B>測試用例:</B>指對一項特定的測試任務的描述,包括測試目標,輸入數據,
測試方法,實現代碼等。
在 StressMark 中,測試用例對應于一段具體的待測試代碼,該測試代碼由測試者提供,
并被嵌入到 StressMark 工程中。
測試時,可以對一個測試用例起多個測試客戶(線程)同時運行,也就是說,
一個測試用例同時可以有多個運行實例。
還可以對特定的測試用例指定測試次數,即指定在該測試用例的每個實例中,
重復執行多少次測試代碼。根據需要,用戶也可以指定每兩次重復之間的時
間間隔。</p>
<p><B>測試客戶:</B>或稱測試線程。指測試時某特定測試用例的一個具體的實例。
該實例以線程方式運行,并與該測試用例的其他實例同時啟動。
用戶可以在測試包中為每個測試用例配置測試客戶(線程)的數目。</p>
<p><B>測試次數:</B>某特定測試用例的每一個測試客戶(線程)中,待測試代碼
的重復執行次數。用戶可以在測試包中為每個測試用例配置測試次數。</p>
<p><B>間隔時間:</B>某特定測試用例的每一個測試客戶(線程)中,待測試代碼
兩次重復執行之間的間隔時間。單位是微秒。間隔時間可以在測試包中指定。</p>
<h1>使用指南</h1>
<p>
1. 使用 Visual C++ 6.0 打開項目 StressMark\StressMark.dsw;或使用 Visual
C++ .NET 7.0 打開解決方案 StressMark\StressMark.sln
</p>
<p>
2. 用Visual C++語言實現一個具體的測試用例類。
</p>
<p>所有的測試用例類均應派生于基類 StressCase,
必須實現 StressCase 類的 OneStep() 方法,并在 OneStep() 方法中填寫測試代碼。
測試用例類可以選擇實現 StressCase 類的 OnInitialize() 和 OnUninitialize() 方法,
以完成測試前的初始化和測試后的清理工作。在一個測試客戶(線程)中,
OnInitialize() 和 OnUninitialize() 方法僅被調用一次;
OneStep() 方法被調用的次數取決于測試者在測試包中配置的測試次數。
</p>
<p>測試者可以在測試用例類中包含測試所需的中間變量、方法等,
但<b>不要使用全局變量或全局資源</b>(因為測試案例是運行在線程環境中)。
對于無法使用 Visual C++ 實現的待測試代碼(如 Visual Basic
代碼),測試者可以先將待測試代碼包裝成 Visual C++
可以調用的 ActiveX Automation 組件或動態連接庫,再于 OneStep()
方法中編碼調用。
</p>
<p>一個簡單的測試包的例子如下:
</p>
<p>MyCase1.h
</p>
<pre>#include "stdafx.h"
#include "StressCase.h"
class MyCase1 : public StressCase
{
public:
DECLARE_DYNCREATE(MyCase1)
bool OneStep(CString& strErrorMessage);
};</pre>
<p>MyCase1.cpp</p>
<pre>#include "stdafx.h"
#include "StressCase.h"
#include "MyCase1.h"
IMPLEMENT_DYNCREATE(MyCase1, StressCase)
bool MyCase1::OneStep(CString& strErrorMessage)
{
// do something...
return true;
}</pre>
<p>注意:定義測試用例類必須分成頭文件(*.h)和實現文件(*.cpp),在頭文件
中的類定義體內必須包含語句</p>
<pre>DECLARE_DYNCREATE(ClassName)</pre>
<p>在實現文件中必須包含語句</p>
<pre>IMPLEMENT_DYNCREATE(ClassName, StressCase)</pre>
<p>上面的例子僅實現了OneStep()方法。需要時,也可以實現
OnInitialize() 和 OnUninitialize()
方法。測試者在測試用例代碼內可以通過 StressCase
類的成員變量獲得與自身相關的各種信息,包括案例名稱、線程號、測試次數等,
也可以在測試失敗時通過參數
strErrorMessage
返回錯誤信息(該錯誤信息將顯示在測試界面中),或者調用
StressCase 類的 LogEvent() 方法記錄系統日志(僅在 Windows NT/2000
下有效,日志信息記錄在操作系統的應用程序日志中,可以使用事件查看器閱讀)。</p>
<p>有關 StressCase
類的各成員變量及方法的使用的詳細信息,請參見頭文件
StressCase.h 中的代碼和注釋。</p>
<p>3. 將上面實現的頭文件和實現文件(如MyCase1.h和MyCase1.cpp)加入Visual
C++工程中。</p>
<p>4. 必要的話,重復2-3,實現其他測試用例類。</p>
<p>5. 修改 TestSuite.cpp 的內容,定義測試包。TestSuite.cpp
文件的格式及配置方法如下:</p>
<pre>
///////////////////////////////////////////////////////////////////////////
//
// TestSuite.cpp - 測試包定義
//
///////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "StressCase.h"
//
// 在此處包含所有具體的測試用例類的頭文件,例如
// #include "MyCase1.h"
// #include "MyCase2.h"
// ...
//
#include "MyCase1.h"
#include "MyCase2.h"
//
// 此處定義所有具體的測試用例
// 每個具體測試用例的定義語法為
//
// BEGIN_TEST_SUITE
// DECLARE_TEST_CASE(ClassName, Name, Clients, Times, Interval)
// ...
// END_TEST_SUITE
//
// 其中,ClassName 是測試用例的類名,
// Name 是顯示用的測試用例名稱,
// Clients 是指定為該測試用例起多少個客戶(線程)
// Times 是每個客戶(線程)中重復測試多少次
// Interval 是線程中每兩次測試間的時間間隔(微秒數,
// Interval 為 0 表示不間斷地連續測試)
//
//
BEGIN_TEST_SUITE
DECLARE_TEST_CASE(MyCase1, "測試用例一", 5, 5, 1000)
DECLARE_TEST_CASE(MyCase2, "測試用例二", 8, 10, 0)
END_TEST_SUITE
</pre>
<p>6. 編譯 StressMark 工程。注意要使用 Release
方式編譯,以保證測試所得的時間數據的精確。</p>
<p>7. 在測試環境中運行程序StressMark.exe。測試者可以在程序界面中使用"開始測試"、"終止測試"按鈕來啟動或停止測試過程,測試結束后,可以用"報表"按鈕輸出測試報告到文本文件中。如果因線程調度或測試代碼的原因,測試過程無法停止的話,測試者可以直接使用"殺所有線程"按鈕終止測試。</p>
<p>8. 其他更詳細的信息,如測試用例的執行方式,線程調度規則等,可以參見
StressMan.h 和 StressMan.cpp 中的代碼和注釋。</p>
<p align="right"> </p>
<p align="right"> </p>
<p align="right"><u><i>王詠剛</i>,<i>2002年2月</i></u></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -