编写程序,在测试用例失败时发送警告邮件。
问题
如何编写程序让测试套件在测试用例失败的时候发送邮件信息
设计
使用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 = "igoone@yeah.net"; 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)、代理服务器、网络安全策略以及防火墙等。因此最好的策略就是,尽可能地让运行测试套件的机器与其他机器独立开来。这样做可以防止无意中带来的负面影响,并且可以让测试套件在发送电子邮件时更为可靠。
相关阅读:
API测试(八)