# -*- coding: utf-8 -*-
import os
import sys
import xlrd
##reload(sys)
##sys.setdefaultencoding('utf-8')
print sys.getdefaultencoding()
FunKey = ['IGMP','VLAN','MAC','LACP','MSTP',u'端口定位']#全部的父目录
def deleteEnterkey(tmp):
'''读取到的字符串,将回车符转换为空格'''
rtn = ''
for i in range (0,len(tmp)):
if(tmp[i] == '\n'):
rtn = rtn + ' '
else:
rtn = rtn + tmp[i]
return rtn
def convert2normal(tmp):
'''考虑文件名中存在‘:’(中文或英文),将‘:’转换为‘比’'''
rtn = ''
for i in range (0,len(tmp)):
if((tmp[i] == ':') or (tmp[i] == u':')):
rtn = rtn + u'比'
else:
rtn = rtn + tmp[i]
return rtn
def createSuiteDir(suite_data):
suite_path = '.'#os.getcwd()
suite_module = ''
manyDir = []
manyDir = suite_data.split('/')
dir_len = len(manyDir)
for i in range (0,dir_len):
for funDir in FunKey:
if funDir == manyDir[i]:#建立父目录
suite_module = funDir
if not os.path.exists(funDir):
os.makedirs(funDir)
suite_path = funDir
for j in range (i+1,dir_len-1):#建立子目录
manyDir[j] = convert2normal(manyDir[j])#将目录中的特殊字符剔除,例如‘:’
suite_path = suite_path+'/'+manyDir[j]
if not os.path.exists(suite_path):
os.makedirs(suite_path)
return suite_path,suite_module
def getSuiteData(suite_data):
rtn = '没有找到suite'
rtn = suite_data.split('/')[-1]#获取文件名称
rtn = convert2normal(rtn)
return rtn
filenamelist = os.listdir(os.getcwd())
for i in range (0,len(filenamelist)):
if 'xls' in filenamelist[i]:
print filenamelist[i]
filename = filenamelist[i]
bk = xlrd.open_workbook(filename)
shxrange = range(bk.nsheets)
try:
#sh = bk.sheet_by_name(u'第1页')
sh = bk.sheets()[0]
except:
print "no sheet named Sheet1"
#获取列数、行数
ncols = sh.ncols
nrows = sh.nrows
print "all rows:%d, all cols:%d" % (nrows,ncols)
#第9/1列为文件编号
#第2/1列为文件名称
#第10/1列为文件描述,可以为空
#第12-15/1列为文件步骤,步骤个数不定
#获取数据suite_data和case_data
suite_list = []
case_list = []
for i in range(1,nrows):
suite_data = getSuiteData(sh.cell_value(i,0))
case_data_bianhao = sh.cell_value(i,8) #编号
case_data_mingcheng = sh.cell_value(i,1) #名称
case_data = case_data_bianhao + ' ' + case_data_mingcheng
#print suite_data
if suite_data == '':
pass
else:
suite_list.append(suite_data)
case_list.append(case_data)
##for row_num in range(1,nrows):
## suite_data = getSuiteData(sh.cell_value(row_num,0))
## suite_path = createSuiteDir(sh.cell_value(row_num,0))
## filename = suite_data + '.txt'
## #print filename
## f = open(suite_path+'/'+filename, 'a+')#采用附加方式
## f.close()
for i in range(len(suite_list)):
print 'suite : ',suite_list[i]
print 'case : ',case_list[i]
#获取suite包含的case个数
suite_num = []
cnt = 1
for i in range(len(suite_list)-1):
if suite_list[i] == suite_list[i+1]:
cnt = cnt + 1
else:
suite_num.append(cnt)
cnt = 1
suite_num.append(cnt)
for i in range(len(suite_num)):
print 'suite ',i+1,' 包含的case个数 : ',suite_num[i]
#定位不同suite,找到执行初始化(一次)的具体位置
suite_addnum = []
suite_addnum.append(1)
cnt = 0
for i in range(len(suite_num)-1):
cnt = cnt + suite_num[i]
suite_addnum.append(cnt+1)
for i in range(len(suite_num)):
print 'suite ',i+1,' 初始化(一次)的位置 : ' ,suite_addnum[i]
##开始大循环
suite_index = 0 #suite的个数累加
suite_cnt = 0 #suite初始化(一次)的位置变化
file_flag = 0 #suite初始化(一次)的标记
reload(sys)
sys.setdefaultencoding('utf-8')
for row_num in range(1,nrows):
suite_data = getSuiteData(sh.cell_value(row_num,0))
## 创建suite文件
if(suite_data != ''):
suite_path,suite_module = createSuiteDir(sh.cell_value(row_num,0))#获取当前suite文件的目录路径
suite_index = suite_index + 1
if(suite_index == suite_addnum[suite_cnt]):
file_flag = 1
if(suite_cnt < (len(suite_num)-1)):#防止索引超限
suite_cnt = suite_cnt + 1
filename = suite_data + '.txt'
print suite_path
print filename
f = open(suite_path+'/'+filename, 'a+')#采用附加方式
## suite初始化(一次)
if(file_flag == 1):
file_flag = 0
initContext = u'*** Settings *** \n'
initContext = initContext + u'Documentation 作者(姓名+工号):\n'
case_doc = sh.cell_value(row_num,9) #文档描述
case_doc2 = deleteEnterkey(case_doc)
initContext = initContext + u'... ' + case_doc2 + '\n'
initContext = initContext + u'Test Setup 环境准备\n'
initContext = initContext + u'Test Teardown 关闭所有连接\n'
initContext = initContext + u'Force Tags NOTC TOPO:GPON(1+1+1) MODULE:'+suite_module+'\n'
initContext = initContext + u'Default Tags STATE:调试\n'
initContext = initContext + u'Resource ../../'+suite_module+'(NetCard)用例相关资源和参数.txt\n'
initContext = initContext + u'Resource ../../'+suite_module+'(NetCard)用例相关关键字.txt\n'
initContext = initContext + u'\n'
initContext = initContext + u'*** Test Cases ***\n'
## print type(initContext)
initContext = initContext.encode('utf-8')
## print type(initContext)
f.writelines(initContext)
## 写入case
case_bianhao = sh.cell_value(row_num,8)
if(case_bianhao != ''):
case_bianhao = sh.cell_value(row_num,8) #编号
case_mingcheng = sh.cell_value(row_num,1) #名称
case_data = case_bianhao + ' ' + case_mingcheng + '\n'
## print type(case_data)
## print case_data
case_input = case_data.encode('utf-8')
## print type(case_input)
## print case_input
## print '\n'
f.writelines(case_input)
## 写入step
step_num = sh.cell_value(row_num,11) #步骤
step_num2 = deleteEnterkey(step_num)
input_data = sh.cell_value(row_num,12) #输入
## print type(input_data)
## print input_data
## print '\n'
input_data2 = deleteEnterkey(input_data)
## print input_data2
## print '\n'
output_data = sh.cell_value(row_num,13) #输出
output_data2 = deleteEnterkey(output_data)
comment_data = sh.cell_value(row_num,14) #备注
comment_data2 = deleteEnterkey(comment_data)
## step_data = ' log many *---------- STEP '+step_num+' ----------* '+input_data+' '+output_data+' '+comment_data+'\n'
step_data = ' log many *---------- STEP '+step_num2+' ----------* '+input_data2+' '+output_data2+' '+comment_data2+'\n'
step_input = step_data.encode('utf-8')
f.writelines(step_input)
## 关闭suite文件
f.close()
相关文章
- Kubernetes:分享一个很简洁的 k8s 管理工具 Skooner
- 第一个python程序hello.py
- 一个C语言写的小游戏(flappy bird)
- Python文件读取编码错误问题解决之(PyCharm开发工具默认设置的坑。。。)
- SVM支持向量机推导,工具介绍及python实现
- 使用hexdump工具追踪EXT4文件系统中的一个文件
- Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站
- 方法:一个简单的读取配置文件.properties的工具类 JAVA
- 如何在python中构建一个列表项集?
- 【转】一个小工具类,利用shareObject把数据缓存