R语言 Testlink excel 转XML 批量导入测试用例

Testlink作为一个开源的项目管理工具,功能是非常强大的。不得不说,在测试用例创建方面功能有些弱。
大家都习惯了在excel中写测试用例,当要导入到Testlink中时需要一个一个的创建。
这耗费了大量的时间,在网络不好的情况下还容易出现了延迟,降低了效率。
幸好Testlink提供了XML批量导入测试用例方式,但只支持XML格式,所以这就需要我们把excel转换成XML格式的文件。

首先看一下excel中的测试用例格式

image.png

由于时间原因,只用到了用例编号 测试用例名字 前提条件 测试步骤 其他均用统一给定值,然后写死在XML中

在R中导入excel提取数据

#################提取步骤###################
steplist<-vector("list",1)
resultlist<-vector("list",1)
x<-0
y<-1
for(i in 1:length(ceshiyongli$用例编号))
{
  if(is.na(ceshiyongli$用例编号[i]))
  {
  
  }
  else
  {
    x=x+1
    steplist[[x]]<-x
    resultlist[[x]]<-x
  }
}
x<-0
y<-1
for(i in 1:length(ceshiyongli$用例编号))
{
  if(is.na(ceshiyongli$用例编号[i]))
  {
    y=y+1
  steplist[[x]][y]<-ceshiyongli$测试步骤[i]
  resultlist[[x]][y]<-ceshiyongli$预期结果[i]
  }
  else
  {
    y<-1
    x=x+1
    steplist[[x]][y]<-ceshiyongli$测试步骤[i]
    resultlist[[x]][y]<-ceshiyongli$预期结果[i]
  }
}
##############################提取用例标识#################
x<-0
yongliname<-c()
for(i in 1:length(ceshiyongli$用例编号))
{
  if(is.na(ceshiyongli$用例编号[i]))
  {
    
  }
  else
  {
    x=x+1
    yongliname[x]<-ceshiyongli$测试用例名称[i]
  }
}
#############################node_order##########################
x<-0
node_order<-c()
for(i in 1:length(ceshiyongli$用例编号))
{
  if(is.na(ceshiyongli$用例编号[i]))
  {
    
  }
  else
  {
    x=x+1
    node_order[x]<-x
  }
}
#######################externalid##################
x<-0
externalid<-c()
for(i in 1:length(ceshiyongli$用例编号))
{
  if(is.na(ceshiyongli$用例编号[i]))
  {
    
  }
  else
  {
    x=x+1
    externalid[x]<-x
  }
}

############################fullexternalid#####################
x<-0
fullexternalid<-c()
for(i in 1:length(ceshiyongli$用例编号))
{
  if(is.na(ceshiyongli$用例编号[i]))
  {
    
  }
  else
  {
    x=x+1
    fullexternalid[x]<-paste0("TS-",x)
  }
}

########################

用XML包来创建XML文件并赋值

