使用Nodejs 实现Excel文件转换为JSON、Xml文件格式

        最近公司部署了Testlink的测试用例管理平台,比较坑的是这个导入用例方式只有支持xml文件格式,在网上找了下几个支持EXcel文件格式导入的方法,进行配置后没有生效,只好考虑对测试用例文档进行转换格式(excel文档--转为--json--转为--xml),来实现转换功能。

       使用Nodejs 的方式大致如下,文件目录说明:

Excel :将需要转换的Excel文档放在 Excel 目录下,对应的目标Xml文件也是放在这个文件下。

js :存放具体实现的js文件和单独引用的文件,lib目录下引入underscore-min.js 。

node_modules :存放对应的引用类库,

js目录存放文件:

node_modules 引用的类库如下:

实现create.js 代码如下:

'use strict';
var xlsxrd = require("node-xlsx");
var _ = require("./lib/underscore-min.js");
var fs = require('fs');
var xml2js = require('xml2js');
//excel 文件名称,上级目录Excel 文件夹下的测试用例文档
var excelFilePath = 'testcase-js.xlsx';
var xmlFilePath = '../excel/xmlCase.xml';

//解析xml 结构的属性值
var parser = new xml2js.Parser({
        explicitArray: false,
        attrkey:'$',
        trim:false,
        childkey:'$$',
        attrNameProcessors: null,
        attrValueProcessors:null
    });
    //构建xml文件的结构

    // jons -> xml
var jsonBuilder = new xml2js.Builder({
      rootName:'testsuite',
      cdata: true,
      renderOpts: { 'pretty': true, 'indent': '', 'newline': '\n' },
      xmldec:{
          'version':'1.0',
          'encoding': 'UTF-8'}}); 


//调用转换方法:
excel2xml(excelFilePath,xmlFilePath);
xml2Json(xmlFilePath);
function excel2xml(excelFilePath,xmlFilePath) {
    // 封装函数...
    //获取到excel的数据文件,将excle文件放到上级Excel 目录下
    //示例xml文件保持路径:'../excel/xmlCase.xml'
    var excelData = xlsxrd.parse("../excel/" + excelFilePath);

    console.log(excelData.length);
    
    var testsuites = {'$':{'name':''},"testcase":[]};//测试套件,
    _.each(excelData,function(testsuite,i) {
        console.log("测试套件-----start-------------");
        //对所有的测试套件进行处理,获取套件名称和数据。
        testsuites.$.name = excelData[i].name;
        _.each(excelData[i].data,function(testcase,x) {
            //对套件中的测试用例进行遍历        
             console.log("测试用例-------start-----------");
            console.log(testcase);
            if(x>0){
                let tmpcase = {
                    '$':{'name':testcase[0]},
                    'summary':'<p>'+testcase[1]+'</p>',
                    'preconditions':'<p>'+testcase[2]+'</p>' ,
                    'steps':{"step":[]}
                };
                //构建思路:
                 //根据name 去搜索用例,查找是否能找到相同名称、摘要、预置条件的用例
                //如果找到,则拼接step,对steps.step 进行push操作,
                //如果找不到,则拼接steps信息
                //构建步骤
                let step = {
                        'step_number':testcase[3]||'',
                        'actions':'<p>'+testcase[4]+'</p>',
                        'expectedresults':'<p>'+testcase[5]+'</p>',
                        "execution_type":"1"
                        };
                let casename = testcase[0];
                
                
                //筛选出用例名称相同的用例(同名的用例永远只能有一个,存在2个时,则取第一个)
                let tempCases = _.find(testsuites.testcase,function(item) {
                    // body...
                    return item.$.name === casename;
                });
               
                //判断筛选结果非定义、为空,查不到结果时,直接添加结果
                if(!_.isUndefined(tempCases)){
                   


                    //查找到该对象,在这个对象上增加steps
                     _.find(testsuites.testcase,function(item) {
                            //查找到同名的对象,然后将步骤合并到一条用例上.
                        return item.$.name === casename;
                    }).steps.step.push(step);
                }else{
                    //找不到相同名的用例
                    tmpcase.steps.step.push(step);
                    //添加一条用例
                    testsuites.testcase.push(tmpcase);
                }
                console.log("测试用例-----end-------------");
                
            }
        });
        console.log("测试套件-----end-------------");

    });



    //转 testsuites 用例格式 
    //调试时使用固定模式 jsond 作为数据源
    var json2xml = jsonBuilder.buildObject(testsuites);
    fs.writeFileSync('../excel/xmlCase.xml', json2xml, 'utf-8');
}


function nameToUpperCase(name){
   return name.toUpperCase();
}

function xml2Json(FilePath){
    // xml -> json '../excel/测试1.testsuite-deep.xml'
    fs.readFile(FilePath,'utf-8',function(err,result){
        //转换xml文件
       parser.parseString(result, function (err, result) {
        console.log('xml解析成json:'+'\n'+JSON.stringify(result));
        });
    });

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值