hae-uitest
Version:
A UI Test Framework for Huawei HAE
96 lines (78 loc) • 2.82 kB
JavaScript
//根据 TML 文件生成对应的测试脚本
var fs = require('fs');
var path = require('path');
var utils = require('./utils');
var xml2js = require('xml2js');
var json2wts = require('./json2wts');
var config = require('../config');
var parser = new xml2js.Parser();
//检查 TML 生成的 JSON 合法性
var checkJson = function(json) {
var result = true;
try {
result = result && 1 === json.tml.config.length;
result = result && 1 === json.tml.data.length;
result = result && 1 === json.tml.test.length;
} catch (e) {
result = false;
}
return result;
}
//将 TML 转化为 WTS
module.exports = function(tmlContent, taskConf, tmlIndex, callback) {
//将 tml 转换为 json
parser.parseString(tmlContent, function(err, json) {
if (err) callback(err, null);
var wtsList = [];
if (!checkJson(json)) {
callback.call(this, new Error('illegal TML format.'), null);
return false;
}
//fs.writeFileSync('D:\\tml2json.json', JSON.stringify(json, null, '\t'), encoding = 'utf8');
//为 tml 设置 desc
taskConf.testScripts[tmlIndex].desc = json.tml.test[0].$.desc;
//合并 taskConf 与 config.js
var arrConf = ['browserName', 'version', 'platform']
for (var i = 0; i < arrConf.length; i++) {
if (arrConf[i] in taskConf.testScripts[tmlIndex]) {
config.capabilities[arrConf[i]] = taskConf.testScripts[tmlIndex][arrConf[i]];
} else {
taskConf.testScripts[tmlIndex][arrConf[i]] = config.capabilities[arrConf[i]];
}
}
//合并 tml.config 与 config.js
var tmlConf = 'object' === typeof json.tml.config[0] ? json.tml.config[0] : {};
for (var x in tmlConf) {
var tempConfig = (x in config) ? config[x] : (config[x] = {});
var tempTmlConf = tmlConf[x][0].$;
for (var y in tempTmlConf) {
tempConfig[y] = tempTmlConf[y];
}
}
//console.dir(config);
//设置合并后的配置
json.config = config;
//如果 dataGroup 设置为 'all' 则遍历 data 的 group 来生成 wts
if ('all' === json.tml.test[0].$.dataGroup) {
for (var i = 0; i < json.tml.data[0].group.length; i++) {
json.tml.test[0].$.dataGroup = json.tml.data[0].group[i].$.name;
makeWts(json, i);
};
} else {
makeWts(json, 0);
}
//根据 dataGroup 的配置来生成 wts
function makeWts(json, i) {
var wts = {};
wts.timestamp = (parseInt(utils.getTimestamp()) + i).toString();
wts.dataGroup = json.tml.test[0].$.dataGroup;
//设置截图目录
json.screenshotPath = path.join(taskConf.screenshotPath, taskConf.fulldate, taskConf.timestamp, wts.timestamp)
.replace(/\\/g,'\\\\');
//将 json 转换为 wts
wts.content = json2wts(json);
wtsList.push(wts);
}
callback(null, wtsList);
});
}