[個人筆記] Visual Studio Web測試外掛程式與全域變數
由於WebTest時,可能會針對測試的目標網站位址會有變動(例如測不一樣環境同樣網站的情境),單純參數化Web伺服器雖可簡單解決,但是當WebTest多時,每個Test都要做修改也是相當費工夫的,所以在開發上考量時,希望可以將參數全域化,就像是Config一樣的設定是最方便的,本文用Web測試外掛程式 + XML實現這個想法。
首先簡單快速說明一下Web測試外掛程式的建立準備工作:
1. 建立類別庫專案
2. 加入參考
- 若要擴充 WebTestPlugin 及 WebTestRequestPlugin,需參考:Microsoft.VisualStudio.QualityTools.WebTestFramework
- 若要擴充 LoadTestPlugin,需參考:Microsoft.VisualStudio.QualityTools.LoadTestFramework
- 注意測試專案中使用的DLL版本,此處參考的DLL版本需與測試專案中的一致,筆者就有9.0.0.0與10.0.0.0兩個版本,版本不同會出現類似下面畫面的錯誤,將外掛程式的參考DLL版本設定正確即可。
3. 建立一個PlugIn類別,並using Microsoft.VisualStudio.TestTools.WebTesting與繼承WebTestPlugin
4. 覆寫PreWebTest:因為我們要做的是全域參數,在這邊我們就要覆寫PreWebTest,使每次要執行WebTest前就先執行這個方法。
以上完成就可以初步建立一個Web測試外掛程式,其它要做的程式工作接下來後面會再說明,另可參考HOW TO:建立 Web 效能測試外掛程式
接著在剛剛建立的類別庫專案中,建立一個讀取參數用的類別,內部程式碼如下:
public class WebTestSettings
{
public string ApiURI { get; set; }
internal void ReadConfig(string pConfigFilePath)
{
StreamReader tReader = new StreamReader(pConfigFilePath);
XmlSerializer tSerializer = new XmlSerializer(typeof(WebTestSettings));
WebTestSettings tReadSettings = (WebTestSettings)tSerializer.Deserialize(tReader);
this.SqlConnectionString = tReadSettings.SqlConnectionString;
this.ApiURI = tReadSettings.ApiURI;
tReader.Close();
}
}
然後建立一個設定檔XML,未來只要修改這個設定檔的值就可以改變測試目標的URL:
<WebTestSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="WebTestSettings.xsd">
<ApiURI>待測網址</ApiURI>
</WebTestSettings>
再來回到PlugIn類別,增加參數並覆寫PreWebTest方法:
private const string tSettingsFile = "設定檔.xml";
public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
tSettings.ReadConfig(tSettingsFile);
e.WebTest.Context.Add("ApiURI", tSettings.ApiURI);
base.PreWebTest(sender, e);
}
再幾個步驟才能完成將外掛程式與設定檔融入至測試專案的工作:
1.將剛剛建立的類別庫加入到測試專案的參考中。
2.將設定檔XML放入測試專案,並將其檔案屬性設定有更新時才複製到輸出目錄:
3.設定部署項目,這樣在執行測試時才會把設定檔一起部署到資料夾中,否則會抓不到設定檔造成測試錯誤,這個工作比較複雜:
- 打開測試檢視
- 設定部署項目
4.在WebTest的根節點上按右鍵,加入Web測試外掛程式,並選擇剛剛的外掛程式類別庫。
5.最後不要忘了把測試URL改成用{{}}包住的參數{{ApiURI}},並確認測試外掛顯示在下方,這樣子未來進行WebTest時,系統就會自動將設定檔中的ApiURI代入每次WebTest。
以上,歡迎大家指教與討論,謝謝各位。