2. 读取excel上的测试用例和结果,成json格式,最终存到access数据库

结果如下:

{
: {
'Req_ID': 'Fqqqqq/qqqqq',
'Case_ID': 'ATC_LvPwrOff_Case001',
'Description': 'kkkkkkkkkkk',
'PreCondition': {
'B': ,
'V: 0,
'V': ,
'IN': ,
'IN': ,
'Ke: 1,
'INN': ,
'INage': ,
'Re': ,
'Rue':
},

excel_tojson.py

from openpyxl import load_workbook
from openpyxl.styles import colors, Font wb = load_workbook('VCU_TC_LvPwrOff.xlsx')
sheet = wb.active # 获得当前正在显示的sheet, 也可以用wb.get_active_sheet()# 获得当前正在显示的sheet, 也可以用wb.get_active_sheet() # b5_too = sheet.cell(row=, column=)
# print(b5_too.value)
#
# b6_too = sheet.cell(row=, column=)
# b7_too = sheet.cell(row=, column=)
# b8_too = sheet.cell(row=, column=)
#
# print(b6_too.value)
# print(b7_too.value)
# print(b8_too.value)
#
# print('-'*)
# for cell in list(sheet.rows)[]:
# print(cell.value)
#
# print('-'*)
# #判断一行的有效数据长度
# first_len = list(sheet.rows)[]
# # for i in first_len:
# # if 'None' == i.value:
# # first_len.remove(i)
# print(len(first_len))
# print('-'*)
# for row in sheet.iter_rows('A1:AF1'):
# for cell in row:
# print(cell.value)
TCrows=[]
First_info=[]
First_info_list = []
Second_info=[]
Second_info_list = []
pre_dic = {}
#获取testcase #获取所有行对象
for row in sheet.iter_rows():
TCrows.append(row) def get_all_row():
'''
获取首行row的信息
{"":{"Req_ID":,"Case_ID":,"Description":,"PreCondition":{
"IN_ChrgOffButton":x,
"IN_KeyStart":x}, "Action":{
"IN_KeyStart":x
}
{'Req_ID': , 'Case_ID': , 'Description': , 'PreCondition': , 'Action': , 'ExpectedResults': , 'Result': }
}
}
'''
# for i in range(, ):
pass
# for i in range(, ):
# Cases.append(TCrows[i])
# for Case in Cases:
# for cell in para_head:
# # print(cell.value,cell.coordinate)
# First_info_list.append(cell.value)
#
# # print(First_info_list)
# len_first_list = len(First_info_list)
# # print(len_first_list)
# while True:
# if First_info_list[-] == 'None':
# First_info_list.pop()
# else:
# break
# return First_info_list, len_first_list def get_row_first():
'''
获取首行row的信息
'''
for i in range(, ):
First_info.append(TCrows[i])
for para_head in First_info:
for cell in para_head:
# print(cell.value,cell.coordinate)
First_info_list.append(cell.value) # print(First_info_list)
len_first_list = len(First_info_list)
# print(len_first_list)
while True:
if First_info_list[-] == 'None':
First_info_list.pop()
else:
break
return First_info_list,len_first_list def get_row_second():
'''
获取第二行row的信息
'''
for i in range(, ):
Second_info.append(TCrows[i])
for para_head in Second_info:
for cell in para_head:
# print(cell.value,cell.coordinate)
Second_info_list.append(cell.value)
len_second_list = len(Second_info_list) return Second_info_list,len_second_list def parse_row_first(First_info_list):
'''
分析处理首行数据,划分
'''
for i in First_info_list:
if i != None:
pre_list.append(i) for first_item in pre_list:
index = First_info_list.index(first_item)
# print(first_item, ':', index)
pre_dic[first_item]=index
#仅仅返回最后四部分的索引值
return pre_dic #{'Req_ID': , 'Case_ID': , 'Description': , 'PreCondition': , 'Action': , 'ExpectedResults': , 'Result': } def parse_item_length(pre_dic):
index_PreCondition = pre_dic['PreCondition']
index_Action = pre_dic['Action']
index_ExpectedResults = pre_dic['ExpectedResults']
index_Result = pre_dic['Result'] len_PreCondition = pre_dic['Action']-pre_dic['PreCondition']
len_Action = pre_dic['ExpectedResults']-pre_dic['Action']
len_precondition = pre_dic['Result']-pre_dic['ExpectedResults']
return index_PreCondition,index_Action,index_ExpectedResults,index_Result,len_PreCondition,len_Action,len_precondition def parse_second_item():
'''
处理第二行的item数据,使得Precondition[,x]
''' if __name__ == '__main__':
First_info_list, len_first_list = get_row_first()
pre_list = [] #添加首行item信息 pre_dic = parse_row_first(First_info_list)
index_PreCondition, index_Action, index_ExpectedResults,index_Result,len_PreCondition, len_Action, len_precondition=parse_item_length(pre_dic)
#处理第二行title的数据
Second_info_list, len_second_list = get_row_second() Cases=[] for i in range(, ):
Cases.append(TCrows[i]) sum_num =
Result = {}
for case in Cases:
model_list = {}
model_list[First_info_list[]]= case[].value
model_list[First_info_list[]]= case[].value
model_list[First_info_list[]]= case[].value
# {'Req_ID': , 'Case_ID': , 'Description': , 'PreCondition': , 'Action': , 'ExpectedResults': , 'Result': }
precond_dict={}
for i in range(,+len_PreCondition): #(,)
precond_dict[Second_info_list[i]]= case[i].value
model_list['PreCondition'] = precond_dict
act_dict = {}
for j in range(index_Action, index_ExpectedResults): # (,)
act_dict[Second_info_list[j]] = case[j].value
model_list['Action'] = act_dict
Expect_dict = {}
for k in range(index_ExpectedResults, index_Result): # (,)
Expect_dict[Second_info_list[k]] = case[k].value
model_list['Action'] = Expect_dict
model_list['Result']= case[index_Result].value Result[sum_num] = model_list
sum_num +=
print(Result) '''
结果展示如下:
{
: {
'Req_ID': 'Func_LvPwrOff_Req001/Func_LvPwrOff_Req020/Func_LvPwrOff_Req021/Func_LvPwrOff_Req030',
'Case_ID': 'ATC_LvPwrOff_Case001',
'Description': 'KeyOn状态下电/VCU判断可以进行低压下电后,对BMS、DCDC、MCU(四个)、WPT、OBC等ECU低压下电控制-拉低硬线PwrOn/VCU判断可以进行低压下电后,对水泵、风扇、真空泵等低压执行器进行低压下电控制/任何状态(休闲、驾驶、充电)下低压下电,均需对热管理系统进行下电控制,控制热管理系统停止工作,降低整车静态功耗',
'PreCondition': {
'BMS_Tx_stPowComplete': ,
'VCU_Tx_stChrgFed': ,
'VCU_Tx_stReady': ,
'IN_ChrgOffButton': ,
'IN_KeyStart': ,
'KeySwt': ,
'IN_PowON': ,
'IN_12Voltage': ,
'RCValue': ,
'RC2Value':
},
'Action': {
'VCU_Tx_stDCDCEn': ,
'VCU_Tx_powMaxPerm': ,
'VCU_Tx_stChrgFed': ,
'O_S_BMSPwrOn': ,
'O_S_MCUPwrOn': ,
'O_S_DCPwrOn': ,
'O_S_VCUst': ,
'O_S_OBCPwrOn': ,
'O_S_ACPDURly_ON':
},
'Result': None
}
} 。。。。。。
'''

 3.  使用pypyodbc完成数据上传access数据库功能

cursor.execute("insert into resource(cid,name) values(%s, '%s')" % (12,name) );

pypy_odbc.py

# import pypyodbc
# str = 'Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=D:\\db\\DB_BenShaw.accdb'
# db=pypyodbc.win_connect_mdb(str) # 打开数据库连接
# curser = db.cursor()# 产生cursor游标
# curser.execute("select * from 测试用例") #
#导入模块
import pypyodbc
import json # import MySQLdb
#定义conn
def mdb_conn(db_name):
"""
功能:创建数据库连接
:param db_name: 数据库名称
:param db_name: 数据库密码,默认为空
:return: 返回数据库连接
"""
# str = 'Driver={Microsoft Access Driver (*.mdb)};PWD' + password + ";DBQ=" + db_name
str = 'Driver={Microsoft Access Driver (*.mdb,*.accdb)}'+";DBQ=" + db_name
conn = pypyodbc.win_connect_mdb(str) return conn #增加记录
def mdb_add(conn, cur, sql):
"""
功能:向数据库插入数据
:param conn: 数据库连接
:param cur: 游标
:param sql: sql语句
:return: sql语句是否执行成功
"""
try:
cur.execute(sql)
conn.commit()
return True
except Exception as e:
print(e)
return False #删除记录
def mdb_del(conn, cur, sql):
"""
功能:向数据库删除数据
:param conn: 数据库连接
:param cur: 游标
:param sql: sql语句
:return: sql语句是否执行成功
"""
try:
cur.execute(sql)
conn.commit()
return True
except:
return False #修改记录
def mdb_modi(conn, cur, sql):
"""
功能:向数据库修改数据
:param conn: 数据库连接
:param cur: 游标
:param sql: sql语句
:return: sql语句是否执行成功
"""
try:
cur.execute(sql)
conn.commit()
return True
except:
return False #查询记录
def mdb_sel(cur, sql):
"""
功能:向数据库查询数据
:param cur: 游标
:param sql: sql语句
:return: 查询结果集
"""
try:
cur.execute(sql)
return cur.fetchall()
except:
return [] def read_test_conf():
# 将字典类型的文件转换成字典
f=open('a.txt',"r",encoding='utf-8')
test_config=eval(f.read())
f.close()
return test_config def dic2sql(dic):
sf = '' for key in dic:
tup = [key,dic[key]]
sf += (str(tup) + ',')
sf = sf.rstrip(',') return sf if __name__ == '__main__':
pathfile = 'D:\\db\\DB_BenShaw.accdb'
tablename = '测试用例'
conn = mdb_conn(pathfile)
cur = conn.cursor()
#读取testcase文件数据
test_config = read_test_conf() for key,value in test_config.items():
print("用例%s"%key+"进行数据的插入") Req_id_str = value['Req_ID']
Req_id_str = Req_id_str.split('/')
Req_id_list = []
for i in Req_id_str:
Req_id_list.append(i) #['Func_LvPwrOff_Req001', 'Func_LvPwrOff_Req020', 'Func_LvPwrOff_Req021', 'Func_LvPwrOff_Req030']
# print(Req_id_list,len(Req_id_list)) count =
for Req_id in Req_id_list:
print("用例%s里的第%s 条需求" % (key,count) + "进行数据的插入")
#写入access数据库
Function = '低压下电管理'
Req_ID = Req_id
#用例分级 = 功能测试(默认)
TC_ID = value['Case_ID']
TC_Name = value['Description']
import pymysql
TC_Pre = value['PreCondition']
TC_Pre = json.dumps(TC_Pre) # TC_Pre = pymysql.escape_string(TC_Pre)
TC_Process = value['Action']
TC_Process = json.dumps(TC_Process) TC_Result = value['Result'] #插入之前进行查询,有则覆盖,无则增加
# 查
sql = "SELECT ID FROM " + tablename + " where TC_ID= '%s'" % TC_ID
sel_data = mdb_sel(cur, sql)
print(sel_data)
if sel_data:
# 改
sql = "Update " + tablename + " Set TC_Pre = '%s',TC_Process = '%s',TC_Result='%s' where TC_ID = '%s'" % (
TC_Pre, TC_Process, TC_Result, TC_ID)
if mdb_modi(conn, cur, sql):
print("%s修改成功22222222222!" % count)
else:
print("修改失败!") else:
# 增
sql = "Insert Into 测试用例(Function,Req_ID,用例分级,TC_ID,TC_Name,TC_Pre,TC_Process,TC_Result) Values ('低压下电管理', '%s','功能测试','%s','%s','%s','%s','%s')" % (
Req_ID, TC_ID, TC_Name, TC_Pre, TC_Process, TC_Result)
# sql = "Insert Into " + tablename + "(Function,Req_ID,用例分级,TC_ID,TC_Name,TC_Pre,TC_Process,TC_Result) Values(低压下电管理, Func_LvPwrOff_Req001, 功能测试, ATC_LvPwrOff_Case001,Description,PreCondition,Action,Result)"
if mdb_add(conn, cur, sql):
print("第%s条数据插入成功!" % count)
else:
print("第%s条数据插入失败!" % count) count += # #删
# sql = "Delete * FROM " + tablename + " where id = 32"
# if mdb_del(conn, cur, sql):
# print("删除成功!")
# else:
# print("删除失败!")
#
# #改
# sql = "Update " + tablename + " Set IsFullName = 1 where ID = 33"
# if mdb_modi(conn, cur, sql):
# print("修改成功!")
# else:
# print("修改失败!") #查
# sql = "SELECT * FROM " + tablename + " where id > 10"
# sel_data = mdb_sel(cur, sql)
# print(sel_data) cur.close() #关闭游标
conn.close() #关闭数据库连接

some working learning总结学习(二)的更多相关文章

  1. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  2. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)

    ##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...

  3. 集成学习二: Boosting

    目录 集成学习二: Boosting 引言 Adaboost Adaboost 算法 前向分步算法 前向分步算法 Boosting Tree 回归树 提升回归树 Gradient Boosting 参 ...

  4. Active Learning 主动学习

    Active Learning 主动学习 2015年09月30日 14:49:29 qrlhl 阅读数 21374 文章标签: 算法机器学习 更多 分类专栏: 机器学习   版权声明:本文为博主原创文 ...

  5. (转)Predictive learning vs. representation learning 预测学习 与 表示学习

    Predictive learning vs. representation learning  预测学习 与 表示学习 When you take a machine learning class, ...

  6. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  7. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  8. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  9. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

随机推荐

  1. 微信小程序实现图片裁剪上传(wepy)

    参考https://github.com/we-plugin/we-cropper,在wepy中实现,参考的具体例子是we-cropper/example/cutInside/ 项目上传图片时2:3的 ...

  2. 通过python的hashlib模块计算一个文件的MD5值

    Python的hashlib提供了很多摘要算法,如MD5,SHA1等常用算法. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(如MD5值 ...

  3. Endnote X8激活注册信息

    使用以下激活信息进行注册: Name:胡萝卜周 Organization:www.carrotchou.blog Product Key:3VHLX-TJJ74-SAM4N-38HEX-KNUCL 来 ...

  4. CSS布局学习(三) - Normal Flow 正常布局流(官网直译)

    默认情况下,元素是如何布局? 首先,取得元素的内容,加上内边距(padding),边框(border),外边距(margin)放在一个盒子中 - 这就是我们之前看到的盒子模型 默认情况下,块级元素的内 ...

  5. mysql数据库连接出问题,提示超时 java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.解决办法

    mysql数据库连接出问题,提示超时,后来发现问题在于连接mysql数据库的jar包跟数据库版本不对应导致的,更换jar包一致就解决了.

  6. [原]JSBSim 自动驾驶(浅出)

    jsbsim的脚本文件分为几大类: 1.系统脚本: systems  包含通用飞机各部分功能模块组件以及自动飞行控件:Autopilot.xml  和 自动飞行的算法控件:GNCUtilities.x ...

  7. Asp.net core 学习笔记 2.1 升级到 2.2

    首先跟着官网 step by step https://docs.microsoft.com/en-us/aspnet/core/migration/21-to-22?view=aspnetcore- ...

  8. C++句柄解析

    C++句柄类解析 引题:在C++中,对于运行时类型识别问题.在程序中使用引用或者指针在运行时动态识别对象类型.然而使用指针或者引用却增加了用户负担(在继承体系中,没有明确的基类到派生类的转换,必须用户 ...

  9. 小程序 input 组件内容显示不全(显示的长度不满 input 宽度)问题

    问题:小程序的input组件经常用到,但在使用input组件的时候会出现一种现象:明明设置了input的宽度,但是输入的内容显示的长度范围却怎么都不到一整个input组件的宽度,而且后面没显示的地方无 ...

  10. 【百度地图API】如何获取行政区域的边界?(转载)

    转自:http://www.cnblogs.com/milkmap/archive/2012/04/11/2442430.html 摘要:以前教过大家如何自行获取行政区域,或者自定义获取一个区域的边界 ...