"; return; } function match($fileName, $matcher ) { if ( $matcher == '*' ) return true; $len = strlen( $matcher ); /** * 处理多选分支,有一个成功则成功,filter后面参数使用|切割 * @var unknown_type */ $ms = explode( ',' , $matcher ); if ( sizeof( $ms ) > 1 ) { //这里把或的逻辑改成与 foreach ( $ms as $matcher1 ) { if ( !match($fileName, $matcher1 ) ) return false; } return true; } /** * 处理反向选择分支 */ if ( substr( $matcher , 0 , 1 ) == '!' ) { $m = substr( $matcher , 1 ); if ( substr( $fileName , 0 , strlen( $m ) ) == $m ) return false; return true; } if ( $len > strlen( $fileName ) ) { return false; } return substr( $fileName , 0 , $len ) == $matcher; } function report() { /** * for junit report */ $dom = new DOMDocument('1.0', 'utf-8'); $suite = $dom->appendChild($dom->createElement('testsuite')); $cfg = preg_split('/[&=]/', $_POST['config']); $config = array(); for ($i = 0; $i < sizeof($cfg); $i += 2) { // echo "{$cfg[$i]} {$cfg[$i+1]}\r\n
"; $config[$cfg[$i]] = $cfg[$i + 1]; $p = $suite->appendChild($dom->createElement("property")); $p->setAttribute('name', $cfg[$i]); $p->setAttribute('value', $cfg[$i + 1]); } $suite->setAttribute("name", $config['browser']); $errors = 0; $failures = 0; $tests = 0; $time = 0; $filter = $config['filter']; foreach ($_POST as $key => $value) { if ($key == 'config') continue; echo $key.' '; $info = explode(";", $value); if ($filter!='' && (!match($key,$filter))){ continue; } //errornum + ',' + allnum + ','+ kissPerc || 0 + ',' + wb.kissstart + ','+ wb.kissend; $casetime = ($info[4] - $info[3]) / 1000; $time += $casetime; $tests++; $failure = (int)($info[0]); $case = $suite->appendChild($dom->createElement('testcase')); $case->setAttribute("name", str_replace('_','.',$key)); $case->setAttribute("time", $casetime); $case->setAttribute("cov", $info[2]); $case->setAttribute('failNumber', $info[0]); $case->setAttribute('totalNumber', $info[1]); $case->setAttribute('recordCovForBrowser',$info[5]); $case->setAttribute('browserInfo', $config['browser']); $case->setAttribute('hostInfo', Config::$BROWSERS[$config['browser']][0]); // covHtml( $config[ 'browser' ] . '/' . $key , $info[ 2 ] ); if ($failure > 0) { $failures++; $failinfo = $case->appendChild($dom->createElement('failure')); $failinfo->setAttribute('type', 'junit.framework.AssertionFailedError'); //FROM php.net, You cannot simply overwrite $textContent, to replace the text content of a DOMNode, as the missing readonly flag suggests. $kiss = join(".", split("/", $key)); // $failinfo->appendChild( new DOMText( $value ) ); $failinfo->appendChild(new DOMText("run")); } //TODO add more case info in xml } $suite->setAttribute('time', $time); $suite->setAttribute('failures', $failures); $suite->setAttribute('tests', $tests); // $dirName = "report_{$config['filter']}"; $dirName = str_replace('/','_',"report_{$config['filter']}"); if (!is_dir($dirName)) mkdir($dirName); $dom->save($dirName."/{$config['browser']}.xml"); } include 'config.php'; $config; $configs = preg_split('/[&=]/', $_POST['config']); for ($j = 0; $j < sizeof($configs); $j += 2) { // echo "{$cfg[$i]} {$cfg[$i+1]}\r\n
"; // if(strcmp($configs[$j],'browserSet')==0){ $config[$configs[$j]] = $configs[$j + 1]; // } } report(); $dom = new DOMDocument('1.0', 'utf-8'); $testsuites = $dom->appendChild($dom->createElement('testsuites')); $dirName = str_replace('/','_',"report_{$config['filter']}"); foreach (Config::getBrowserSet($configBrowserSet) as $key => $value) { $file = $dirName."/$key.xml"; if (!file_exists($file)) { echo "wait for report : $file\r\n
"; return; } $xmlDoc = new DOMDocument('1.0', 'utf-8'); $xmlDoc->load($file); $xmlDom = $xmlDoc->documentElement; //echo $xmlDom->nodeName; $testsuites->appendChild($dom->importNode($xmlDom, true)); } $dom->save("report.xml"); $browserNum = count(Config::getBrowserSet($configBrowserSet)); require_once 'record.php'; record(); Config::StopAll(); ?>