一组测试数据就代表一个用例,就是测试类下的一个方法

自动化测试之前,先有手工测试的用例,一般保存在excel,xmind,tapd

测试数据的运转:

通过手工写入excel

python分离高低频 python数据分离_python

 通过python读取excel数据

-用pip安装第三方库--openpyxl

-导入load_workbook:加载工作簿

sheet:工作表  cell:单元格 row:行  column:列

from openpyxl import load_workbook

-通过变量获取工作簿

wb = load_workbook(r"E:\lemmon-public\lesson\lesson14_测试数据分离和excel\xlsx\cases.xlsx")

python分离高低频 python数据分离_取对象_02

得到工作簿

 需要注意:

excel表格默认要放在跟它进行操作的py文件同一个目录下才能获取,不能像调用其他模块(py文件)一样操作,因为from..impirt只能导入python文件

如果是在A模块调用B模块的数据,而B模块是要获取excel文件的话,那么A模块和B模块所在的目录下,都必须要有这个excel文件,不然调用时候会报错

python分离高低频 python数据分离_python分离高低频_03

为了方便管理,我们会把excel文件存放在一个专门的目录下,所以在对excel进行操作的py文件里,获取工作簿时候需要用到excel文件的绝对路径

-获取表格(Sheet)

sheet= wb["Sheet1"]
print(sheet)

python分离高低频 python数据分离_测试数据_04

 -获取一个表的全部值

data = list(sheet.values)
print(data)

sheet也是一个对象,获取对象属性,sheet.values 获取表格数据时候需要转换list类型

python分离高低频 python数据分离_测试数据_05

-获取一个单元格(cell)

cell = sheet.cell(row=2,column=1)  #参数传入行和列
print(cell)

 得出这是A2单元格

python分离高低频 python数据分离_取对象_06

 获取单元格的值

info = cell.value
print(info)

python分离高低频 python数据分离_测试数据_07

cell是一个对象,获取对象的属性就是cell.属性名

获取某一行的全部数据

rows_list=[] 
for i in range(1, max_column + 1):  # 遍历次数,一行的数据要根据有多少列来判断
            cell_value = self.sheet.cell(row=row, column=i).value  # 得到这一行里面相应列的单元格的值
            rows_list.append(cell_value)

首先遍历整行数据,遍历次数根据列数来判断,所以先要获取总列数(max_column),每次获取列的单元格,添加到一个空表中

获取某一列的全部数据

column_list = []  
for i in range(1,max_row+1):#遍历次数,一列的数据需要根据有多少行来判断
     cell_value = sheet.cell(column=colum,row=i).value #得到这一列里面相应行的单元格的值
     column_list.append(cell_value)

遍历整列数据,遍历次数根据行数来判断,所以先要获取总行数(max_row),每次取出行的单元格,添加到一个空表中

写入excel

def write_excel(row,column,value):
    sheet.cell(row,column).value=value
    wb.save(r"E:\lemmon-public\practice\login_cases.xlsx")

需要获取单元格,填入写入的行和列,然后再把写入内容填入value

之后需要手动保存,参数是文件的路径

-封装成类

from openpyxl import load_workbook
from config.config import case_file
class ExcelHandle:

    def __init__(self,file_name,sheet_name):
        # 得到工作簿
        self.wb = load_workbook(file_name)
        # 得到工作表
        self.sheet = self.wb[sheet_name]

        self.file_name = file_name

    # 读取所有数据
    def read_excel(self):

        data = list(self.sheet.values) #得到一个列表,包括标题,值
        key = data[0]
        data_1 = [dict(zip(key, value))for value in data[1:]] #列表推导式,从列表第二个元素开始到最后都跟第一个元素合并字典
        return data_1

    #读取某行数据
    def get_rows(self,row):
        max_column = self.sheet.max_column  # 获取总列数
        rows_list = []
        rows_list2 = []
        if row == 1:  # 只获取title的值
            for i in range(1, max_column + 1):  # 遍历次数,一行的数据要根据有多少列来判断
                cell_value = self.sheet.cell(row=row, column=i).value  # 得到这一行里面相应列的单元格的值
                rows_list.append(cell_value)

            return rows_list

        elif row != 1:  # 获取除title以外的行数,最后要跟title关联,合并成字典
            for i in range(1, self.sheet.max_column + 1):
                cell_value = self.sheet.cell(row=1, column=i).value
                rows_list.append(cell_value)

            for j in range(1, self.sheet.max_column + 1):
                cell_value = self.sheet.cell(row=row, column=j).value
                rows_list2.append(cell_value)
            rows_info = dict(zip(rows_list, rows_list2))
            return rows_info

    #写入excel
    def write_excel(self,row, column, value):
        self.sheet.cell(row, column).value = value
        self.wb.save(self.file_name)

#如果其他模块导入这个函数,下面代码不会执行
if __name__ == '__main__':

    data1 = ExcelHandle(case_file,"recharge")
    print(data1.read_excel())

    print(data1.get_rows(2))
    data1.write_excel(2,10,"成功")