1.9获得测试运行时间
如何获得测试运行的总时间
设计:DateTime.Now属性记录测试开始运行时间,以及测试结束时间,用一个TimeSpan对象计算本次运行的总时间
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
DateTime starTime = DateTime.Now; while ((line=sr.ReadLine())!=null) { //运行测试 } DateTime endTime = DateTime.Now; TimeSpan testTime = endTime - starTime; Console.WriteLine("Test use time="+testTime);
1.10处理输入为空或期望值为空的情况
如何验证待测程序的API方法能否正确的处理传给它的null参数
设计:使用一个特殊的字符串标记来表示测试用例数据文件的null值,在测试套件添加相应的处理逻辑,把null标记转换成null输入值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static double ArithmeticMean(params int[] vals) { if(vals==null) { return 0.0; } double sum = 0.0; foreach (int v in vals ) { sum += v; return (double) (sum/vals.Length); } }
1.11处理“方法抛出异常”的情况
如何测试一个抛出异常的方法
设计:在测试用例数据文件嵌入一个特殊的字符串标记,用来表示应该有一个异常抛出,把待调用的待测方法放到一个try块里,可以捕获异常
*******
不要把那些调用不抛出异常的待测方法的代码放到try块里,因为如有异常抛出的话,你会得到pass的结果
如下测试数据:
004:GeometricMean:1 2 4 8 16 32:6.6569
005:GeometricMean:0 0 0 0:Exception
006:GeometricMean:2 4 8:4.0000
MathLib.Methods m=new Methods(); if (tokens[3] == "Exception") { try { actual = m.GeometriMean(input); } catch (Exception ex) { Console.WriteLine(caseID+"Pass"); continue; } Console.WriteLine(caseID+"*Fail* no exception throw" ); }
如果找到“Exception”输入值,就转到try块里执行GeometricMean();如果没有找到,程序转到catch块,并打印出结果,然后执行continu,进入下一关测试;
1.12处理输入参数为空字符串的情况
如何测试传给待测API方法的参数为空字符串的情况
设计:使用一个特殊字符串标记来表示测试用例文件中的空字符串,并在测试套件中加入相应的逻辑处理分支
001:SubString:put:computer:true
002:SubString:xyz:computer:flase
003:SubString:emptystring:computer:true(emptystring作为特殊标记字符串:空字符串)
string ags; if (tokens[2]=="emptystring") { ags = " "; } else { ags = tokens[2]; }
1.13在测试用例失败时发送警告邮件
如何编写程序让测试套件在测试用例失败的时候发送邮件信息
设计:使用System.Web.Mail命名空间的MailMessage类创建一个MailMessage对象,然后对这个对象提供To和Subject等属性,把测试用例失败详细信息添加到Body属性
else { Console.WriteLine("*Fail*.Sending e-mail"); try { MailMessage mail=new MailMessage(); mail.From = "Test Automation Harness"; mail.To = "excamp@mail.com";//通知邮箱地址 mail.Subject = "Test Case Failure";//主题 mail.Priority = MailPriority.High(); mail.BodyEncoding = System.Text.Encoding.ASCII;//编码格式 mail.BodyFormat = MailFormat.Html; mail.Body = "Test case"+caseID+"fail";//邮件内容 SmtpMail.SmtpServer = "127.0.0.1"; SmtpMail.Send(mail); } catch (Exception ex) { Console.WriteLine("Fatal error sending mail:"+ex.Message); } }
1.14自动运行测试套件
如何让测试套件自动运行
设计:1)好几个轻量级自动化测试套件需要运行,可以创建一个.bat文件,在这个文件里加上运行他们的命令;
2)用c#写一个主测试套件(master harness),让主测试套件来协调并调用其他自动化测试套件,
使用System.Diagnostics.Process命名空间的Start()方法来编写代码用于调用其他测试套件
eg:1)
@echo off
echo Starting test automation sequence
echo.
d:\xxx\xxx\xxx.exe
d:\xxx\xxx\xxx.exe
d:\xxx\xxx\xxx.exe
echo.
echo Test autonmation sequence complete
如果测试套件没有把测试结果记录到外部文件
@echo off
echo Starting test automation sequence
echo.
d:\xxx\xxx\xxx.exe > d:\xxx\xxx.Result1.txt
d:\xxx\xxx\xxx.exe > d:\xxx\xxx.Result2.txt
d:\xxx\xxx\xxx.exe > d:\xxx\xxx.Result3.txt
echo.
echo Test autonmation sequence complete
eg2):
public void MasterStart() { Console.WriteLine("Starting automation sequence\n"); Process.Start("d:\\xxx\\xxx\\xxx.exe"); Process.Start("d:\\xxx\\xxx\\xxx.exe"); Process.Start("d:\\xxx\\xxx\\xxx.exe"); Console.WriteLine("\n Test automation sequence complete \n"); }