對於 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.

arrow
arrow
    全站熱搜

    anISV 發表在 痞客邦 留言(1) 人氣()