昨天写的单元测试框架,只有测试的执行过程,而没有统计。现在补上,还有种思路就是把测试结果写道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();
--测试报告