广告
返回顶部
首页 > 资讯 > 后端开发 > Python >excel转为xml导入testlink
  • 440
分享到

excel转为xml导入testlink

excelxmltestlink 2023-01-31 07:01:36 440人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

   testlink1.9x导入用例功能支持xml文件导入,所以如果测试用例能够按照一定格式写入excel再用脚本生成xml文件然后导入testlink的话,这样就可以避免在公司加班到很晚,完全可以晚上回去慢慢写excel。    首先

   testlink1.9x导入用例功能支持xml文件导入,所以如果测试用例能够按照一定格式写入excel再用脚本生成xml文件然后导入testlink的话,这样就可以避免在公司加班到很晚,完全可以晚上回去慢慢写excel。j_0063.gifj_0063.gif

   首先是一个操作excel的类,这个从网上找的源码,然后做了一些修改,其实这个功能里只用到了getCell这个函数,也就是读excel单元格中的内容。

#coding=utf-8
from xml.etree import ElementTree
from win32com.client import Dispatch
import win32com.client
import os
class easy_excel:
    def __init__(self,filename=None):
        self.xlApp=win32com.client.Dispatch('Excel.Application')
                                                                                                                                                                                                                                                 
        if filename:
            self.filename=os.getcwd()+"\\"+filename
            #self.xlApp.Visible=True
            self.xlBook=self.xlApp.Workbooks.Open(self.filename)
        else:
            #self.xlApp.Visible=True
            self.xlBook=self.xlApp.Workbooks.Add()
            self.filename=''
    def save(self,newfilename=None):
        if newfilename:
            self.filename=os.getcwd()+"\\"+newfilename
            #if os.path.exists(self.filename):
                #os.remove(self.filename)
            self.xlBook.SaveAs(self.filename)
        else:
            self.xlBook.Save()
    def close(self):
        self.xlBook.Close(SaveChanges=0)
        self.xlApp.Quit()
    def getCell(self,sheet,row,col):
        sht=self.xlBook.Worksheets(sheet)
        return sht.Cells(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):
        start_coloum=int(dic_config["start_coloum"])
        #如果这列不存在就不合并单元格
        if col2!=start_coloum-1:
            sht=self.xlBook.Worksheets(sheet)
            sht.Range(sht.Cells(row1,col1),sht.Cells(row2,col2)).Merge()
        #else:
            #print 'Merge cells coloum %s failed!' %col2
    def setBorder(self,sheet,row,col):
        sht=self.xlBook.Worksheets(sheet)
        sht.Cells(row,col).Borders.LineStyle=1
    def set_col_width(self,sheet,start,end,length):
        start+=96
        end+=96
        msg=chr(start)+":"+chr(end)
        #print msg
        sht=self.xlBook.Worksheets(sheet)
        sht.Columns(msg.upper()).ColumnWidth=length

   主要的思路是先读excel里面的内容,然后存到一个特定的数据结构中,再从数据结构中取值生成xml文件。这里row_flag用来标记当前读到的行数。

class operate():
    def __init__(self):
        self.temp=easy_excel('test.xlsx')
        self.dic_testlink={}
        self.row_flag=2
        self.testsuite = self.temp.getCell('Sheet1',1,1)
        self.dic_testlink[self.testsuite]={"node_order":"13","details":"","testcase":[]}
        self.content = ""
        self.content_list = []
    def xlsx_to_dic(self):
        while True:
            #print 'loop1'
                #list_testcase = dic_testlink[testsuite].["testcase"]
            #1.用例名2.关键字3.摘要4.前提5.步骤6.预期结果
            testcase = {"name":"","node_order":"100","externalid":"","version":"1","summary":"","preconditions":"","execution_type":"1","importance":"3","steps":[],"keyWords":"P1"}  
            testcase["name"] = self.temp.getCell('Sheet1',self.row_flag,1)
            testcase["summary"] = self.temp.getCell('Sheet1',self.row_flag,3)
            testcase["preconditions"] = self.temp.getCell('Sheet1',self.row_flag,4)          
            #print self.temp.getCell('Sheet1',self.row_flag,3)
            step_number=1
            testcase["keywords"] = self.temp.getCell('Sheet1',self.row_flag,2)
            print testcase["keywords"]
            while True:
                #print 'loop2'                
                step = {"step_number":"","actions":"","expectedresults":"","execution_type":""}
                step["step_number"] = step_number
                step["actions"] = self.temp.getCell('Sheet1',self.row_flag,5)
                step["expectedresults"] = self.temp.getCell('Sheet1',self.row_flag,6)
                testcase["steps"].append(step)
                step_number += 1
                self.row_flag += 1
                if self.temp.getCell('Sheet1',self.row_flag,1) is not None  or self.temp.getCell('Sheet1',self.row_flag,5) is None:
                    break
            #print testcase
                                                                                                                                           
            self.dic_testlink[self.testsuite]["testcase"].append(testcase)
            #print self.row_flag
            if self.temp.getCell('Sheet1',self.row_flag,5) is None and self.temp.getCell('Sheet1',self.row_flag+1,5) is None:
                break
        self.temp.close()
        #print self.dic_testlink
    def content_to_xml(self,key,value=None):
        if key == 'step_number' or key == 'execution_type' or key == 'node_order' or key == 'externalid' or key == 'version' or key == 'importance':
            return "<"+str(key)+"><![CDATA["+str(value)+"]]></"+str(key)+">"
        elif key == 'actions' or key == 'expectedresults' or key == 'summary' or key == 'preconditions':
            return "<"+str(key)+"><![CDATA[<p> "+str(value)+"</p> ]]></"+str(key)+">"
        elif key == 'keywords':
            return '<keywords><keyword name="'+value+'"><notes><![CDATA[ 每个版本都会执行的用例 ]]></notes></keyword></keywords>'
        elif key == 'name':
            return '<testcase name="'+str(value)+'">'
        else:
            return '##########'
    def dic_to_xml(self):
        testcase_list = self.dic_testlink[self.testsuite]["testcase"]
        for testcase in testcase_list:
            for step in testcase["steps"]:
                self.content += "<step>"
                self.content += self.content_to_xml("step_number",step["step_number"])
                self.content += self.content_to_xml("actions",step["actions"])
                self.content += self.content_to_xml("expectedresults",step["expectedresults"])
                self.content += self.content_to_xml("execution_type",step["execution_type"])
                self.content += "</step>"
            self.content = "<steps>" + self.content + "</steps>"
            self.content = self.content_to_xml("importance",testcase["importance"]) + self.content
            self.content = self.content_to_xml("execution_type",testcase["execution_type"]) + self.content
            self.content = self.content_to_xml("preconditions",testcase["preconditions"]) + self.content
            self.content = self.content_to_xml("summary",testcase["summary"]) + self.content
            self.content = self.content_to_xml("version",testcase["version"]) + self.content
            self.content = self.content_to_xml("externalid",testcase["externalid"]) + self.content
            self.content = self.content_to_xml("node_order",testcase["node_order"]) + self.content
            self.content = self.content + self.content_to_xml("keywords",testcase["keywords"])
            self.content = self.content_to_xml("name",testcase["name"]) + self.content
            self.content = self.content + "</testcase>"
            self.content_list.append(self.content)
            self.content = ""
        self.content = "".join(self.content_list)
        self.content = '<testsuite name="'+self.testsuite+'">'+self.content+"</testsuite>"
        self.content = '<?xml version="1.0" encoding="UTF-8"?>' + self.content
        self.write_to_file()
    def write_to_file(self):
        cp = open("test.xml","w")
        cp.write(self.content)
        cp.close()
                                                                                                                                       
