lua--单元测试补充

来源:互联网 发布:扎克伯格娶丑女知乎 编辑:程序博客网 时间:2024/05/22 05:16

昨天写的单元测试框架,只有测试的执行过程,而没有统计。现在补上,还有种思路就是把测试结果写道db中,现在是写文件的方式,这样管理起来也方便。在写一遍吧。虽然lua有现成的测试框架,但是还是不会用,待研究啊,这就是新手的悲哀啊,啊,啊。。。。。

--初始化测试框架
function InitTestFrame()
 --定义存储各模块测试执行情况的表
 tRunStatistic={};
 tRunStatisticIndex=0;  
 CurrNGModuleIndex=0;
 CurrNGCaseIndex=0;
 --存储执行用例失败的表
 tRunNG={};
end

--当前测试模块名字
function SetCurrModule(moduleName)
 CurrModule=moduleName;
 temp={Module=moduleName,iRunCaseNum=0,iOKCaseNum=0,iNGCaseNum=0};
 tRunStatisticIndex=tRunStatisticIndex+1;
 table.insert(tRunStatistic,tRunStatisticIndex,temp);
end
--当前测试用例名字
function WriteCaseName(caseName)
 CurrCase=caseName;
 local h=io.open("f:\\lua\\unitCase.txt","a");
 local str="\n【"..caseName.."】".."\n";
 h:write(str);
 h:close();
end

--当前测试步骤名
function WriteCaseStep(caseStep)
 CurrStep=caseStep;
 local h=io.open("f:\\lua\\unitCase.txt","a");
 local str="  |--"..caseStep.."\n";
 h:write(str);
 h:close();
end

--自动化比较
function AssertResult(expectResult,realResult)
 if expectResult==realResult then
  return "OK";
 else
  return "Error";
 end
end

--测试日志
function WriteMsg(msg)
 local h=io.open("f:\\lua\\unitCase.txt","a");
 local str=msg.."\n";
 h:write(str);
 h:close();
end

--测试报告
function WriteReport(assertResult,expectResult,realResult)
 local h=io.open("f:\\lua\\unitCase.txt","a");
 local str="  "..assertResult.." (ExpectResult:"..expectResult..",RealResult:"..realResult..")\n";
 h:write(str);
 h:close(); 
 AddRunStatistic(assertResult);
 
end

--测试执行统计
function AddRunStatistic(assertResult)
 --统计测试执行情况
 tRunStatistic[tRunStatisticIndex].iRunCaseNum=tRunStatistic[tRunStatisticIndex].iRunCaseNum+1;
 if assertResult=="OK" then
  tRunStatistic[tRunStatisticIndex].iOKCaseNum=tRunStatistic[tRunStatisticIndex].iOKCaseNum+1;
 else
  tRunStatistic[tRunStatisticIndex].iNGCaseNum=tRunStatistic[tRunStatisticIndex].iNGCaseNum+1;
 end
 --将失败的用例插入到tRunNG表
 if(tRunNG[CurrNGModuleIndex]~=nil) and (tRunNG[CurrNGModuleIndex][1]==CurrModule) then
  --存在module记录
  if (tRunNG[CurrNGModuleIndex][2][CurrNGCaseIndex][1]~=nil) and (tRunNG[CurrNGCaseIndex][2][CurrNGCaseIndex][1]==CurrCase) then
   --存在case记录
   --添加step项
   table.insert(tRunNG[CurrNGModuleIndex][2][CurrNGCaseIndex][2],CurrStep);
  else
   --增加case项
   table.insert(tRunNG[CurrNGModuleIndex][2],{CurrCase,{CurrStep}});
   CurrNGCaseIndex=CurrNGCaseIndex+1;
  end
 else
  --增加module项
  table.insert(tRunNG,{CurrModule,{{CurrCase,{CurrStep}}}});
  CurrNGModuleIndex=CurrNGModuleIndex+1;
  CurrNGCaseIndex=1;  --复位
 end
end

--统计测试执行情况
function GetStatistic()
 WriteMsg("\nTestCase run Statistic..");
 WriteMsg("***********************************");
 WriteMsg("【ModuleName】".."  【Run】".."  【OK】".."  【NG】");
 WriteMsg("-------------------------------------------");
 for i=1,table.getn(tRunStatistic) do
  --打印格式
  s1="";
  for j=1,17 do
   s1=s1.." ";
  end
  s2="";
  for j=1,15 do
   s2=s2.." ";
  end
  s3="";
  for j=1,16 do
   s3=s3.." ";
  end
  WriteMsg(i..":"..tRunStatistic[i].Module..s1..tRunStatistic[i].iRunCaseNum..s2..tRunStatistic[i].iOKCaseNum..s3..tRunStatistic[i].iNGCaseNum);
  
 end
 WriteMsg("**************************");
 --记录执行失败用例
 GetRunNGCase();
end
function GetRunNGCase()
 WriteMsg("NG case info:");
 if table.getn(tRunNG)==0 then
  WriteMsg("no NG case,are you sure your case is perfect?");
 end
 for i=1,table.getn(tRunNG) do
  WriteMsg(tRunNG[i][1]);  --moduleName
  for j=1,table.getn(tRunNG[i][2]) do
   WriteMsg(" |--"..tRunNG[i][2][j][1]);  --caseName;
   for k=1,table.getn(tRunNG[i][2][j][2]) do
    WriteMsg(" |--"..tRunNG[i][2][j][2][k]); --stepname;
   end
  end
 end
end

--使用方法
function TestCaseAdd()
 local c=nil;
 for i=1,3 do
  local a=1;
  local b=1+i;
  WriteCaseName("TestCaseAdd");
  WriteCaseStep("setp:"..i);
  c=Add(a,b);  --被测函数
  ret=AssertResult(3,c);
  if ret=="Error" then
   WriteMsg("Error:"..i);
   --break;
  end
  WriteReport(ret,3,c);
 end
 
end

--被测函数
function Add(a,b)
 return a+b;
end

--执行测试用例
InitTestFrame();
WriteMsg("test Add begin...");
SetCurrModule("math.add");
TestCaseAdd();
WriteMsg("test Add end!\n");
GetStatistic();

--测试报告