UNPKG

hae-uitest

Version:

A UI Test Framework for Huawei HAE

110 lines (93 loc) 3.9 kB
//run the test task var fs = require('fs'); var path = require('path'); var mkdirp = require('mkdirp'); var tml2wts = require('./tml2wts'); var generateLog = require('./generateLog'); var utils = require('./utils'); var invokeMocha = require('./invokeMocha'); var saveFile = require('./saveFile'); var mocha = path.normalize(__dirname + '/../node_modules/mocha/bin/_mocha'); module.exports = function(taskConf) { //生成任务目录和 ID taskConf.fulldate = new Date().toISOString().slice(0, 10); taskConf.timestamp = utils.getTimestamp(); //遍历所有测试用例 var arrTml = taskConf.testScripts || []; var completeTmlCount = 0; var wtsDir = path.join(taskConf.wtsPath, taskConf.fulldate, taskConf.timestamp); var screenshotDir = path.join(taskConf.screenshotPath, taskConf.fulldate, taskConf.timestamp); var reportDir = path.join(taskConf.reportPath, taskConf.fulldate); var logDir = path.join(taskConf.logPath, taskConf.fulldate); for (var i = 0; i < arrTml.length; i++) { (function(tmlIndex) { var tmlPath = path.resolve(taskConf.tmlBasePath, arrTml[tmlIndex].filePath); fs.readFile(tmlPath, 'utf8', function(err, tmlContent) { if (err) throw err; //将 TML 转化为 WTS,一个 TML 可配置多组测试数据,每组数据生成一个 WTS tml2wts(tmlContent, taskConf, tmlIndex, function(err, wtsList) { if (err) throw err; var completeWtsCount = 0; arrTml[tmlIndex].wtsList = wtsList; //遍历 wtsList 生成 wts 文件 for (var j = 0; j < wtsList.length; j++) { (function(wtsIndex) { var wtsFile = path.normalize(wtsDir + path.sep + wtsList[wtsIndex].timestamp + '.wts'); //建立相关目录 mkdirp(wtsDir, function(err) { if (err) throw err; //写 wts 文件 saveFile(wtsFile, wtsList[wtsIndex].content, function(err, filePath) { if (err) throw err; completeWtsCount++; //每个 tml 只计数一次 if (wtsList.length === completeWtsCount) { completeTmlCount++; } //当所有 tml 都被转化为 wts 后 if (arrTml.length === completeTmlCount) { //生成测试任务运行日志 generateLog(taskConf, function(err, log) { var logFile = path.normalize(logDir + path.sep + taskConf.timestamp + '.log'); mkdirp(logDir, function(err) { if (err) throw err; //写日志 saveFile(logFile, log, function(err, logFilePath) { if (err) throw err; //调用 mocha 执行生成的 WTS var wtsFiles = wtsDir + path.sep + '*.wts'; var args = [mocha, wtsFiles, '-R', taskConf.reporter, '--recursive', '--no-exit']; invokeMocha(args, function(err, report) { if (err) throw new Error(err); //输出报告到文件 var reportFile = path.normalize(reportDir + path.sep + taskConf.timestamp + '.' + taskConf.reporter); mkdirp(reportDir, function(err) { if (err) throw err; //写报告 saveFile(reportFile, report, function(err, reportFilePath) { if (err) throw err; //在屏幕输出结果 var output = { "wtsPath": wtsDir, "screenshotPath": screenshotDir, "reportPath": reportFilePath, "logPath": logFilePath } process.stdout.write(JSON.stringify(output, null, ' ')); process.exit(); }); }); }); }); }); }); } }); }); })(j); }; }); }); })(i); } }