testlink用例的导出到Excel
一直在网上寻找怎么把testlink的用例导出到Excel中,以及把Excel中已经写好的用例导入到Testlink中的方法。根据现网的经验,然后修改了一下。贴出来,以飨有这方面需求的测试同仁。
Testlink版本为1.9.16,导出的用例目录最大支持两层,
导出的Excel文件以xlsx结尾,必须有Sheet1这一页。
导出的格式应该是这个样子的
一级目录 | 二级目录 | 用例名称 | 用例编号 | 用例概要 | 预置条件 | 操作步骤 | 预期结果 |
用例集1 | 用例集1-1 | 测试用例1 | 1 | 测试用例1 | 前提 |
步骤1 |
期望1 |
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的更多相关文章
- 使用pentaho工具将数据库数据导入导出为Excel
写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...
- MySQL要导出成excel的方法
MySQL 要导出成 excel 文件很简单,执行类似这样的命令: select * from 某个表 into outfile 'd:/文件名.xls'; 上述命令你在服务器上执行,就导在 ...
- C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)
开发中非常多情况下须要将dataGridView控件中显示的数据结果以Excel或者Word的形式导出来,本例就来实现这个功能. 因为从数据库中查找出某些数据列可能不是必需显示出来,在dataGrid ...
- 将Dynamics 365中的用户及其角色、角色导出到Excel中
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复240或者20161204可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- 如何将Revit明细表导出为Excel文档
Revit软件没有将明细表直接导出为Excel电子表格的功能,Revit只能将明细表导出为TXT格式,但是这种TXT文件用EXCEL处理软件打开然后另存为XLS格式即可,以Revit2013版自带的建 ...
- 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; ...
- Json数据导出生成Excel
最近在做一个导入导出Excel的功能,导出其他类型的文件都比较熟悉,但是导入跟导出一个Excel还是稍微特殊点.根据这次的经验,写了个导出的小样例. 总体思路就是json数据的key,value跟Ex ...
- PB导出数据excel格式dw2xls
PB导出数据excel格式dw2xls 使用DW2XLS控件 语法 uf_save_dw_as_excel ( dw, filename ) 參数 dw A reference to the data ...
- java连接MongoDB查询导出为excel表格
背景 因为项目需求.每一个星期须要统计每一个公众号7天的訪问数,月底就须要统计一个月的訪问数,40多个公众号.每次手动统计都须要花费1个小时,总之是一项无技术耗时耗神的手工活. 于是.想写个程序来统计 ...
随机推荐
- Coins、Tokens、山寨币:区别在哪里
[译] Coins, Tokens & Altcoins: What's the Difference? coin:指"正宗的"数字货币,比如比特币 tokens:比如用 ...
- oracle和mysql分页
mysql分页 关键字limit,limit m,n 其中m表示起始位置的下标,下标从0开始.n表示要显示的条数,比如要查询一个表的第2到5条数据. ,; oracle分页 关键字rownum, ro ...
- HDU 1068 Girls and Boys(模板——二分图最大匹配)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1068 Problem Description the second year of the univ ...
- oracle设置自动增长序列
我们在用MS SQL Server时,可以为表的主键设置为自动加1的效果;但是在Oracle当中,我们是无法直接设置一个字段为自动加1,需要先建立一个Sequence,然后为这个表创建一个Trigge ...
- 从零开始学习前端开发 — 1、HTML基础
一.web标准 web标准-网页制作的标准,它是由一系列标准组成的,主要包含三个方面:结构(html,xhtml),表现(css),行为(javascript) 注:结构和表现的标准由w3c(万维网联 ...
- window下spyder的快捷键
块注释/块反注释 Ctrl + 4/5 断点设置 F12 关闭所有 Ctrl + Shift + W 代码完成 Ctrl +空格键 条件断点 SHIFT + F12 配置 F6 复制 Ctrl + C ...
- [SinGuLaRiTy] 复习模板-搜索
[SinGuLaRiTy-1043] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 桶排序 void bucketSort(int a[], ...
- Hive总结(七)Hive四种数据导入方式
- Do you know how many stuff inside your Google Account?
My friend Sandy she wants me to do her a favor. She'd like to clear Hangouts chat history. I think s ...
- 服务器大量的fin_wait1 状态长时间存在原因分析-1
上文描述了在出现大量fin-wait-1出现的原因,占用的内存等,这里讲一下如何处理这种情况. 首先,fin发送之后,有可能会丢弃,那么发送多少次这样的fin包呢?fin包的重传,也会采用退避方式,在 ...