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个小时,总之是一项无技术耗时耗神的手工活. 于是.想写个程序来统计 ...
随机推荐
- [国嵌攻略][103][Linux内核模块基础]
什么是内核模块 Linux内核的整体结构非常庞大,其中包含的组件也非常多,如何使用这些组件.一种方式是把所有的组件都编译进内核文件,即zImage或bzImage,但这样会导致一个问题,占用内存过多. ...
- 云计算之路-阿里云上:节点 CPU 波动引发 docker swarm 集群故障
非常抱歉,今天 10:05-10:20 左右,我们用阿里云服务器搭建的 docker swarm 集群又出现故障,又是因为突然的节点 CPU 波动. 受这次故障影响的站点有 闪存,博问,班级,园子,短 ...
- 【转载】keil5中加入STM32F10X_HD,USE_STDPERIPH_DRIVER的原因
初学STM32,在RealView MDK 环境中使用STM32固件库建立工程时,初学者可能会遇到编译不通过的问题.出现如下警告或错误提示: warning: #223-D: function &qu ...
- Eclipse报错An internal error occurred during: "J2EE Component Mapping Update". java.lang.NullPointerException
Eclipse每次打开.java文件时,报错信息如下: An internal error occurred during: "J2EE Component Mapping Update&q ...
- jsp里的逻辑语句c:if和c:choose
1.c:if <c:if test=""></c:if> c:when的test里可以是变量或者是一个EL表达式,其结果应该是true或者false. EL ...
- java基础复习1
jre:Java运行环境 jdk:Java开发工具(包含jre) java两大机制:JVM (java虚拟机) 垃圾回收 变量的分类: 1.按数据类型分: 1)基本数据类型:8种 整型:byte sh ...
- cpuimage 开源之
前年学习opengl做的一个小东西. 原本计划将gpuimage 的算法一个一个转写成cpu版本 c,c++ 版本. gpuimage 项目参考: https://github.com/BradLar ...
- CROS跨域请求处理
1.什么是跨域? 跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.跨域的严格一点的定义是:只要 协议,域名,端口有任 ...
- python_利用高阶函数实现剪枝函数
案例: 某些时候,我们想要为多个函数,添加某种功能,比如计时统计,记录日志,缓存运算结果等等 需求: 在每个函数中不需要添加完全相同的代码 如何解决? 把相同的代码抽调出来,定义成装饰器 求斐波那契数 ...
- 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...