.net自动化测试(二)


1.9获得测试运行时间
如何获得测试运行的总时间
设计:DateTime.Now属性记录测试开始运行时间,以及测试结束时间,用一个TimeSpan对象计算本次运行的总时间

 

 DateTime starTime = DateTime.Now;
            while ((line=sr.ReadLine())!=null)
            {
                //运行测试
            }
            DateTime endTime = DateTime.Now;
            TimeSpan testTime  = endTime - starTime;
            Console.WriteLine("Test use time="+testTime);
View Code

1.10处理输入为空或期望值为空的情况
如何验证待测程序的API方法能否正确的处理传给它的null参数
设计:使用一个特殊的字符串标记来表示测试用例数据文件的null值,在测试套件添加相应的处理逻辑,把null标记转换成null输入值

 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);
            }
        }
View Code

 

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 = "[email protected]";//通知邮箱地址
                            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");
        }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。