IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 使用Excel实现数据驱动测试 -> 正文阅读

[开发测试]使用Excel实现数据驱动测试

1 概述

测试类型本质数据类型
接口测试数据流动和验证csv
yaml
json
UI测试用户操作的指令excel数据驱动+关键字驱动
  • 测试用例中如何驱动excel中的数据
  • 如何把excel数据变为测试用例

Python中有很多库可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。
官网:http://www.python-excel.org/
在这里插入图片描述

2 xlrd

  • 介绍
    xlrd是python语言中,读取Excel的拓展工具;
    支持读取.xls和.xlsx格式的Excel文件,只支持读取,不支持写入
    安装xlrd库:pip3 install xlrd==1.2.0
    注意:现在直接pip install xlrd下载的是2.0.1版本的,运行会报错:xlrd.biffh.XLRDError: Excel xlsx file; not supported

  • 读取Excel文件
    1)导包:import xlrd
    2)打开Excel文件:wb = xlrd.open_workbook(filename)
    3)打开工作表:ws = sheet_by_name(sheet_name) ws = sheet_by_index(index_num)
    4)读取工作表的属性信息(工作表名,工作表所有行数和列数)ws.name ws.nrows ws.ncols
    5)读取工作表的内容:
    读取一行:ws.row_values(rowx=index_num)
    读取一列:ws.col_values(colx=index_num)
    读取单元格:ws.cell(rowx, colx).value

    import xlrd
    
    wb = xlrd.open_workbook('../data/login.xlsx')  # 打开Excel文件
    ws1 = wb.sheet_by_name('Sheet1')  # 打开工作表
    rows = ws1.nrows
    cols = ws1.ncols
    name = ws1.name
    print('总行数:{}, 总列数:{}, 工作表名:{}'.format(rows, cols, name))
    # 按行读取
    row1 = ws1.row_values(0)  # 行的索引值是从0开始
    print('第一行内容:', row1)
    # 按列读取
    col1 = ws1.col_values(0)  # 列的索引值是从0开始
    print('第一列内容:', col1)
    # 单元格读取
    cell1 = ws1.cell(1, 0).value
    print('A2单元格内容:', cell1)
    

3 openpyxl

  • 介绍
    全称:openpythonexcel
    官网:https://openpyxl.readthedocs.io/en/stable/
    安装openpyxl库:pip install openpyxl

  • 读取Excel文件

    1)导包:import openpyxl
    2)打开Excel文件:wb = openpyxl.load_workbook(filename)
    3)打开工作表:ws = wb.sheet_by_name(sheet_name) ws = wb.active ws = wb[sheet_name]
    4)读取工作表的属性信息(工作表所有行数和列数)ws.max_row ws.max_colomn
    5)读取工作表的内容:
    读取一行:ws.iter_rows(max_row=1)
    读取一列:ws.iter_cols(max_col=1)
    读取单元格:ws.cell(row, col).value ws[单元格].value
    读取所有内容:ws.values

    import openpyxl
    
    wb = openpyxl.load_workbook('../data/login.xlsx')
    ws = wb.active  # 获取当前的工作表
    rows = ws.max_row
    cols = ws.max_column
    print('总行数:{}, 总列数:{}'.format(rows, cols))
    # 按行读取
    print('---------第一行内容---------')
    for i in ws.iter_rows(max_row=1):
        for j in i:
            print(j.value, end='\t')
        print()
    print('---------第一列内容---------')
    for i in ws.iter_cols(max_col=1):
        for j in i:
            print(j.value, end='\t')
        print()
    print('---------A2单元格内容---------')
    cell1 = ws.cell(2, 1).value
    print('通过单元格坐标:', cell1)
    cell2 = ws['A2'].value
    print('通过单元格名称:', cell2)
    print('---------sheet所有内容---------')
    print(list(ws.values))  # ws.values输出结果为generator生成器, 使用list()函数对生成器进行迭代
    
  • 向Excel文件写入数据

    # 向Excel文件写入数据
    from openpyxl import Workbook
    
    wb = Workbook()     # 实例化:wb新的工作簿,工作簿里至少有一个工作表
    ws = wb.active      # 获取当前的工作表
    # new_ws = wb.create_sheet()  # 创建新的工作表
    
    # append 数据追加
    ws.append([1, 2, 3])   # 以行为单位进行数据追加
    ws.append([4, 5, 6])  
    
    #单元格追加
    ws.cell(1,4).value = 'Pass'
    ws.cell(2,4).value = 'Fail'
    
    wb.save('excel.xlsx')   # 保存工作簿到指定位置,注意后缀为xlsx;没写路劲表示当前目录。
    

