游戏测试 【测试工具】用 pytest 实现配置表自动化检查(二)框架和 XlsxReader

特尔斯特 · 2021年03月22日 · 最后由 Sherwin 回复于 2021年11月19日 · 3163 次阅读

接上篇
工具框架如图:
没有把全部配置表都写出来,这里拿出来几张配置表用来演示,全部写完有几十个 py 文件。

工具 Tools
XlsxReader.py 用来读取表格;
ConfigChecker.py 里用来写检查的逻辑;
ConfigBase.py 是所有配置表的父类,里面封装了一些常用的方法;

XlsxReader.py 代码
整个检测过程我只需要表的第一行用作表头,以及某一具体的列。所以只写了两个方法:
get_head_list()用来获得表头,
get_column_list_by_name()用来根据列名获得对应的列(列的第一行为列名)。
通常情况下表的前 3 行是有特殊用途的,所以不放入检查范围,self.ignore_lines 用来设定这个值。
具体代码

#coding=utf-8
import xlrd

xlsx_path = r"E:\***\Config"

class XlsxReader:
    def __init__(self,xlsx_name):
        self.path = xlsx_path
        self.xlsx_name= xlsx_name
        self.ignore_lines = 3;#忽略的行数,一般配置表前3行有特殊作用不做配置,所以读取数据时忽略这3行
        self.xl = xlrd.open_workbook(self.path+"\\"+self.xlsx_name)
        self.sheet = self.xl.sheet_by_index(0)
        self.column_name_list  = self.get_head_list() #得到表的列名(表头)



    #得到列名也就是第一行(表头)
    def get_head_list(self):
        return self.sheet.row_values(0)


    #通过列名得到某一列的数据
    def get_column_list_by_name(self,name):
        #把名字转换成index再通过self.sheet.col_values(index)得到整列数据
        head_list = self.get_head_list()
        if name in head_list:
            index  = head_list.index(name)
            return self.sheet.col_values(index,self.ignore_lines)
        else:
            print("该配置表没有%s列"%name )



if __name__ == '__main__':
    xlrd = XlsxReader("ChapterConfig.xlsx")
    res = xlrd.get_column_list_by_name("id")
    print(res)

结语:刚开始在 XlsxReader 里写了很多方法,用来获得某一行、某一列、某个单元格等等,后来发现没这个必要只需要两个方法就足够 了,万一要是有其他特殊需求再添加就可以了。

共收到 6 条回复 时间 点赞
特尔斯特 关闭了讨论 03月22日 11:50
特尔斯特 重新开启了讨论 03月22日 11:50

大佬怎么可以像你这么优秀

小白小白

现在操作 excel 都更偏向于用 openpyxl 这个库了吧

怎么解决效率问题,有几十张配置表怎么办每个表都读取和遍历一次太费时间了

gf 回复

pytest 支持多进程,可以看看 -n 的用法

excel 多人写不好合并,转 yaml 了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册