########创建测试用例集####################
n2<-xmlNode("testsuite",attrs = c("id"="15",name="类型管理"))
n2<-append.xmlNode(n2,xmlNode("node_order",""))
n2<-append.xmlNode(n2,xmlNode("details","类型管理

]]>")) ################################ ##########对从excel中提取的数据进行创建测试用例,并加入到测试用例集中##################### ##########这里用了一个比较笨的方法来对步骤进行判断,有好的方法欢迎评论########## for(i in 1:length(yongliname)) { if(length(steplist[[i]])==1) { sr<-stepf(steplist[[i]][1],"","","","",resultlist[[i]][1],"","","","") n3<-testxml(i,yongliname[i],i,externalid[i],fullexternalid[i],sr[1],sr[2],sr[3],sr[4],sr[5],sr[6],sr[7],sr[8],sr[9],sr[10]) } else if(length(steplist[[i]])==2) { sr<-stepf(steplist[[i]][1],steplist[[i]][2],"","","",resultlist[[i]][1],resultlist[[i]][2],"","","") n3<-testxml(i,yongliname[i],i,externalid[i],fullexternalid[i],sr[1],sr[2],sr[3],sr[4],sr[5],sr[6],sr[7],sr[8],sr[9],sr[10]) } else if(length(steplist[[i]])==3) { sr<-stepf(steplist[[i]][1],steplist[[i]][2],steplist[[i]][3],"","",resultlist[[i]][1],resultlist[[i]][2],resultlist[[i]][3],"","") n3<-testxml(i,yongliname[i],i,externalid[i],fullexternalid[i],sr[1],sr[2],sr[3],sr[4],sr[5],sr[6],sr[7],sr[8],sr[9],sr[10]) } else if(length(steplist[[i]])==4) { sr<-stepf(steplist[[i]][1],steplist[[i]][2],steplist[[i]][3],steplist[[i]][4],"",resultlist[[i]][1],resultlist[[i]][2],resultlist[[i]][3],resultlist[[i]][4],"") n3<-testxml(i,yongliname[i],i,externalid[i],fullexternalid[i],sr[1],sr[2],sr[3],sr[4],sr[5],sr[6],sr[7],sr[8],sr[9],sr[10]) } else { sr<-stepf(steplist[[i]][1],steplist[[i]][2],steplist[[i]][3],steplist[[i]][4],steplist[[i]][5],resultlist[[i]][1],resultlist[[i]][2],resultlist[[i]][3],resultlist[[i]][4],resultlist[[i]][5]) n3<-testxml(i,yongliname[i],i,externalid[i],fullexternalid[i],sr[1],sr[2],sr[3],sr[4],sr[5],sr[6],sr[7],sr[8],sr[9],sr[10]) } ########将测试用例加入到测试用例集中############## n2<-append.xmlNode(n2,n3) print(i) } step5<-vector("list",5) result<-vector("list",5) #############创建步骤和期望结果函数,默认5个########### stepf<-function(s1,s2,s3,s4,s5,r1,r2,r3,r4,r5) { step1<-paste0("",s1,"]]>") result1<-paste0(" ",r1,"]]>") step2<-paste0("",s2,"]]>") result2<-paste0(" ",r2,"]]>") step3<-paste0("",s3,"]]>") result3<-paste0(" ",r3,"]]>") step4<-paste0("",s4,"]]>") result4<-paste0(" ",r4,"]]>") step5<-paste0("",s5,"]]>") result5<-paste0(" ",r5,"]]>") return(c(step1,step2,step3,step4,step5,result1,result2,result3,result4,result5)) } ########创建测试用例函数,默认5个步骤,由于时间问题,细节方面没有做处理############################### testxml<-function(internalid,name1,node_order1,externalid1,fullexternalid1,step_1,step_2,step_3,step_4,step_5,result_1,result_2,result_3,result_4,result_5) { n1<-xmlNode("testcase",attrs = c("internalid"=internalid,name=name1)) n1<-append.xmlNode(n1,xmlNode("node_order",paste0(""))) n1<-append.xmlNode(n1,xmlNode("externalid",paste0(""))) n1<-append.xmlNode(n1,xmlNode("fullexternalid",paste0(""))) n1<-append.xmlNode(n1,xmlNode("version","")) n1<-append.xmlNode(n1,xmlNode("summary","

]]>")) n1<-append.xmlNode(n1,xmlNode("preconditions","1.Tinyshop部署成功2.Tinyshopn能正常运行]]>")) n1<-append.xmlNode(n1,xmlNode("execution_type","")) n1<-append.xmlNode(n1,xmlNode("importance","")) n1<-append.xmlNode(n1,xmlNode("estimated_exec_duration","1.00")) n1<-append.xmlNode(n1,xmlNode("status","7")) n1<-append.xmlNode(n1,xmlNode("is_open","1")) n1<-append.xmlNode(n1,xmlNode("active","1")) n1<-append.xmlNode(n1,xmlNode("steps",xmlNode("step", xmlNode("step_number",""), xmlNode("actions",step_1), xmlNode("expectedresults",result_1), xmlNode("execution_type","") ), xmlNode("step", xmlNode("step_number",""), xmlNode("actions",step_2), xmlNode("expectedresults",result_2), xmlNode("execution_type","") ), xmlNode("step", xmlNode("step_number",""), xmlNode("actions",step_3), xmlNode("expectedresults",result_3), xmlNode("execution_type","") ), xmlNode("step", xmlNode("step_number",""), xmlNode("actions",step_4), xmlNode("expectedresults",result_4), xmlNode("execution_type","") ), xmlNode("step", xmlNode("step_number",""), xmlNode("actions",step_5), xmlNode("expectedresults",result_5), xmlNode("execution_type","") ) )) return(n1) }

导出为XML

saveXML(n2, file="out.xml",encoding="UTF-8")

这里有一个小缺陷没有继续优化,但不影响使用

由于XML生成时的编码问题,元素值中出现<会被替换成(<) >替换成(>) '被替换成(')
在Notepad++里查找替换下就行


image.png
image.png

image.png

这样就可把替换完成的XML直接导入到Testlink中了

如果导入时出现警告:xml_load_ko
可能是R语言默认的编码问题,和本地主机编码不匹配。
解决方法是:在本地创建一个文本,把XML文件内容复制进去,再把后缀名改成xml即可

最后,谨以此文献给努力拼搏的测试同学们!

你可能感兴趣的:(R语言 Testlink excel 转XML 批量导入测试用例)