使用python版本为:3.5
环境要求:
1,安装jdk1.8
2,安装python
3,安装python模块xlrd、xml
运行(注意:excel文件、xml文件和代码执行文件在同一目录):
1、命令行进入到py文件的目录
(windows系统,cmd进入dos命令窗口,执行:“cd C:\Users\...”,进入到文件所在路径目录,这里举例文件在C:\Users目录下面)
(OS系统,进入终端,输入命令"cd /Users/xiaojingjing/Documents/",进入到文件所在路径目录,这里举例文件在/Users/xiaojingjing/Documents/目录下面,注意⚠️,cd后面有一个空格)
2、执行py脚本文件,举例:脚本为“main.py”
(windows系统,输入命令:“python main.py”)
(OS系统,输入命令:“python main.py”)
excel格式要求:
1,excel文件名称为用例集名称
2,excel文件中的标签对应功能模块名称
3,目前一个testcase只能对应一个步骤和一个预期结果
参考附件截图
代码中是自定义测试用例集名称为“运维端app1.2版本”,可以用
testsuitename1=excelfilename[0:-4] 来截取文件前半部分名称来作为测试用例集名称
代码如下:
# -*- coding:utf-8 -*- __author__ = '三天', __time__ = '2018/3/18 下午9:58', version = '', from xml.dom.minidom import Document import xlrd # 指定生成xml文件名称以及路径,这里是在根目录下 # xmlfilename='testcase.xml' # 指定源excel文件名称以及路径,这里是在根目录下 excelfilename='your_testCases_suite.xlsx' # 创建dom文档 doc = Document() testsuiteid='1233' #testuitename为用例集名称,按照用例规范确定用例集名称,上线日期+项目版本,例如:20180329好医生APP1.2 testsuitename=excelfilename[0:-5] print("用例集名称:",testsuitename) #设置生成xml文件名称与Excel文件名称对应 xmlfilename=testsuitename+'.xml' testsuite = doc.createElement('testsuite') #设置根节点属性 testsuite.setAttribute('id',testsuiteid) testsuite.setAttribute('name',testsuitename) # 根节点插入dom树 doc.appendChild(testsuite) # ==================================================== #创建节点node_order node_order=doc.createElement('node_order') #创建node_order的文本节点 node_order_text=doc.createTextNode('<![CDATA[5]]>') #将文本节点插入到<node_order>下 node_order.appendChild(node_order_text) #将<node_order>插入到父节点<testsuite>下 testsuite.appendChild(node_order) # ===================================================== #创建节点details details=doc.createElement('details') #创建node_order的文本节点 details_text=doc.createTextNode("<![CDATA[]]>") #将文本节点插入到<node_order>下 details.appendChild(details_text) #将<node_order>插入到父节点<testsuite>下 testsuite.appendChild(details) datacases=xlrd.open_workbook(excelfilename) print("标签数量:",datacases.sheet_names()) sheets=datacases.sheet_names() case_num = 0 for sheet in sheets: sheet1=datacases.sheet_by_name(sheet) # ====================测试用例功能模块一1⃣️=============================== #创建节点testsuite testsuite1=doc.createElement('testsuite') #创建节点testsuite属性 id='999' testsuite1.setAttribute('id',id) testsuite1.setAttribute('name',sheet) testsuite.appendChild(testsuite1) # ==================================================== #创建节点node_order node_order=doc.createElement('node_order') #创建node_order的文本节点 node_order_text=doc.createTextNode('<![CDATA[5]]>') #将文本节点插入到<node_order>下 node_order.appendChild(node_order_text) #将<node_order>插入到父节点<testsuite>下 testsuite1.appendChild(node_order) # ===================================================== #创建节点details details=doc.createElement('details') #创建node_order的文本节点 details_text=doc.createTextNode("<![CDATA[]]>") #将文本节点插入到<node_order>下 details.appendChild(details_text) #将<node_order>插入到父节点<testsuite>下 testsuite1.appendChild(details) #定义行数为文档中有数据的行数 row_num=sheet1.nrows # print(sheet,"用例个数为:",case_num) row_nums = 0 for i in range(1,row_num): # casenum=casenum+1 # Actions_Number=1 #定义默认步骤编号第一步 Actions_Number=sheet1.cell_value(i,0) TestCase = sheet1.cell_value(i, 1) Summary = sheet1.cell_value(i, 2) Preconditions = sheet1.cell_value(i, 3) Actions = sheet1.cell_value(i, 4) Expectedresults = sheet1.cell_value(i, 5) if len(TestCase) <= 1: #增加步骤编号 # Actions_Number=Actions_Number+1 # # ============================================================= # 创建节点step step = doc.createElement('step') steps.appendChild(step) # ============================================================= # ============================================================= # 创建节点step_number step_number = doc.createElement('step_number') Actions_Number=str(Actions_Number) step_number_text = doc.createTextNode(Actions_Number) step_number.appendChild(step_number_text) step.appendChild(step_number) # ============================================================= # 创建节点actions actions = doc.createElement('actions') actions_text = doc.createTextNode(Actions) actions.appendChild(actions_text) step.appendChild(actions) # ============================================================= # 创建节点expectedresults expectedresults = doc.createElement('expectedresults') expectedresults_text = doc.createTextNode(Expectedresults) expectedresults.appendChild(expectedresults_text) step.appendChild(expectedresults) # ============================================================= # 创建节点execution_type execution_type = doc.createElement('execution_type') execution_type_text = doc.createTextNode("<![CDATA[1]]>") execution_type.appendChild(execution_type_text) step.appendChild(execution_type) else: case_num = case_num + 1 row_nums =row_nums+1 # 创建节点testcase testcase = doc.createElement('testcase') # 创建testcase节点属性 testcase.setAttribute('internalid', 'id') testcase.setAttribute('name', TestCase) testsuite1.appendChild(testcase) # ============================================================= # 创建节点node_order node_order = doc.createElement('node_order') # 创建node_order的文本节点 node_order_text = doc.createTextNode('<![CDATA[1000]]>') # 将文本节点插入到<node_order>下 node_order.appendChild(node_order_text) # 将<node_order>插入到父节点<testsuite>下 testcase.appendChild(node_order) # ============================================================= # 创建节点externalid externalid = doc.createElement('externalid') # 创建externalid的文本节点 externalid_text = doc.createTextNode('<![CDATA[216]]>') # 将文本节点插入到<externalid>下 externalid.appendChild(externalid_text) # 将<nexternalid>插入到父节点<testsuite>下 testcase.appendChild(externalid) # ============================================================= # 创建节点version version = doc.createElement('version') # 创建node_order的文本节点 version_text = doc.createTextNode('<![CDATA[1]]>') # 将文本节点插入到<node_order>下 version.appendChild(version_text) # 将<node_order>插入到父节点<testsuite>下 testcase.appendChild(version) # ============================================================= # 创建节点summary summary = doc.createElement('summary') # 创建node_order的文本节点 summary_conent = '<![CDATA[1]]>' + Summary summary_text = doc.createTextNode(summary_conent) # 将文本节点插入到<node_order>下 summary.appendChild(summary_text) # 将<node_order>插入到父节点<testsuite>下 testcase.appendChild(summary) # ============================================================= # preconditions # 创建节点preconditions preconditions = doc.createElement('preconditions') # 创建preconditions的文本节点 preconditions_conent = '<![CDATA[1]]>' + Preconditions preconditions_text = doc.createTextNode(preconditions_conent) # 将文本节点插入到<node_order>下 preconditions.appendChild(preconditions_text) # 将<node_order>插入到父节点<testsuite>下 testcase.appendChild(preconditions) # ============================================================= # ============================================================= # 创建节点execution_type execution_type = doc.createElement('execution_type') # 创建preconditions的文本节点 execution_type_text = doc.createTextNode('<![CDATA[1]]>') # 将文本节点插入到<node_order>下 execution_type.appendChild(execution_type_text) # 将<node_order>插入到父节点<testsuite>下 testcase.appendChild(execution_type) # ============================================================= # 创建节点importance importance = doc.createElement('importance') # 创建preconditions的文本节点 importance_text = doc.createTextNode('<![CDATA[2]]>') # 将文本节点插入到<node_order>下 importance.appendChild(importance_text) # 将<node_order>插入到父节点<testsuite>下 testcase.appendChild(importance) # ============================================================= # 创建节点estimated_exec_duration estimated_exec_duration = doc.createElement('estimated_exec_duration') testcase.appendChild(estimated_exec_duration) # ============================================================= # 创建节点status status = doc.createElement('status') status_text = doc.createTextNode('1') status.appendChild(status_text) testcase.appendChild(status) # ============================================================= # 创建节点is_open is_open = doc.createElement('is_open') is_open_text = doc.createTextNode('1') is_open.appendChild(is_open_text) testcase.appendChild(is_open) # ============================================================= # 创建节点active active = doc.createElement('active') active_text = doc.createTextNode('1') active.appendChild(active_text) testcase.appendChild(active) # ============================================================= # 创建节点steps steps = doc.createElement('steps') testcase.appendChild(steps) # ============================================================= # 创建节点step step = doc.createElement('step') steps.appendChild(step) # ============================================================= # 创建节点step_number step_number = doc.createElement('step_number') step_number_text_count =str(Actions_Number) step_number_text = doc.createTextNode(step_number_text_count) step_number.appendChild(step_number_text) step.appendChild(step_number) # ============================================================= # 创建节点actions actions = doc.createElement('actions') actions_text = doc.createTextNode(Actions) actions.appendChild(actions_text) step.appendChild(actions) # ============================================================= # 创建节点expectedresults expectedresults = doc.createElement('expectedresults') expectedresults_text = doc.createTextNode(Expectedresults) expectedresults.appendChild(expectedresults_text) step.appendChild(expectedresults) # ============================================================= # 创建节点execution_type execution_type = doc.createElement('execution_type') execution_type_text = doc.createTextNode("<![CDATA[1]]>") execution_type.appendChild(execution_type_text) step.appendChild(execution_type) print(sheet, "用例个数为:", row_nums) # 将dom对象写入本地xml文件 with open(xmlfilename, 'w') as f: f.write(doc.toprettyxml(indent='\t')) f.close() print("共计用例条数为:",case_num,"条!")
小技巧:
如果要实现换行,需要在excel单元格换行部分增加<p></p>
例如:
<p>1.当前设备已绑定</p>
<p>2.BD工号:123456</p>
<p>3.设备类型:小桩机</p>
<p>4.mac地址:456789</p>
<p>5.门店:哈哈</p>
效果如下:
相关推荐
setting.xml文件,修改Maven仓库指向至阿里仓
基于java的玉安农副产品销售系统的开题报告
dev-c++ 6.3版本
基于java的项目监管系统开题报告
基于springboot多彩吉安红色旅游网站源码数据库文档.zip
毕业设计&课设_基于 AFLFast 改进能量分配策略的毕业设计项目,含 Mix Schedule策略设计及测试结果分析.zip
基于springboot办公用品管理系统源码数据库文档.zip
C++调用qml对象Demo
非常漂亮的类Web界面的Delphi设计54ed7-main.zip
VB SQL车辆管理系统是一款基于Visual Basic(VB)编程语言和SQL数据库开发的综合车辆管理工具。该系统集成了车辆信息管理、驾驶员信息管理、车辆调度、维修记录、数据存储与检索、报告生成以及安全权限管理等多个核心功能模块。 源代码部分提供了详细的开发流程和实现方法,涵盖了从数据库设计、界面设计到事件驱动编程、数据访问技术和错误处理等关键技术点。通过该系统,用户可以方便地录入、查询、修改和删除车辆及驾驶员信息,实现车辆信息的实时更新和跟踪。同时,系统还支持生成各类车辆管理相关的报告,帮助用户更好地掌握车辆运营情况。 系统部分则采用了直观易用的用户界面设计,使得用户能够轻松上手并快速完成车辆管理工作。系统还具备强大的数据处理能力和安全性,通过数据备份和系统升级优化等功能,确保数据的完整性和系统的稳定运行。 总体而言,VB SQL车辆管理系统是一款功能全面、易于操作且安全可靠的车辆管理工具,适用于企业和个人进行日常车辆运营和管理。无论是车辆信息的录入、查询还是报告生成,该系统都能够提供高效、便捷的服务,是车辆管理工作的理想选择。
AutoSAR基础学习资源
基于springboot英语学习平台源码数据库文档.zip
数据集,深度学习,密封数据集,马体态数据集
基于java的数字家庭网站开题报告
podman使用国内源镜像加速器
基于springboot+web的留守儿童网站源码数据库文档.zip
基于springboot的智能宾馆预定系统源码数据库文档.zip
GetQzonehistory-main.zip
环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目经过测试均可完美运行
内容概要:本文档详细介绍了QST公司生产的QMI8A01型号的6轴惯性测量单元的数据表及性能参数。主要内容包括设备特性、操作模式、接口标准(SPI、I2C与I3C),以及各种运动检测原理和技术规格。文中还提到了设备的工作温度范围宽广,内置的大容量FIFO可用于缓冲传感器数据,减少系统功耗。此外,对于器件的安装焊接指导亦有详细介绍。 适合人群:电子工程技术人员、嵌入式开发人员、硬件设计师等。 使用场景及目标:适用于需要精准测量物体空间位置变化的应用场合,如消费电子产品、智能穿戴设备、工业自动化等领域。帮助工程师快速掌握该款IMU的技术要点和应用场景。 其他说明:文档提供了详细的电气连接图表、封装尺寸图解等资料,方便用户进行电路板的设计制作。同时针对特定应用提出了一些优化建议。