對於 VSTS 的測試功能一直使用還算順利, 但前一陣子遇到將 Web Server 移到另一台 Server上,
發現 VSTT 將 Web Server 參數化的功能, 只有在單一個 Web Test, 不是整個專案的範圍,
最快的決解決方法:
1. 用尋找及取代的方法, 把 Web Server 替換掉, 但有可能會改錯
2. 把所有的 測試都錄在同一個 Web Test 中, 這也是不太可能, 那測試案例要如何管理.
所以, 筆者還是花了一些時間, 寫了一個 Web Test Plug-In
讓使用這個 Plug-In 的 Web Test 都可以動態讀入 Web Server 的位置, 只要修改一個設定檔即可
詳細內容如下:
1. 加入一個 XML 檔做為設定檔, Settings.xml
<?xml version="1.0" encoding="utf-8"?>
<WebTestSettings>
<WebServerURL>http://tw-anISV</WebServerURL>
</WebTestSettings>
2. 讀取 Settings.xml 中設定值, 這裡只以讀取 Web Server 為例, 可以再自行加入其它的值
WebTestSettings.cs
using System;
using System.IO;
using System.Xml.Serialization;
namespace WebTestPlugins
{
[Serializable]
public class WebTestSettings
{
private string webServerURL;
public string WebServerURL
{
get { return webServerURL; }
set { webServerURL = value; }
}
internal void ReadConfig(string ConfigFilePath)
{
using (StreamReader reader = new StreamReader(ConfigFilePath))
{
XmlSerializer serializer = new XmlSerializer(typeof(WebTestSettings));
WebTestSettings readSettings = (WebTestSettings)serializer.Deserialize(reader);
if (string.IsNullOrEmpty(readSettings.WebServerURL))
{
//This is a default value.
this.webServerURL = "http://localhost";
}
else
{
this.webServerURL = readSettings.WebServerURL;
}
}
}
}
}
3. 在 Web Test Plug-In 中讀入設值
WebServerPlugIn.cs
using System;
using Microsoft.VisualStudio.TestTools.WebTesting;
namespace WebTestPlugins
{
public class WebServerPlugIn: WebTestPlugin
{
public override void PostWebTest(object sender, PostWebTestEventArgs e)
{
}
private WebTestSettings settings = new WebTestSettings();
private const string settingsFile = "Settings.xml";
public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
settings.ReadConfig(settingsFile);
if (e.WebTest.Context.ContainsKey("WebServer1"))
{
e.WebTest.Context["WebServer1"] = settings.WebServerURL;
}
else
{
e.WebTest.Context.Add("WebServer1", settings.WebServerURL);
}
}
}
}
這個範例是使用 VS 2005 的環境寫的, 基本上可以適用於 VS 2008 and VS 2010.
Enjoy.