編寫程序,在測試用例失敗時發送警告郵件
問題
如何編寫程序讓測試套件在測試用例失敗的時候發送郵件信息
設計
使用System.Net.Mail命名空間裏的MailMessage類創建一個MailMessage對象。然後爲這個對象提供To和Subject等屬性值,並且把測試用例失敗的詳細信息添加到它的Body屬性。
方案
if (method == "ArithmeticMean")
{
actual = MathLib.Methods.ArithmeticMean(input);
if (actual.ToString("F4") == expected)
{
Console.WriteLine("Pass");
}
else
{
Console.WriteLine("*FAIL*. Sending e-mail");
try
{
MailMessage m = new MailMessage();
m.From = "Test Automation Harness";
m.To = "[email protected]";
m.Subject = "Test Case Failure";
m.BodyEncoding = System.Text.Encoding.ASCII;
m.BodyFormat = MailFormat.Html;
m.Priority = MailPriority.High;
m.Body = "Test case " + caseID + " failed";
SmtpMail.SmtpServer = "127.0.0.1";
SmtpMail.Send(m);
}
catch(Exception ex)
{
Console.WriteLine("Fatal error sending mail: " + ex.Message);
}
}//測試用例失敗
}
註解
因爲自動化測試程序經常在無人看管的情況下運行,我們可能想要在測試用例失敗的時候給自己或者團隊的某人人發送電子郵件,這樣測試用例的失敗信息就不會只存在於日誌文件裏而有可能不被注意到。我們還可能想要發送一封彙總了測試用例運行結果的電子郵件。在.NET環境下,有好幾種方法都可以通過編程的方式來發送電子郵件,但是通過System.Net.Mail命名空間裏的MailMessage類,通常是最簡單的方法。上述方案中的代碼假定已經添加了一個指向System.Net命名空間的工程引用(默認情況下,這個命名空間對於控制檯程序來說是不可訪問的),並且在測試套件代碼裏添加了下面這條語句:
using System.Net.Mail;
在初始化一個MailMessage對象之後,應該爲From,To,Subject,BodyEncoding,BodyFormat和Body等屬性提供屬性值。還可以把可選的Priority屬性設爲MailPriortiy.High。還要把BodyEncoding的值設爲System.Text.Encoding中的某一個。通常使用的是Encoding.ASCII,但是如果願意,還可以用Encoding.Unicode或者Encoding.UTF8。BodyFormat屬性可以被設爲MailFormat.Html或者MailFormat.Text。只要電子郵件系統沒有缺陷,這兩種方式都會工作得很好。Body屬性是一個包含消息文本的字符串。至少應該把失敗的測試用例的ID以及實際的返回值和期望的返回值包括在裏面。
從理論上來說,通過編寫程序來發送電子郵件是比較簡單的,但在實際應用中,會出現各種各樣的問題。必須應對中繼服務器(relay server)、代理服務器、網絡安全策略以及防火牆等。因此最好的策略就是,儘可能地讓運行測試套件的機器與其他機器獨立開來。這樣做可以防止無意中帶來的負面影響,並且可以讓測試套件在發送電子郵件時更爲可靠。