20191011-构建我们公司自己的自动化接口测试框架-Util的读取excel常用方法模块
包括获取excel的sheet名字,设定excel的sheet,读excel,写excel等常规操作。
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import colors, Font
import locale, time class Excel(object):
def __init__(self, excel_file_path):
self.excel_file_path = excel_file_path # 目的在于在类的不同方法中共享此变量
self.wb = load_workbook(excel_file_path) # 表格对象
self.ws = self.wb[self.wb.sheetnames[0]] # 表格的第一个sheet对象
# 获取第一个sheet不能用self.wb.ative,因为这个选择的是默认被打开的那个,如果表格在关闭前是打开的第三个sheet,那么下一次打开的时候就是默认在第三个sheet的
# print(self.ws.title) def get_all_sheet_names(self):
return self.wb.sheetnames
def get_current_sheet_names(self):
return self.ws.title def get_sheet_name_by_index(self, index):
return self.wb.sheetnames[index - 1] def get_excel_file_path(self): # 获取excel表格的路径
return self.excel_file_path def create_sheet1(self, sheet_name, position=None):
try:
if position:
self.wb.create_sheet(sheet_name, position)
else:
self.wb.create_sheet(sheet_name)
self.save() # 向表格里写入东西后一定要保存
return True
except Exception as e:
print(e)
return False def set_sheet_by_name(self, sheet_name):
if sheet_name not in self.wb.sheetnames:
print('%s sheet不存在,请重新设置!' % sheet_name)
return False
self.ws = self.wb[sheet_name]
return True # 根据index设置activate sheet
def set_sheet_by_index(self, index):
if index >= len(self.wb.sheetnames):
return False
self.ws = self.wb[self.get_sheet_name_by_index(index)]
return True # 读值
def get_cell_value(self, row_no, col_no, sheet_name=None):
if sheet_name is not None: # 参数设置了新的sheet
result = self.set_sheet_by_name(sheet_name)
if result == False:
return None
return self.ws.cell(row_no, col_no).value # 读某一行的值
def get_row_values(self, row_no):
cell_values = [] # 因为会返回多个值
for cell in list(self.ws.rows)[row_no - 1]:
cell_values.append(cell.value)
return cell_values #读取某个sheet的所有行中的单元格内容,使用2维的列表进行存储
def get_rows_values(self,sheet_name=None):
all_cell_values = [] # 所有的单元格的值均存入列表
if sheet_name is not None: # 参数设置了新的sheet
result = self.set_sheet_by_name(sheet_name)
if result == False:
return None
for row in list(self.ws.rows):
row_values = []
for cell in row:
row_values.append(cell.value)
all_cell_values.append(row_values)
return all_cell_values # 读某一列的值
def get_col_values(self, col_no, sheet_name=None):
cell_values = [] # 因为会返回多个值
if sheet_name is not None: # 参数设置了新的sheet
result = self.set_sheet_by_name(sheet_name)
if result == False:
return None
for cell in list(self.ws.columns)[col_no - 1]:
cell_values.append(cell.value)
return cell_values # 读某个范围的值
def get_some_values(self, min_row_no, min_col_no, max_row_no, max_col_no, sheet_name=None):
if sheet_name is not None: # 参数设置了新的sheet
result = self.set_sheet_by_name(sheet_name)
if result == False:
return None
values = []
for i in range(min_row_no, max_row_no + 1):
row_values = [] # 用来存一行的值
for j in range(min_col_no, max_col_no + 1):
row_values.append(self.ws.cell(row=i, column=j).value)
values.append(row_values) # 将读到的这一行值加入结果中
return values # 保存
def save(self):
self.wb.save(self.excel_file_path) # 写
def write_cell_value(self, row_no, col_no, value, style=None, sheet_name=None):
if sheet_name is not None: # 参数设置了新的sheet
result = self.set_sheet_by_name(sheet_name)
if result == False:
return None
if style is None:
style = colors.BLACK
elif style == 'red':
style = colors.RED
elif style == 'green':
style = colors.GREEN
self.ws.cell(row=row_no, column=col_no).font = Font(color=style)
self.ws.cell(row=row_no, column=col_no, value=value)
self.save()
return True # 写时间
def write_current_time(self, row_no, col_no, style=None, sheet_name=None):
if sheet_name is not None: # 参数设置了新的sheet
result = self.set_sheet_by_name(sheet_name)
if result == False:
return None
if style is None:
style = colors.BLACK
elif style == 'red':
style = colors.RED
elif style == 'green':
style = colors.GREEN
locale.setlocale(locale.LC_ALL, 'en')
locale.setlocale(locale.LC_CTYPE, 'chinese')
self.ws.cell(row=row_no, column=col_no).font = Font(color=style)
self.ws.cell(row=row_no, column=col_no, value=time.strftime('%Y年%m月%d日 %H时%M分%S秒'))
self.save()
return True if __name__ == '__main__':
from ProVar.ProjConfigVar import *
excel = Excel(ExceldirPath)
print(excel.get_current_sheet_names())
20191011-构建我们公司自己的自动化接口测试框架-Util的读取excel常用方法模块的更多相关文章
- 20191011-构建我们公司自己的自动化接口测试框架-Util的ClearData模块
cleardata模块主要是用于在每次测试之前清除历史执行痕迹,主要代码如下: from Util.ParseExcel import * from ProVar.ProjConfigVar impo ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的AssertResult模块
AssertResult主要就是进行结果断言的了,因为断言结果分2种情况,一种是断言词,一种是断言sheet,如果涉及断言sheet,则需要操作excel到对应的断言表断言所有的字段并且书写断言结果主 ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的TestDataHandler模块
TestDataHandler模块主要是做测试数据的处理,包括转换数据格式和变量参数处理转换数据格式函数: data是数据,data以$()的方式识别变量,如果请求的数据有变量,则将变量用global ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的getTestSuite模块
getTestSuite主要是用于在testData里面获取测试集以及对应的测试数据,包括2个主要的方法,一个是获取测试集,一个是获取测试集里面要执行的测试用例 获取测试集方法: from Util. ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的htmlreport模块
生成htmlreport的模块是我在网上随意找的一个版本,主要生成的report包括接口名称,接口url,请求数据,响应数据,断言词,断言结果等 具体的htmlreport代码如下: # -*- en ...
- 20191011-构建我们公司自己的自动化接口测试框架-Action的request方法封装
Action模块 封装接口request方法,根据传入的参数调用不同的请求方法,因为项目特色,我们公司的接口都是get和post方法,所以仅仅封装了get和post方法: import request ...
- 20191011-构建我们公司自己的自动化接口测试框架-testrun最重要的模块
testrun模块呢就是最终自动化测试入口,调用前面封装的各个模块主要流程是: 1. 获取测试集种待执行的测试用例 2. 处理测试用例获取的数据,包括转换数据格式,处理数据的中的关联等 3. 处理完数 ...
- 20191011-构建我们公司自己的自动化接口测试框架-ProVar模块
ProVar模块主要定义测试数据所在目录,以及定义变量和测试数据excel里面的column对应这样后续在进行excel操作的时候直接使用变量即可进行操作,后期excel的column有增删的时候,修 ...
- 20191011-构建我们公司自己的自动化接口测试框架-Config配置
Config模块主要是为了存放的一些其他配置等的一个目录,当前目录存放日志配置文件 ################################################ [loggers] ...
随机推荐
- sqlmap环境搭建
1.安装Python2.7.12 1.1.下载Python2.7.12地址:https://www.python.org/downloads/ 1.2.环境变量配置Python2.7.11 1.3.验 ...
- Java 面向对象(十)
常用类之Arrays java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList 返回 ...
- Thingsboard学习之二安装Docker和Docker-Compose
安装系统更新系统,参考<Thingsboard学习之一CentOS安装系统更新> 尝试更新系统 yum update 增加一个用户并设置密码,并将用户增加到管理员 # 添加用户(可选) s ...
- Java 内存模型学习笔记
1.Java类 public class Math { public static final Integer CONSTANT = 666; public int math(){ int a = 1 ...
- vue - 设置全局html背景
需求 有时候有些组件需要全局设置body背景,有些不需要在组件中设置就行了 解决思路 1. 全局设置可以是html,body,这里大家可以试一下,这两个只要其中一个设置了background,另一个的 ...
- 机器学习 - 算法 - SVM 支持向量机 Py 实现 / 人脸识别案例
SVM 代码实现展示 相关模块引入 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy i ...
- 23Flutter FloatingActionButton实现类似闲鱼App底部导航凸起按钮:
/* 一.Flutter FloatingActionButton介绍 FloatingActionButton简称FAB,可以实现浮动按钮,也可以实现类型闲鱼app的底部凸起导航. child:子视 ...
- bat命令编写大全
bat命令编写大全 摘自:https://blog.csdn.net/haibo19981/article/details/52161653 2016年08月09日 12:26:31 爱睡觉的猫L 阅 ...
- spring整合atomikos实现分布式事务
前言 Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器,主要用于处理跨数据库事务,比如某个指令在A库和B库都有写操作,业务上要求A库和B库的写操作要具有原子性,这时候就可以用到 ...
- 利用python批量修改word文件名的方法示例
利用python批量修改word文件名的方法示例 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完 ...