来设置css是因为有的邮件客户端会过滤这样的信息 * * ***/ function geneHTML($caseList, $name=''){ date_default_timezone_set('PRC'); // $url = (isset ($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '') . $_SERVER['PHP_SELF']; $url =""; $html = "

自动化用例测试结果".date('Y-m-d H:i:s')."

网页版 ".getTrCase($caseList,true,1)."
fail的用例统计
用例名称


".getTrCase($caseList,false,1)."".getTrCase($caseList,false,0)."
全部用例统计
用例名称
未覆盖到的用例
"; // .""._srcOnlyList()."" return $html; } /** * 创建遗漏用例列表 * FIXME: 需要过滤package类型,考虑使用js名称同名目录存在进行过滤或者白名单 */ function _srcOnlyList(){ require 'case.class.php'; $list = Kiss::listSrcOnly(false); $len = sizeof($list); $flag="
遗漏列表:总计$len,未过滤无需用例的package类型
"; $flag.=implode("
", $list); $flag.="
"; return $flag; } /** * * 根据实际浏览器书目确认生成表头 * @param unknown_type $caseList */ function getThBrowser($caseList){ //创建浏览器相关单元格 $thBrowser = ''; $count = 0; foreach ($caseList as $casename => $casedetail) { //每一个用例 foreach ($casedetail as $b => $info) { $thBrowser .= "$b"; $count++; } $thBrowser .=""; break;//遍历一次就知道所有浏览器的信息 } for($index = 0; $index < $count; $index++) { $thBrowser .= "covfailtotal"; } return $thBrowser.""; } /** * * 根据执行结果生成单元格信息 * @param unknown_type $caseList */ function getTrCase($caseList,$onlyFail,$onlyCoverd){ //$onlyFail 为真时,只显示 fail 的用例 //$onlyCoverd 为0时,只显示全浏览器覆盖率为0的用例;为1时,只显示全浏览器覆盖率不为0的用例;为其他时,显示所有的用例 //创建case名对应的单元格 $totalTrCase = ''; require_once 'config.php'; $rowColor = '#B0E0E6';//标记行的颜色,单双数行显示的背景颜色不同 $numBro = count(Config::getBrowserSet($configBrowserSet)); $averageCov = 0;//所有用例的全浏览器覆盖率的平均值(全浏览器覆盖率为0的不计) $numCov = 0;//全浏览器覆盖率不为0的用例数量 foreach ($caseList as $casename => $caseDetail) { //每一个用例 $ifFail = false; $cnurl = implode('.', explode('_', $casename)); $trCase = ''; $totalCov = calTotalCov($caseDetail,$numBro); $averageCov +=$totalCov; $numCov = $totalCov==0?$numCov:$numCov+1; if(($onlyCoverd==0&&$totalCov!=0)||($onlyCoverd==1&&$totalCov==0))//$onlyCoverd 为0时,只显示全浏览器覆盖率为0的用例;为1时,只显示全浏览器覆盖率不为0的用例; continue; if(!$onlyFail){//对于展示 fail 的用例的列表,不显示全浏览器覆盖率 $trCase .= "".$totalCov.($totalCov=="_"?"":"%").""; } foreach ($caseDetail as $br => $infos) { //$b为browser名字,$info为详细信息 $fail = $infos['fail']; $ifFail = $fail==0?$ifFail:true; $total = $infos['total']; $cov = $infos['cov']; $color = $fail == 0 ? $rowColor : '#CD5C5C'; $PercentSign = $cov=='_'?'':'%'; $trCase .= "".$cov.$PercentSign."".$fail."".$total.""; } $trCase ="运行$casename".$trCase.""; if(!$onlyFail||$ifFail){ $totalTrCase =$totalTrCase.$trCase; $rowColor = $rowColor=='#F0FFFF'?'#B0E0E6':'#F0FFFF'; } else; } $averageCov = number_format($averageCov/$numCov,1); if($onlyCoverd==0) $tableContent = $totalTrCase; elseif(!$onlyFail) $tableContent = "总覆盖率
(平均值:".$averageCov."%)".getThBrowser($caseList).$totalTrCase; else $tableContent = getThBrowser($caseList).$totalTrCase; return $tableContent; } /** * * 计算总覆盖率信息 * @param unknown_type $caseDetail * @param unknown_type $brcount */ function calTotalCov($caseDetail,$brcount){ $length = -1; $num_statements = 0; $num_executed = 0; $totalInfo = null;//数组,记录全浏览器的覆盖情况,对文件中的每一行:覆盖为1,没覆盖为0,不计数为2 $flag = 1;//$flag==-1时,各个浏览器覆盖率记录的文件信息有冲突,不能计算出全浏览器覆盖率(统计的文件长度不同/标记为2的不计入统计的行信息不同) foreach ($caseDetail as $caseInfo){ //如果recordCovForBrowser为空,跳过这个$caseInfo if($caseInfo['recordCovForBrowser']==''){ continue; } $infos = explode(',',$caseInfo['recordCovForBrowser']); $length = ($length==-1||$length==count($infos))?count($infos):-1; if($length==-1||$length!=count($infos)) break;//统计的文件长度不同 else ; if($totalInfo==null){ // if(count($infos)==1){ // $flag = 0;//没有覆盖率信息 // break; // } for($i=0;$i