一直在网上寻找怎么把testlink的用例导出到Excel中,以及把Excel中已经写好的用例导入到Testlink中的方法。根据现网的经验,然后修改了一下。贴出来,以飨有这方面需求的测试同仁。

Testlink版本为1.9.16,导出的用例目录最大支持两层,

导出的Excel文件以xlsx结尾,必须有Sheet1这一页。

导出的格式应该是这个样子的

一级目录 二级目录 用例名称 用例编号 用例概要 预置条件 操作步骤 预期结果
用例集1 用例集1-1 测试用例1 1 测试用例1 前提

步骤1
步骤2

期望1
期望2

python文件 tcexport.py,testlink用例的导出

#coding=utf-8
from xml.etree import ElementTree
from win32com.client import Dispatch
import win32com.client
import sys,os def ChangeReturnKeyInString(str):
retStr = str.strip().replace('<p>','')
retStr = retStr.replace('</p>','\n')
return retStr class easy_excel:
def __init__(self,filename=None):
self.xlApp=win32com.client.Dispatch('Excel.Application')
if filename:
self.filename=filename
self.xlBook=self.xlApp.Workbooks.Open(self.filename)
else:
self.xlBook=self.xlApp.Workbooks.Add()
self.filename=''
def save(self,newfilename=None):
if newfilename:
self.filename=newfilename
self.xlBook.SaveAs(newfilename)
else:
self.xlBook.Save() def close(self):
self.xlBook.Close(SaveChanges=0)
def getCell(self,sheet,row,col):
sht=self.xlBook.Worksheets(sheet)
return sht.Cell(row,col).Value
def setCell(self,sheet,row,col,value):
sht=self.xlBook.Worksheets(sheet)
sht.Cells(row,col).Value=value
sht.Cells(row,col).HorizontalAlignment=3
sht.Rows(row).WrapText=True
def mergeCells(self,sheet,row1,col1,row2,col2):
sht=self.xlBook.Worksheets(sheet)
sht.Range(sht.Cells(row1,col1),sht.Cells(row2,col2)).Merge()
def setBorder(self,sheet,row,col):
sht=self.xlBook.Worksheets(sheet)
sht.Cells(row,col).Borders.LineStyle=1
def set_col_width(self,sheet):
sht=self.xlBook.Worksheets(sheet)
sht.Columns("E:H").ColumnWidth=30 if __name__ =='__main__':
if (len(sys.argv) == 1):
print("Please specified a xml file")
os.system("pause")
sys.exit(0)
else:
tmpInFile = os.getcwd()+"\\"+sys.argv[1]
inFile = tmpInFile
if not tmpInFile.endswith(".xml"):
outFile = tmpInFile + "-tcexp.xlsx"
inFile = tmpInFile + ".xml"
else:
outFile = tmpInFile[:-4] +"-tcexp.xlsx" xls=easy_excel()
xls.setCell('Sheet1',1,1,u"一级目录")
xls.setCell('Sheet1',1,2,u"二级目录")
xls.setCell('Sheet1',1,3,u"用例名称")
xls.setCell('Sheet1',1,4,u"用例编号")
xls.setCell('Sheet1',1,5,u"用例概要说明")
xls.setCell('Sheet1',1,6,u"预置条件")
xls.setCell('Sheet1',1,7,u"操作步骤")
xls.setCell('Sheet1',1,8,u"预期结果")
xls.set_col_width('Sheet1') tree=ElementTree.parse(inFile)
root = tree.getroot() row_flag=1
#一级目录
for sub1Testsuite in root.findall("testsuite"):
sub1SuiteId = sub1Testsuite.get("id")
sub1SuiteName = sub1Testsuite.get("name")
for sub1TestCase in sub1Testsuite.findall("testcase"):
row_flag = row_flag + 1
sub2SuiteName = ""
title = sub1TestCase.get("name")
externalid = sub1TestCase.find("externalid").text
summary = ChangeReturnKeyInString(sub1TestCase.find("summary").text)
preconditions = ChangeReturnKeyInString(sub1TestCase.find("preconditions").text) xls.setCell('Sheet1',row_flag,1,sub1SuiteName)
xls.setCell('Sheet1',row_flag,2,sub2SuiteName)
xls.setCell('Sheet1',row_flag,3,title)
xls.setCell('Sheet1',row_flag,4,externalid)
xls.setCell('Sheet1',row_flag,5,summary)
xls.setCell('Sheet1',row_flag,6,preconditions)
stepsNode=sub1TestCase.find("steps")
actions = ""
expectedresults = ""
for stepNode in stepsNode.findall("step"):
step_number = stepNode.find('step_number').text
actions = actions+stepNode.find('actions').text.strip()
expectedresults = expectedresults + stepNode.find('expectedresults').text.strip()
actions = ChangeReturnKeyInString(actions)
expectedresults = ChangeReturnKeyInString(expectedresults)
xls.setCell('Sheet1',row_flag,7,actions)
xls.setCell('Sheet1',row_flag,8,expectedresults) for sub2Testsuite in sub1Testsuite.findall("testsuite"):
sub2SuiteId = sub2Testsuite.get("id")
sub2SuiteName = sub2Testsuite.get("name")
for sub2TestCase in sub2Testsuite.findall("testcase"):
row_flag = row_flag + 1
title = sub2TestCase.get("name")
externalid = sub2TestCase.find("externalid").text
summary = ChangeReturnKeyInString(sub2TestCase.find("summary").text)
preconditions = ChangeReturnKeyInString(sub2TestCase.find("preconditions").text) xls.setCell('Sheet1',row_flag,1,sub1SuiteName)
xls.setCell('Sheet1',row_flag,2,sub2SuiteName)
xls.setCell('Sheet1',row_flag,3,title)
xls.setCell('Sheet1',row_flag,4,externalid)
xls.setCell('Sheet1',row_flag,5,summary)
xls.setCell('Sheet1',row_flag,6,preconditions)
actions = ""
expectedresults = ""
stepsNode=sub2TestCase.find("steps")
for stepNode in stepsNode.findall("step"):
step_number = stepNode.find('step_number').text
actions =actions + stepNode.find('actions').text
expectedresults = expectedresults + stepNode.find('expectedresults').text
actions = ChangeReturnKeyInString(actions)
expectedresults = ChangeReturnKeyInString(expectedresults)
xls.setCell('Sheet1',row_flag,7,actions)
xls.setCell('Sheet1',row_flag,8,expectedresults) for row in range(2,row_flag):
for col in range(1,9):
xls.setBorder('Sheet1',row,col)
xls.save(outFile)
xls.close() print("finished.")
sys.exit(0)

