17.1xlrd模块
# xlrd 和openpyxl
# 1.什么是xlrd模块?
# python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。
# 关于xlrd/xlwt和openpyxl的差别
# 两者都是对于excel文件的操作插件,两者的主要区别在于写入操作,其中xlwt针对Ecxec2007之前的版本,即.xls文件,
# 其要求单个sheet不超过65535行,而openpyxl则主要针对Excel2007之后的版本(.xlsx),
# 它对文件大小没有限制。另外还有区别就是二者在读写速度上的差异,xlrd/xlwt在读写方面的速度都要优于openpyxl,
# 但因为xlwt无法生成xlsx是个硬伤,所以想要尽量提高效率又不影响结果时,可以考虑用xlrd读取,用openpyxl写入。
import xlrd
import xlwt
# from xlutils import copy#(copy excel)
import requests
import json
class ExcelSet:
#读的操作:
def __init__(self):
self.work_book=xlrd.open_workbook('test.xls',formatting_info=True)#通过三种方式拿到
print('self.work_book',self.work_book)
self.work_sheet=self.work_book.sheets()#获取到所有的sheet
print(self.work_sheet)
# self.work_sheet=self.work_book.sheet_by_index(0)#通过索引顺序获取sheet
# print('self.work_sheet',self.work_sheet)
# self.work_sheet=self.work.sheet_by_name('示例')#通过名称获取sheet
# print(self.work_sheet)
# names=self.work_book.sheet_names()#返回book中所有工作表的名字
# print(names)
# content=self.work_book.sheet_names()#返回book中所有工作表的名字
# print(names)
#
# nrows=self.work_sheet.nrows#获取该sheet中的有效行数,比较重要的方法
# print(nrows)
#
# row_lst=self.work_sheet.row(0)#返回由该行中所有的单元格对象组成的列表,本身类型(列表),里面元素的类型:单元格对象(通过索引取值)
# print(row_lst,type(row_lst)
# print(type(row_lst[0]))#取到单元格对象
#
# ncols=self.work_sheet.ncols#获取列表的有效列数
# print(ncols)
#
#
# row_len=self.work_sheet.row_len(-1) #返回该列的有效单元格长度
# print(col_len)
#
# col_lst=self.work_sheet.col(2)#返回由该列中所有的单元格对象组成的列表
# print(col_lst)
#
# col_lst=self.work_sheet.col_values(1)#返回由该列中所有单元格的数据组成的列表
# print(col_lst)
#
# # lst=self.work_sheet.cell(行,列)#返回单元格对象
# # print(lst)
# lst=self.work_sheet.cell(0,1)#返回单元格对象
# print(ncols)
#
# lst=self.work_sheet.cell_value(1,3)#返回单元格中的数据
# print(lst)
#
#
#
# #通过key,value拼成字典形式
# key=self.work_sheet.row_values(0)
# value=self.work_sheet.row_values(1)
# dic=dict(zip(key,value))
# print(dic)
#
# 类名实例化
excel=ExcelSet()
#
# 写的操作:
#
# 先拷贝,通过下标写入数据
#写入
#1.拷贝
netWorkBook=copy.copy(self.work_book)#这里workSheet还是workBook 要看下
2.取拷贝的excel的sheet---sheet 下标(默认从0开始)
newSheet=netWorkBook.get_sheet(0)
3.写入数据--info--newSheet,write(行下标,列下标,内容)
newSheet.write(1,7,"通过")
4.保存excel
netWorkBook.save("../excel/result.xls")
# 返回列中单元格的长度
# len(0)代表第一行
#
#
#
#
#
# 一、打开文件
# 二、打开文件表
17.2 接口自动化第一版
import xlrd
import xlwt
from xlutils import copy
import requests
import json
import logging
from log import LogHandler
from testCase import cms_case_1,login_cms
class ExcelSet:
def __init__(self):
self.work_book=xlrd.open_workbook('test.xls',formatting_info=True)
self.work_sheet=self.work_book.sheet_by_index(0) # 通过索引顺序获取sheet
#1.拷贝
self.newWorkBook = copy.copy(self.work_book) #这里workSheet还是workBook 要看下
#2.取拷贝的excel的sheet---sheet 下标(默认从0开始)
self.newSheet=self.newWorkBook.get_sheet(0)
#3.实例化日志对象
log_func=LogHandler.LogHandlers()
#4.获取cms登录的cookie
self.cookie=login_cms.login_cms_func()
def read_excel_data(self):
for row in range (1,self.work_sheet.nrows):
case_id=self.work_sheet.cell_value(row,0)#第一次拿到用例的id
desc=self.work_sheet.cell_value(row,1)
url = self.work_sheet.cell_value(row, 2)
method = self.work_sheet.cell_value(row, 3)
header = self.work_sheet.cell_value(row, 4)
data= self.work_sheet.cell_value(row, 5)
except_result = self.work_sheet.cell_value(row, 6)
result = self.work_sheet.cell_value(row, 7)
if not url or not data:#有问题直接写日志
logging.error(f'测试用例 {case_id},{desc}url或data为空')
continue
if data:
data = json.loads(data) # 反序列化
data=eval(data)
#实例化:按位置传,在cms_case1里按位置接收
my_case=cms_case_1.MyTestCase(case_id,desc,url,method,
header,data,except_result,result)
res=my_case.send_request(self.cookie)
if except_result:
if except_result in str(res.json()):
logging.info(f'测试用例{case_id},{desc}测试通过!!!')
self.write_excel_data(row,'测试通过')
else:
logging.info(f'测试用例{case_id},{desc}测试失败!!!')
self.write_excel_data(row, '测试失败')
def write_excel_data(self,row,msg):
#3.写入数据--info--newSheet,write(行下标,列下标,内容)
self.newSheet.write(row,7,msg)
#4.保存excel
self.newWorkBook.save("../excel/result.xls")
# 实例化:
excel=ExcelSet()
excel.read_excel_data()
17.3 pymysql模块
import pymysql
conn = pymysql.connect(
host='localhost', # 连接的服务器ip
user='username', # 用户名
password='password', # 密码
database='day31', # 你想连接的数据库
charset='utf8' # 指定字符编码,不要加杠,如:utf-8
)
cursor = conn.cursor() # 实例化创建游标,获取游标,才能操作数据库
cursor = conn.cursor(pymysql.cursors.DictCursor) # 返回字典型的数据) # 创建游标
sql='select * from sys_user'
rows=cursor.execute(sql)
print(cursor.fetchall())#查询所有的数据,返回是元祖套元祖
print(cursor.fetchone())
print(cursor.fetchone())
# fetchone():获取下一行数据,第一次为首行
# fetchall():获取所有行数据源
# fetchmany(4):获取4行数据,不填参数默认查一条
sql='select * from sys_user where user_account = "laoding" '
cursor.execute(sql)
print(cursor.fetchall())#查询所有的数据,返回是元祖套元祖
#改
sql="update sys_user set user_account='laoding' where user_account = 'wind12345' "
cursor.execute(sql)
# 修改,删除,插入一定记得commit
conn.commit()
sql='select * from sys_user where user_account="laoding" '
cursor.execute(sql)
print(cursor.fetchall())#查询所有的数据,返回是元祖套元祖
#删
sql='delete from sys_user where user_account="laoding" '
effect_row=cursor.execute(sql)
conn.commit()
sql='select * from sys_user where user_account="laoding" '
cursor.execute(sql)
print(cursor.fetchall())#查询
sql="select * from userinfo where name='%s' and password = '%s' "%(username,pwd)
print(sql)
result=cursor.execute(sql)
# 改写为(execute 帮我们做字符串拼接,我们无需且一定不能再为%s加引号了
sql="select * from sys_user where user_account=%s and user_email=%s"#!!!注意%s需要去掉引号,因为pymys
result=cursor.execute(sql,['wind12367','[email protected]'])#pymysql模块自动帮我们解决sql注入问题,只要我们按照pymysql的规矩来。
print(cursor.fetchall())#查询
别忘了
cursor.close() #关闭断标
conn.close()#关闭连接对象
17.3接口自动化第二版
import xlrd
import xlwt
from xlutils import copy
import requests
import json
import logging
from log import LogHandler
from testCase import cms_case_1,login_cms
class ExcelSet:
def __init__(self):
self.work_book=xlrd.open_workbook('test.xls',formatting_info=True)
self.work_sheet=self.work_book.sheet_by_index(0) # 通过索引顺序获取sheet
#1.拷贝
self.newWorkBook = copy.copy(self.work_book) #这里workSheet还是workBook 要看下
#2.取拷贝的excel的sheet---sheet 下标(默认从0开始)
self.newSheet=self.newWorkBook.get_sheet(0)
#3.实例化日志对象
log_func=LogHandler.LogHandlers()
#4.获取cms登录的cookie
self.cookie=login_cms.login_cms_func()
def read_excel_data(self):
for row in range (1,self.work_sheet.nrows):
case_id=self.work_sheet.cell_value(row,0)#第一次拿到用例的id
desc=self.work_sheet.cell_value(row,1)
url = self.work_sheet.cell_value(row, 2)
method = self.work_sheet.cell_value(row, 3)
header = self.work_sheet.cell_value(row, 4)
data= self.work_sheet.cell_value(row, 5)
except_result = self.work_sheet.cell_value(row, 6)
result = self.work_sheet.cell_value(row, 7)
if not url or not data:#有问题直接写日志
logging.error(f'测试用例 {case_id},{desc}url或data为空')
continue
if data:
data = json.loads(data) # 反序列化
data=eval(data)
#实例化:按位置传,在cms_case1里按位置接收
my_case=cms_case_1.MyTestCase(case_id,desc,url,method,
header,data,except_result,result)
res=my_case.send_request(self.cookie)
if except_result:
if except_result in str(res.json()):
logging.info(f'测试用例{case_id},{desc}测试通过!!!')
self.write_excel_data(row,'测试通过')
else:
logging.info(f'测试用例{case_id},{desc}测试失败!!!')
self.write_excel_data(row, '测试失败')
def write_excel_data(self,row,msg):
#3.写入数据--info--newSheet,write(行下标,列下标,内容)
self.newSheet.write(row,7,msg)
#4.保存excel
self.newWorkBook.save("../excel/result.xls")
# 实例化:
excel=ExcelSet()
excel.read_excel_data()
标签:sheet,self,work,excel,接口,模块,自动化,data,row From: https://www.cnblogs.com/zhh0125/p/16667114.html