test=operate()
test.xlsx_to_dic()
test.dic_to_xml()

   excel的格式必须跟下图中的格式一样,否则会无法正确读取。

wKioL1MhlWjhT7tqAAE0e6A8x9Q141.jpg

   这样导出的xml文件导入后的结果如下图。

wKioL1MhlcjQUfX_AABQgJTPDNk592.jpg

   testlink中的用例结果如下图。

wKiom1MhlkiQ4OvlAAG8ZgnIMOI413.jpg

   如果需要编译好的文件,由于文件大于2M,请到我的下载空间下载。目标文件为test.xlsx,一定要严格按照格式,不该写数据的地方千万留空,生成的xml文件为test.xml。

--结束END--

本文标题: excel转为xml导入testlink

本文链接: https://www.lsjlt.com/news/190920.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • excel转为xml导入testlink
       testlink1.9x导入用例功能支持xml文件导入,所以如果测试用例能够按照一定格式写入excel再用脚本生成xml文件然后导入testlink的话,这样就可以避免在公司加班到很晚,完全可以晚上回去慢慢写excel。    首先...
    99+
    2023-01-31
    excel xml testlink
  • Python实现将xml导入至excel
    最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意。 那求人不如尔己,自...
    99+
    2022-06-04
    Python xml excel
  • Java之使用POI教你玩转Excel导入与导出
    目录POI 简介POI依赖文件POI常用类数据导出设置样式数据导入在平时开发项目时对数据的处理肯定是少不了的。对于数据处理也是很多程序员比较头疼的问题,就比如项目中的数据是如何添加进...
    99+
    2022-11-13
    Java使用POI Java Excel导入 Java Excel导出
  • pentaho工具将数据库数据导入导出为Excel图文步骤
    目录需求一:将mysql一张表数据导出到Excel第一步:添加数据库驱动包第二步:新建转换第三步:配置数据库连接第四步:配置输出Excel格式第五步:运行需求二:将Excel数据导入...
    99+
    2022-11-13
  • 关于导入excel时js转换时间的正确方式
    目录一、基础二、问题描述三、解决思路附:js读取excel中日期格式转换问题总结一、基础 1、excel的日期是以1900-1-0开始计算的,既1900-1-1就是1天; 2、js的...
    99+
    2022-11-12
  • pentaho工具将数据库数据导入导出为Excel图文的方法
    今天小编给大家分享一下pentaho工具将数据库数据导入导出为Excel图文的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-06-29
  • php怎么导出数据库的数据并转为excel表格
    在网站开发和数据处理中,数据库扮演着非常重要的角色,如何正确地导出数据库数据并转换为Excel表格则是我们常常需要解决的问题。在本文中,我们将介绍如何使用PHP语言轻松地实现这一操作。一、准备工作在开始我们的操作之前,需要安装PHP环境和P...
    99+
    2023-05-14
    php 数据库
  • php如何导出数据库的数据并转为excel表格
    本文小编为大家详细介绍“php如何导出数据库的数据并转为excel表格”,内容详细,步骤清晰,细节处理妥当,希望这篇“php如何导出数据库的数据并转为excel表格”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-07-05
  • Excel数据导入Mysql常见问题汇总:如何处理数据格式转换的问题?
    Excel数据导入Mysql常见问题汇总:如何处理数据格式转换的问题?导入Excel数据到MySQL数据库是一种常见的数据迁移方式,但在这个过程中经常会遇到数据格式转换的问题。本文将为读者总结一些常见的数据格式转换问题,并提供解决方案。日期...
    99+
    2023-10-22
    Excel MySQL 数据格式转换
  • 奥维ovobj 文件,转化为shp文件,再变sql文件导入到pgsql里
    先变 KML 文件。 再用 QGIS的矢量 变成 shp文件。 ** 最后 。 shp2pgsql -W utf8 -s 4326 /home/manbug/ningbo/NB.shp ning...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作