Python接口自动化测试框架之封装openpyxl读取Excel操作类

封装思想

  • 在面向对象编程中,封装就是将一些零散的功能组装成一个完整的功能,
  • 不用管封装内部方法的代码实现逻辑:即隐藏对象的属性和实现细节,仅对外公开接口,
  • 这样做的目的是提高代码复用性:即能共享给其他人使用。
先来封装一个excel操作类
# -*- coding: utf-8 -*-
# @Time    : 2019/5/14 14:28
# @Author  : nasa
# @File    : homework_190514.py
# @IDE     : PyCharm
# Motto    : ABC( Always Be Coding)

import unittest,inspect
from ddt import ddt,data
from collections import namedtuple
from openpyxl import load_workbook
from configparser import ConfigParser
from python_coommon.practice.Calculator import Calculator


# 1.如何将一些操作(Excel读写)进行封装?(写出封装的思路)
# a、加载excel文件,定位表单;
# b、定位单元格,读取所有用例数据;
# c、遍历所有单元格数据,或使用ddt;
# d、写入指定单元格数据,保存excel文件;

class ReadExcelData(object):
    """封装读取excel表单数据的工具类"""
    
    def __init__(self,file_path,sheet_name=None):
        """
        初始化openpy加载excel文件
        定位表单及初始化参数
        """
        self.file_path=file_path
        self.sheet_name=sheet_name
        # 打开已存在Excel文件
        self.wb=load_workbook(self.file_path)
        # 定位表单
        self.ws=self.wb[self.sheet_name] if self.sheet_name is not None else self.wb.active # 获取第一个表单

        self.sheet_head_tuple = tuple(self.ws.iter_rows(max_row=self.ws.min_row,values_only=True))[0]
        self.icases_list = []  # 定义一个存放元组的对象
        self.Cases = namedtuple("cases",self.sheet_head_tuple)   # 创建一个命名元组类


    def get_all_cases(self):
        """
        获取excel所有测试用例
        """
        for tuple_data in self.ws.iter_rows(min_row=self.ws.min_row+1, values_only=True):  # 每次遍历,返回由某行所有单元格值组成的一个元组
            self.cases_list.append(self.Cases(*tuple_data))
        return self.cases_list

    def get_one_case(self,row):
        """
        获取一条case
        :return一个case对象
        """
        if isinstance(row,int) and (self.ws.min_row+1<=row<=self.ws.max_row):
            return tuple(self.ws.iter_rows(min_row=row,max_row=row,values_only=True))[0]
        else:
            print("传入行号不正确,应为大于1的整数!")

    def write_file(self,row,actul_result,result_status):
        '''
        执行用例结果写入excel,并保存
        '''
        if isinstance(row,int) and (self.ws.min_row+1<=row
想提几个小需求?
  • 在测试用例执行结果回写excel时,一个不想取数结果result在哪一列?
  • 同样解决,不想通过读取excel的case_id的行+1来确定写入哪一行,因为如果我的case_id不是int呢?

你可能感兴趣的:(Python工具类集合)