4 pandas

  • 介绍
    安装pandas库:pip install pandas

  • 读取Excel文件
    1)导包:import pandas
    2)读取Excel文件:wb = pd.read_excel(filename, sheet_name='sheet_name', header=0)
    3)读取工作表的属性信息(行索引和列索引):wb.index wb.columns
    4)读取工作表的内容:
    根据行索引选择数据:
    读取一行:wb.loc[[0]]
    读取多行:wb.loc[[0, 2]]
    读取连续的多行:wb.iloc[0:2] # 读取0到1行;iloc[行切边,列切片]
    根据列索引选择数据:
    读取一列:wb['col_name']
    读取多列:wb[['col_name1', 'col_name2']]
    读取连续的多列:wb.iloc[:, 1:6] # 读取所有行,列是1到5列;iloc[行切边,列切片]
    读取单元格:wb.iloc[row, col]
    读取所有内容:wb.values
    5)按条件选取表格数据:rows = wb[wb['col_name'] == 'col_value']

    import pandas as pd
    file = '../data/wf_Login.xlsx'
    
    wb = pd.read_excel(file, sheet_name='TestLogin_WF', header=0)
    print(wb)
    # 获取行索引
    print(wb.index)
    print(wb.index[0])	
    # 获取列索引
    print(wb.columns)		 
    print(wb.columns[1])
    
    # 根据列索引选择数据
    print(wb['wfName'])		# 读取'wfName'列
    # 选择多列
    print(wb[['index', 'wfName']])	# 读取'index'和'wfName'列
    # 选择连续的多列
    print(wb.iloc[:, 1:6])  # 读取所有行,列是1到5列;iloc[行切边,列切片]
    
    # 根据行索引选择数据
    row = [1]
    print(wb.loc[row])		# 读取行索引为1的一行(行索引从0开始),即读取第2行
    # 选择多行
    rows = [0, 2]
    print(wb.loc[rows])		# 读取行索引为0和2的多行, 即读取第1行和第3行
    # 选择连续的多行
    print(wb.iloc[0:2])		# 读取行索引从0到1的连续行,即读取第1行到第2行
    
    # 读取所有内容
    print(wb.values)
    
    # 读取指定单元格
    print(wb.iloc[1, 2])	# 读取行索引=1,第2个列索引的单元格,即读第2行第3列的单元格
    
    # 按条件选取表格数据
    prority = wb['prority'] == 'High'	# prority列的值是否等于High
    print(prority)      # 返回bool值,将bool值作为参数传入原数据
    print(wb[prority])
    # 合并写法
    print(wb[wb['prority'] == 'High'])	# 返回prority列的值等于High的所有行
    
    # 按条件选取表格数据并操作
    rows = wb[wb['prority'] == 'High']
    for row in rows.iterrows():		# 行遍历
        # do what you want with the row
        print(row[1]['wfName'])
    

5 如何在excel表格中描述多个用例

  • 用Excel来表示测试用例
    Excel中描述的信息不是单一的:
    • 测试步骤:调用关键字,实现测试用例执行
    • 测试属性:用例名称、前置条件、参数、变量、关系

框架除了要读取数据内容,还要解析数据内容。

5.1 制定解析规则

从excel加载复杂的数据结构,可以变为:dict, json, yaml
例如:
在这里插入图片描述

# -*- coding:utf-8 -*-

# 读取Excel数据
from openpyxl import load_workbook
from openpyxl.worksheet.worksheet import Worksheet

def read_excel(xls_path):
    wb = load_workbook(xls_path)
    ws = wb.active  # 获取当前的工作表
    return ws

re = read_excel('../data/test_excel.xlsx')

# Excel内容格式
# 第一行:表头
# 第x行:(用例ID为0)测试套件的信息
# 第x行:(步骤ID为0)测试用例的信息
# 第x行:测试执行步骤(关键字)

'''
    重构目标:
        1. 封装为函数,函数返回处理后的数据。
        2. 清理垃圾数据,移除没用的None
        3. 让数据更有可读性。
'''

def handle_excel(ws: Worksheet):
    _suite = {  # 套件,本工作表中所有的测试用例
        'info': {},  # 套件的属性信息
        'case_list': []  # 用例列表
    }
    _case_list = _suite['case_list']
    _case = {  # 用例
        'info': {},  # 用例的属性信息
        'steps': []  # 本用例的所有步骤
    }

    # top_keys = [i for i in list(re.iter_rows(max_row=1, values_only=True))[0] if i is not None]
    # print(top_keys)
    
    # 使用高阶函数filter过滤垃圾数据
    top_keys = filter(
        lambda x: x is not None,
        list(ws.iter_rows(max_row=1, values_only=True))[0])
    # print(list(top_keys))

    # 使用python解包
    for (
            用例,
            步骤,
            步骤名,
            关键字,
            参数1,
            参数2,
            执行结果,
            报告摘要
    ) in ws.iter_rows(min_row=2, values_only=True):
        if 用例 == 0:  # 用例id==0,是分组信息
            _suite['info'][步骤名] = 参数1
        elif 步骤 == 0:  # 步骤id==0,是用例信息
            _case = {
                'info': {},
                'steps': [],
            }
            _suite['case_list'].append(_case)
            _case['info'][步骤名] = 参数1
        else:
            _case['steps'].append(
                {
                    '步骤名': 步骤名,
                    '关键字': 关键字,
                    '参数1': list(
                        filter(
                            lambda x: x is not None,
                            [
                                参数1,
                                参数2
                            ]
                        )
                    )
                }
            )
    return _suite

print(handle_excel(re))

'''
data = list(re.values)
data = data[1:]     # 干掉第一行:切片

for d in data:  # 逐行打印 >> 打包数据
    if d[0] == 0:
        # 这是分组信息
        print('suite info:', d)
    elif d[1] == 0 :
        # 这是用例信息
        print('  test case info:', d)
    else:
    	# 这是用例步骤
        print('    step:', d)

new_data = {}   # 数据打包之后,传递给测试框架,创建测试用例并执行
'''

5.2 创建测试用例

ddt:已经有测试用例了,数据只是通过函数,决定用例的数量。
关键字驱动:没有测试用例,根据关键字自动创建测试用例。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:25:31  更:2022-05-08 08:25:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:47:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码