• .NET自动化测试API轻量级测试


    自动化测试相对于手工测试有以下优点

    a.Speed--快速地进行成千上万个测试用例;

    b.Accuracy--不受人为的因素的干扰,例如记录错误的结果;

    c.Precision--每次都以同样的方式运行;

    d.Efficiency--晚上白天都可以进行测试;

    e.Skill-Building--培养技能,手工测试非常枯燥乏味,提高不了技能。

           我们知道API(Application Programing Interface)测试是软件自动化测试的基础,API测试用来验证组成软件的那些单个方法的正确性;API测试也称为单元测试-Unit Test、模块测试-Module Test、组件测试-Component Test和元件测试-Element Test。 不管怎么叫,背后的意思是:必须确定系统中每个单独的模块必须正常工作。

    待测方法的代码如下:

    View Code
    1 public static double ArihthmeticMean(double i,double j)
    2 {
    3 double result=0.0;
    4 result = Math.Max(i,j);
    5 return result;
    6 }

    好了,下面来介绍API自动化测试的流程:

    1、准备测试用例数据,最好是独立于测试套件,可以存放在txt文件 ,XML文件和数据库,以便多个测试套件重复使用这里我准备好了

    测试ID    待测方法    测试输入  期望值

    0001:ArihthmeticMean:4 8:8
    0002:ArihthmeticMean:2 2:24
    0003:ArihthmeticMean:4 8:8
    0004:ArihthmeticMean:3 2:345.4
    0005:ArihthmeticMean:55 555:555
    0006:ArihthmeticMean:2 444:23234
    0007:ArihthmeticMean:4 8:8
    0008:ArihthmeticMean:2 2:24

    实际测试时,需要成千上万个测试用例数据,包括边界值,空值,无效输入。有些自动化测试工具可以自动产生测试用例数据。

    2、读入测试用例数据

    a.如何从测试用例文件中读入读入每条测试用例数据?

    b.设计--通过while循环遍历测试用例的每一行。

    c.方案 

    View Code
    1 while ((line =sr.ReadLine())!=null)
    2 {
    3 //解析每个测试用例行
    4
    5 //调用待测方法
    6
    7 //判断是否通过
    8
    9 //记录测试用例结果
    10
    11 //发送邮件等等通知结果
    12  
    13 }

    3、解析测试用例

    a.如何解析出用字符串隔开的测试用例的各个字段

    b.设计-使用string.Split()方法,该方法返回一个字符数组。具体使用去查查api

    c.具体实现方案看接下来的代码

    4、把数据转换为合适的类型

    a.读入的是字符串类型,在这里必须转为整型

    b.看下面的整理代码

    5、判定测试用例通过与否

    a.如何判定API测试用例是否通过

    b.设计--调用待测方法,传给它测试用例的输入,得到返回值,然后比较实际结构和测试用例中读入的期望值是否一致

    c.具体代码看下面

    6、记录测试用例结果

    a.如何把测试用例的结果存入独立于测试程序的简单文本文件

    b.设计--在处理测试用例的主循环中,使用System.IO.StreamWriter对象把测试用例ID和测试结果写到一个文本文件。当然可以记录到XML文件或者数据库中,看需要

    c.代码实现看下面

    7、给测试用例结果文件加上实际戳

     

    View Code
    1 string stamp = DateTime.Now.ToString();
    2 stamp = stamp.Replace(":","-");//这里不进行符号替换,创建不来文件,以为:这个符号不能用于创建文件问
    3   fs=File.Create("E:\\C#\\C#.NET例子程序\\"+stamp +" testresult.txt");

    8、通过计算对测试结果进行总结

    9、获得测试的总运行时间

        用DateTime TimeSpan可以实现

    10、处理输入为空或者期望值为空的情况--NULL

    11、处理“方法抛出异常”的情况

    12、处理输入参数为空字符串的情况

    13、在测试用例失败时发送警告邮件

          System.Net.Mail下的MailMessage类实现,很简单

    14、自动运行测试套件

    用.BAT文件可以实现,用System.Diagnosis.Process命名空间下的Start()方法

      

    在这里,稍微实现了代码

    

    View Code
    1 using System;
    2  using System.IO;
    3
    4 namespace ApiTestExample
    5 {
    6 class Program
    7 {
    8 static void Main(string[] args)
    9 {
    10 FileStream ifs=null;
    11 StreamReader sr = null;
    12 StreamWriter sw = null;
    13 FileStream fs = null;
    14 try
    15 {
    16 ifs = new FileStream("E:\\C#\\C#.NET例子程序\\testcase.txt", FileMode.Open);
    17 sr = new StreamReader(ifs);
    18 string stamp = DateTime.Now.ToString();
    19 stamp = stamp.Replace(":","-");//这里不进行符号替换,创建不来文件,以为:这个符号不能用于创建文件问
    20 fs=File.Create("E:\\C#\\C#.NET例子程序\\"+stamp +" testresult.txt");
    21 sw = new StreamWriter(fs);
    22 string line, caseID, method;
    23 string[] tokens, tempInput;
    24 string expected;
    25 double actual = 0.0;
    26 int numPass = 0, numFail = 0;
    27
    28 Console.WriteLine("\nCaseID Result Method Details");
    29 Console.WriteLine("===============================");
    30
    31 while ((line =sr.ReadLine())!=null)
    32 {
    33 tokens = line.Split(':');
    34 caseID =tokens [0];
    35 method =tokens[1];
    36 tempInput =tokens[2].Split (' ');
    37 expected=tokens [3];
    38
    39 int[] input=new int[tempInput.Length ];
    40 for (int i = 0; i < input.Length ; i++)
    41 {
    42 input[i] = int.Parse(tempInput [i]);
    43 }
    44
    45 if (method == "ArihthmeticMean")
    46 {
    47 actual = ArihthmeticMean(input[0], input[1]);
    48 if (actual.ToString() == expected)
    49 {
    50 Console.WriteLine(caseID + " Pass " + method + " actual=" + actual.ToString());
    51 //记录测试
    52 sw.WriteLine(caseID + " Pass " + method + " actual=" + actual.ToString());
    53 ++numPass;
    54 }
    55 else
    56 {
    57 Console.WriteLine(caseID + " Fail " + method + " actual=" + actual.ToString());
    58 //记录测试
    59 sw.WriteLine(caseID + " Fail " + method + " actual=" + actual.ToString());
    60 ++numFail;
    61 }
    62
    63 }
    64 else
    65 {
    66 Console.WriteLine(caseID +" "+method +"not yet implement");
    67 sw.WriteLine(caseID + " " + method + "not yet implement");
    68 }
    69
    70 }
    71
    72 Console.WriteLine("===========================end test run===============");
    73 Console.WriteLine("pass="+numPass +"Fail="+numFail );
    74 }
    75 catch(Exception ex)
    76 {
    77 Console.WriteLine("Fatal error"+ex.Message );
    78 }
    79 finally
    80 {
    81 //注意打开的文件资源一定要关闭,还有注意顺序
    82 ifs.Close();
    83 sr.Close();
    84 sw.Close();
    85 fs.Close();
    86
    87
    88 }
    89
    90
    91 }
    92
    93 //待测方法ArihthmeticMean
    94 public static double ArihthmeticMean(double i,double j)
    95 {
    96 double result=0.0;
    97 result = Math.Max(i,j);
    98 return result;
    99 }
    100 }
    101 }

    结果如下:
    CaseID Result Method Details
    ===============================
    0001  Pass  ArihthmeticMean  actual=8
    0002 Fail ArihthmeticMean actual=2
    0003  Pass  ArihthmeticMean  actual=8
    0004 Fail ArihthmeticMean actual=3
    0005  Pass  ArihthmeticMean  actual=555
    0006 Fail ArihthmeticMean actual=444
    0007  Pass  ArihthmeticMean  actual=8
    0008 Fail ArihthmeticMean actual=2
    ===========================end test run===============
    pass=4Fail=4

    测试结果文件2011-3-26 16-01-02  testresult.txt,内容如下

    0001  Pass  ArihthmeticMean  actual=8
    0002 Fail ArihthmeticMean actual=2
    0003  Pass  ArihthmeticMean  actual=8
    0004 Fail ArihthmeticMean actual=3
    0005  Pass  ArihthmeticMean  actual=555
    0006 Fail ArihthmeticMean actual=444
    0007  Pass  ArihthmeticMean  actual=8
    0008 Fail ArihthmeticMean actual=2

    

    至此,API自动化测试介绍基本完毕,请多多指教,谢谢!

    
    
  • 相关阅读:
    1111实验二 作业调度模拟实验
    1006实验一实验报告
    0909对操作系统的认识
    南阳OJ-138 找球号(二)(hash表应用)
    南阳OJ-38 布线问题(最小生成树应用_prim)
    插入排序
    南阳OJ-756 重建二叉树(二叉树的中序遍历和后序遍历求先序遍历)
    南阳OJ-63 小猴子下落(数据结构-二叉树)
    UVA OJ-11095 Maximum Product(暴力求解法)
    UVA OJ-725 Division (暴力求解法)
  • 原文地址:https://www.cnblogs.com/chester/p/1996357.html
Copyright © 2020-2023  润新知