使用方法:在Excel用例文件所在的目录里,shift+鼠标右键,打开一个cmd窗口,输入如下命令:

假设py脚本在D盘

python D:\tcimport.py testproject-deep.xml

testlink用例的导出到Excel的更多相关文章

  1. 使用pentaho工具将数据库数据导入导出为Excel

    写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...

  2. MySQL要导出成excel的方法

    MySQL 要导出成 excel 文件很简单,执行类似这样的命令:   select * from 某个表 into outfile  'd:/文件名.xls';   上述命令你在服务器上执行,就导在 ...

  3. C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)

    开发中非常多情况下须要将dataGridView控件中显示的数据结果以Excel或者Word的形式导出来,本例就来实现这个功能. 因为从数据库中查找出某些数据列可能不是必需显示出来,在dataGrid ...

  4. 将Dynamics 365中的用户及其角色、角色导出到Excel中

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复240或者20161204可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  5. 如何将Revit明细表导出为Excel文档

    Revit软件没有将明细表直接导出为Excel电子表格的功能,Revit只能将明细表导出为TXT格式,但是这种TXT文件用EXCEL处理软件打开然后另存为XLS格式即可,以Revit2013版自带的建 ...

  6. html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式

    先上代码   <script type="text/javascript" language="javascript">   var idTmr; ...

  7. Json数据导出生成Excel

    最近在做一个导入导出Excel的功能,导出其他类型的文件都比较熟悉,但是导入跟导出一个Excel还是稍微特殊点.根据这次的经验,写了个导出的小样例. 总体思路就是json数据的key,value跟Ex ...

  8. PB导出数据excel格式dw2xls

    PB导出数据excel格式dw2xls 使用DW2XLS控件 语法 uf_save_dw_as_excel ( dw, filename ) 參数 dw A reference to the data ...

  9. java连接MongoDB查询导出为excel表格

    背景 因为项目需求.每一个星期须要统计每一个公众号7天的訪问数,月底就须要统计一个月的訪问数,40多个公众号.每次手动统计都须要花费1个小时,总之是一项无技术耗时耗神的手工活. 于是.想写个程序来统计 ...

随机推荐

  1. spring自带定时器

    http://www.cnblogs.com/pengmengnan/p/6714203.html 注解模式的spring定时器1 , 首先要配置我们的spring.xmlxmlns 多加下面的内容. ...

  2. 文件末尾判断feof

    feof 作用:如果文件结束,则返回非0值,否则返回0 但要注意的是feof要读取到文件结束标志EOF后,才能判断文件是否结束. 所以使用while(!feof(pFile))会出现最后fread会返 ...

  3. SQL的case when then else end语句的用法

    SELECT a.managecom, a.subtype, count(*) loadsucc, sum(case when a.state in  ('4', '5', '6', '7', '8' ...

  4. javascript之fill()方法

    无意中看到fill这个方法,有些不解,起初以为是人家自定义的方法,后来才发觉原来不是,javascript里面是真的有这个方法,于是特地学习了下. fill()方法的作用是使用一个固定值来替换数组中的 ...

  5. mysql中使用show table status 查看表信息

    本文导读:在使用mysql数据库时,经常需要对mysql进行维护,查询每个库.每个表的具体使用情况,Mysql数据库可以通过执行SHOW TABLE STATUS命令来获取每个数据表的信息. 一.使用 ...

  6. 【编程技巧】NSTimer类的使用

    创建一个 Timer + scheduledTimerWithTimeInterval: invocation: repeats: + (NSTimer *)scheduledTimerWithTim ...

  7. Java读写Excel之POI超入门(转)

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.Apache POI ...

  8. Number()和new Number()的区别以及一种简单实现

    看MDN Beginners文档的时候注意到了这种用法 var n1 = Number(123); , 冒出的第一个疑问就是和 var n2 = new Number(123); 有什么区别呢? 首先 ...

  9. mybatis实战教程三:多对多关联

    MyBatis3.0 添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作 一.创建student.te ...

  10. scrapy_简介页面和详情页面

    如何对提取的URL进行限定? 往上找id和class属性值,进行多次层级选择,进行内容限定 如何实现获取主页所有urls,然后交给scrapy下载后并解析详情页面,返回结果?(文章简介页面和文章详细页 ...