使用Excel实现数据驱动测试

2023-11-06

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:已经有测试用例了,数据只是通过函数,决定用例的数量。
关键字驱动:没有测试用例,根据关键字自动创建测试用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Excel实现数据驱动测试 的相关文章

随机推荐

  • NandFlash介绍、操作流程分析以及S5PV210的NandFlash控制器介绍

    1 NandFlash的型号与命名 注 本文以S5PV210芯片和K9F2G08芯片做分析 1 Nand的型号命名都有含义 拿K9F2G08来示例分析一下 K9F表示是三星公司的NandFlash系列 2G表示Nand的大小是2Gbit 2
  • Tomcat 各安装包选择及使用情景。

    本文参考 Apache Tomcat 8 5 51 官方 README 文件 当我们进入 Tomcat 主页下载 Tomcat 时 会看到各种安装包的选择 Binary Distributions 二进制发行包 Core zip pgp s
  • QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题

    QT C 多线程时 工作界面的样式频繁改变导致程序奔溃的问题 一 错误现象与原因 最近在学习QT 遇到了一点问题 是关于工作线程与UI线程的 其主要问题为 我的工作线程是一个死循环 当我点击按钮进入工作线程 我的工作线程用emit发送一个信
  • IDEA使用JUnit时@Test无效以及无法导入org.junit包的一系列问题

    先找到idea的安装位置 进入lib文件夹 然后打开idea File gt Project Structure 选择Project Settings中的Libraries 点击如图 号 然后添加以下两个包 点击OK 添加成功就可以了 ht
  • 3.java 基础if语句测评题-答案

    知识点 java 基础if语句测评题 答案 题目1 训练 李雷想买一个价值7988元的新手机 她的旧手机在二手市场能卖1500元 而手机专卖店推出以旧换新的优惠 把她的旧手机交给店家 新手机就能够打8折优惠 为了更省钱 李雷要不要以旧换新
  • SQL-更新和删除数据

    如何使用UPDATE和DELETE语句进一步操作表数据 1 更新数据 更新 修改 表中的数据 使用UPDATE语句 更新表中的特定行 更新表中的所有行 注 不要省略WHERE子句 在使用UPDATE时一定要细心 因为稍微不注意 就会更新表中
  • ArcGIS教程:面积制表

    摘要 计算两个数据集之间交叉制表的区域并输出表 插图 使用方法 区域定义为输入中具有同样值的全部区 各区无需相连 栅格和要素数据集都可用于区域输入 假设区域输入和类输入均为具有同样分辨率的栅格 则可直接使用它们 假设分辨率不同 则可先应用内
  • AT指令(中文详解版)

    AT命令最常见的应用场景 1 智能手机 一般智能手机都是一个主芯片控制一个通信模块 这个通信模块就是一个完整的 简单的手机 包括手机应该有的射频 基带等部分 还有GSM协议栈 完全可以独立打电话 发短信 用GPRS上网等 主芯片实现复杂的应
  • 【GD32篇】新建KEIL工程

    以GD32f103C8T6芯片为例 一 下载MDK5 软件包 下载地址 https www keil com dd2 pack 1 选择工程所需的软件包 2 打开软件包 安装在KEIL5同路径下 3 安装成功后打开keil软件 可查看到自己
  • 经典Hive-SQL面试题及答案

    目录 第一题 求分区累加值 第二题 UV和每个店铺访问量top3信息 Hive sql解答 第一题 求分区累加值 我们有如下的用户访问数据 userId visitDate visitCount u01 2017 1 21 5 u02 20
  • 单片机C语言基础知识-指针篇

    引言 指针是变量在计算机或单片机内所占有的存储区域的地址 C51语言中广泛使用的指针概念是从C语言中继承下来的 利用指针变量不但可以操作各种基本的数据类型 而且能使C51语言像汇编语言一样 具有处理单片机内存地址的能力 地址 指针 指针变量
  • Paramiko远程操作Linux服务器

    在日常工作中我们经常会跟Linux打交道 对于测试同学来说 使用Linux的场景还是比较多的 比如 搭建测试环境 查看日志信息 修改配置文件 监控服务资源等 本篇将介绍一个Python的第三方库Paramiko 使用Paramiko 我们可
  • ChatGPT学python——制作自己的AI模型(一)初步了解

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 引
  • 离线环境下手动安装python环境的依赖包

    在写完python代码之后 想要部署到服务器上 但由于服务器无法连接外网 对应的服务器上也没有代码中用到的包 怎么进行手动安装 正是一件麻烦的事情 现在主要针对这样的情况介绍几种依赖包的手动安装 这里主要介绍flask和jieba的安装 关
  • opencv获取多个摄像头名字和编号

    https blog csdn net hyqwmxsh article details 74479694
  • 房地产不同视角

    author skate time 2012 08 14 房地产不同视角 房地产 你为啥看不懂 一 看现象与看本质 http blog sina com cn s blog 77479d2301015cpk html 房地产 你为啥看不懂
  • KMP例题

    KMP算法 实现两个字符串的匹配 KMP讲解 KMP模板 include
  • MinGW和 MinGW-W64的区别

    部分参照备忘录原文 bitbucket org FrankHB yslib src 50c3e6344a5a24b2382ce3398065f2197c2bd57e doc Workflow Annual2014 txt at master
  • 使用R语言进行柱状图可视化特征的种类和个数

    使用R语言进行柱状图可视化特征的种类和个数 柱状图是一种常用的数据可视化工具 用于展示变量 特征 的种类及其数量 通过柱状图 我们可以更直观地了解数据的分布情况和特征之间的差异 在R语言中 我们可以使用多种方法来创建柱状图 并对特征种类和个
  • 使用Excel实现数据驱动测试

    文章目录 1 概述 2 xlrd 3 openpyxl 4 pandas 5 如何在excel表格中描述多个用例 5 1 制定解析规则 5 2 创建测试用例 1 概述 测试类型 本质 数据类型 接口测试 数据流动和验证 csvyamljso