首页 > 数据库 >17.1 xlrd模块 17.2接口自动化第一版17.3pymysql模块 17.4接口自动化第二版

17.1 xlrd模块 17.2接口自动化第一版17.3pymysql模块 17.4接口自动化第二版

时间:2022-09-07 20:14:19浏览次数:81  
标签:sheet self work excel 接口 模块 自动化 data row

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

相关文章

  • python自动化测试系列教程
    随着互联网产品更新迭代加快,Web开发和测试的需求也越来越大。很难想象,如果阿里的双11、京东的618,这些庞大繁杂的系统,由工程师们一个个手动测试,将会是一个怎样费时费力、......
  • 15.1sys模块15.2datatime模块15.3logging模块15.4request15.5crm实战15.6参数介绍15.7
    15.1sys模块importsysprint(sys.modules)#描述当前执行代码的位置,解释器中导入的所有模块都会被放在字典中importtimeprint(time.time())print(sys.modules['time'].tim......
  • 16.1json模块 16.2文件上传 16.3session的高级用法
    16.1json模块#json主要是干嘛的?json非常严格的数据类型,只能用“”,不然会报错,只支持""#把一个东西变成序列#[1,2,3,4,5]#有序的叫序列#{"a",'b'}#散列#importjson......
  • 包和模块、库、json库
    七.包和模块package:针对代码结构的组织,一个包里面可以拥有很多的python文件module:一个python文件就是一个模块1.从另一个模块直接引用所需代码模块必须是存放在......
  • 9.1模块和包
    #模块的名字一般都是小写字母#一般都是把相关的功能放在一起#自定义模块#模块导入遵循PEP8规范,一般都是单行导入#importheihei#frombao.hahaimporta,b......
  • git submoudle删除子模块后再次添加报错!
    要按顺序执行命令gitsubmoduledeinit submodulenamegitrm submodulenamegitrm--cached submodulenamerm-rf./git/modules/submodulename 这一步是针对已经......
  • EasyCVR云端录像模块无法进行下载是什么原因?该如何解决该问题?
    EasyCVR平台支持海量视频汇聚管理,能兼容多类型的设备接入,可覆盖市面上大多数的视频源设备,包括各种IPC、NVR、视频服务器、单兵设备、编码器设备等。平台也可支持多协议接入......
  • Java 基础三、接口与内部类
    1.  在Java程序语言中,接口是对类的一种描述。例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口。publicinterfaceComparab......
  • 【Python】math 模块用法
    math模块一些用法trunc(x)传入整数或浮点数,返回数值的整数部分,忽略小数部分,不会四舍五入importmathmath.trunc(2.77)#2math.trunc(8.32)#8math.trunc......
  • Es6 模块化规范(import)
    index.js文件://第1种导出方式exportletaddress="cz";exportletobj={b:2};//import/export输出的是值的引用address="河北省沧州市"//当前文件执行完......