hae-uitest
Version:
A UI Test Framework for Huawei HAE
110 lines (93 loc) • 3.9 kB
JavaScript
//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);
}
}