apitest_unittest/common/file_handling/do_excel.py

143 lines
4.3 KiB
Python

# -*- coding: utf-8 -*-
# @Time : 2019/11/13 9:31
# @Author : kira
# @Email : 262667641@qq.com
# @File : do_excel.py
# @Project : risk_project
import sys
sys.path.append("../../")
sys.path.append("../../common")
from openpyxl import load_workbook
from common.utils.decorators import singleton
from common.file_handling import logger
@singleton
class DoExcel:
def __init__(self, file_name):
self.file_name = file_name
self.wb = load_workbook(self.file_name)
self.init_sheet = self.wb["init"]
# def __enter__(self):
# self.wb = load_workbook(self.file_name)
# self.init_sheet = self.wb['init']
# return self
#
# def __exit__(self, exc_type, exc_val, exc_tb):
# self.wb.save(self.file_name)
# self.wb.close()
def do_excel_yield(self):
"""
读取excel数据
Returns:
"""
sheets = eval(self.get_excel_init().get("sheets"))
for sheet_name in sheets:
sheet = self.wb[sheet_name]
max_row = sheet.max_row
max_column = sheet.max_column
first_header = []
for i in range(1, max_column + 1):
first_header.append(sheet.cell(1, i).value)
for i in range(2, max_row + 1):
sub_data = {}
for k in range(1, max_column + 1):
sub_data[first_header[k - 1]] = sheet.cell(i, k).value
sub_data["sheet"] = sheet_name
yield sub_data
@logger.log_decorator()
def write_back(self, sheet_name, i, **kwargs):
"""
Args:
sheet_name:sheet 名称
i:序号
response_value: 响应结果
test_result: 测试结果
assert_log: 报错结果
Returns:
"""
response_value = kwargs.get("response")
test_result = kwargs.get("test_result")
assert_log = kwargs.get("assert_log")
sheet = self.wb[sheet_name]
sheet.cell(i + 1, 24).value = response_value
sheet.cell(i + 1, 25).value = test_result
sheet.cell(i + 1, 26).value = assert_log
self.wb.save(self.file_name)
@logger.log_decorator()
def clear_date(self):
"""
执行清空单元格数据
Returns:
"""
sheets = eval(self.get_excel_init().get("sheets"))
for sheet_name in sheets:
sheet = self.wb[sheet_name]
max_row = sheet.max_row # 获取最大行
for i in range(2, max_row + 1):
sheet.cell(i, 24).value = ""
sheet.cell(i, 25).value = ""
sheet.cell(i, 26).value = ""
self.wb.save(self.file_name)
return f"清空指定 {sheets} 中的单元格成功"
@logger.log_decorator()
def get_excel_init(self):
"""
获取 excel 中 sheet 名称为 init 中的基础数据
Returns:init 表中的所有数据
"""
max_row = self.init_sheet.max_row # 获取最大行
max_column = self.init_sheet.max_column # 获取最大列
first_head = [] # 存储标题的 list
for i in range(max_column):
first_head.append(self.init_sheet.cell(1, i + 1).value)
init = {}
for k in range(2, max_row + 1):
for i, v in enumerate(first_head):
init[v] = self.init_sheet.cell(k, i + 1).value
if init.get("run").upper() == "YES":
break
return init
def get_excel_init_and_cases(self):
"""
Returns:初始化数据及测试用例组成的元组
"""
try:
self.clear_date()
test_case = self.do_excel_yield()
init_data = self.get_excel_init()
databases = init_data.get('databases')
initialize_data = eval(init_data.get("initialize_data"))
host = init_data.get('host', "") + init_data.get("path", "")
except Exception as e:
raise e
return test_case, databases, initialize_data, host
def close_excel(self):
self.wb.close()
if __name__ == '__main__':
from common.config import Config
file_n = Config.test_case
excel = DoExcel(file_n)
# excel.get_excel_init()
# excel.do_excel()
# excel.clear_date()
# excel.do_excel()