1。待测系统(SUT)
using System;
namespace Mathlib
...{
public class Methods
...{
public static int MethodSum(params int[] vals)
...{
int sum=0;
if (vals == null) return 0;
for(int i=0;i<vals.Length;i++)
sum+=vals[i];
return sum;
}
public static double MethodAverage(params int[] vals)
...{
double average=0.0;
int sum=0;
for(int i=0;i<vals.Length;i++)
sum+=vals[i];
average=sum/vals.Length;
return average;
}
}
}
2。Program Apitest

using System;
using Mathlib;
using System.IO;
using System.Net.Mail;
namespace TestAutomation
...{
/**//// <summary>
/// Description of APITest.
/// </summary>
public class APITest
...{
static void Main(string[] args)
...{
try
...{
//读取Testcases
FileStream fs=new FileStream("../../Test data and result/Testcases.txt",FileMode.Open);
// string testCasesFile=args[0];
// FileStream fs=new FileStream(testCasesFile,FileMode.Open);//文件名与路径参数化
StreamReader sr=new StreamReader(fs);
//创建一个以时间戳命名的文件夹,保存results
string folder="Result"+DateTime.Now.ToString("s");
folder=folder.Replace(":","-");
Directory.CreateDirectory("../../Test data and result/"+folder);
string path="../../Test data and result/"+folder+"/TestResults.txt";
FileStream ofs=new FileStream(path,FileMode.CreateNew);
StreamWriter sw=new StreamWriter(ofs);
string line, caseID, method;
string[] tokens,tempInput;
int[] input=null;
string expected;
int actual1=0;
double actual2=0.0;
int numPass=0,numFail=0,numCases=0;
DateTime startTime=DateTime.Now;//记录开始时间
Console.WriteLine(" CaseID Result Method Details");
Console.WriteLine("============================ ");
while((line=sr.ReadLine())!=null)
...{
tokens=line.Split(':');
caseID=tokens[0];
method=tokens[1];
if(tokens[2]=="NULL") //输入为NULL的处理方法
input=null;
else
...{
tempInput=tokens[2].Split(' ');
input=new int[tempInput.Length];
for(int i=0;i<input.Length;i++)
input[i]=int.Parse(tempInput[i]);
}
expected=tokens[3];
if(method=="MethodSum")
...{
actual1=Mathlib.Methods.MethodSum(input);
if(actual1==int.Parse(expected))
...{
Console.WriteLine(caseID+" Pass "+method+" actual= "+actual1.ToString());
sw.WriteLine(caseID+" Pass "+method+" actual= "+actual1.ToString());
++numPass;
++numCases;
}
else
...{
Console.WriteLine(caseID+" *FAIL* "+method+" actual= "+actual1.ToString());
sw.WriteLine(caseID+" *FAIL* "+method+" actual= "+actual1.ToString());
++numFail;
++numCases;
}
}
else if(method=="MethodAverage")
...{
actual2=Mathlib.Methods.MethodAverage(input);
if(actual2==double.Parse(expected))
...{
Console.WriteLine(caseID+" Pass "+method+" actual= "+actual2.ToString());
sw.WriteLine(caseID+" Pass "+method+" actual= "+actual2.ToString());
++numPass;
++numCases;
}
else if(tokens[3]=="Exception")
...{
Console.WriteLine(caseID+" *Fail* "+method+" actual= "+actual2.ToString());
sw.WriteLine(caseID+" *Fail* "+method+" actual= "+actual2.ToString());
++numFail;
++numCases;
}
}
else
...{
Console.WriteLine(caseID+" "+method+" Not yet implemented");
sw.WriteLine(caseID+" "+method+" Not yet implemented");
}
if((numPass+numFail)!=numCases)
Console.WriteLine("Warning:Counter logic failure");
}
Console.WriteLine(" ======== end test run ========");
Console.WriteLine(" Pass = "+numPass+" Fail = "+numFail);
DateTime endTime= DateTime.Now;//记录结束时间
TimeSpan elapsedTime = endTime-startTime;//计算用时
sw.WriteLine(Environment.NewLine+"Number cases passed="+numPass);
sw.WriteLine("Number cases failed="+numFail);
sw.WriteLine("Total cases="+(numPass+numFail));
double percent=((double)numPass)/(numPass+numFail);
sw.WriteLine("Percent passed="+percent.ToString("P"));
sw.WriteLine("Elapsed Time="+elapsedTime.ToString());
sr.Close();
fs.Close();
sw.Close();
ofs.Close();
}
catch(Exception e)
...{
Console.WriteLine("Fatal error: "+e.Message);
}
Console.ReadLine();
}//Main
}//Class class()
}//TestAutomation
问题:
1。文件路径参数化
2。处理“方法抛出异常”的情况
3。在Apitest中在测试用例失败时发送警告邮件
本文介绍了一个自动化API测试的实现案例,包括如何进行文件路径参数化、处理方法异常情况及测试失败时的邮件通知机制。
512

被折叠的 条评论
为什么被折叠?



