08 测试数据:是不是可以把所有的参数都保存到Excel中?

简介: 08 测试数据:是不是可以把所有的参数都保存到Excel中?

测试数据的好处:打造自动化测试框架


  将数据存储到一种数据存储文件中,这样 代码就可以自行查找对应的参数,然后调取测试框架执行测试流程,接着再通过自动比对返 回预期,检验测试结果是否正确。

这样做有两个好处。


1. 无人值守,节省时间和精力。我们将所有的参数都存储到外部存储文件中,测试框架就 可以自行选择第一个参数进行测试,在完成第一个测试之后,它也就可以自行选择下一 个参数,整个执行过程是不需要人参与的。否则的话,我们每复制一组参数,就要执行 一次脚本,然后再人工替换一次参数,再执行一次脚本,这个过程耗时费力,而且又是 一个纯人工控制的没什么技术含量的活动。


2. 自动检测返回值,提高测试效率。如果你用上面的代码段完成接口测试,就要每执行一 次,人工去观察一次,看接口的返回是不是和预期一致,人工来做这些事情,不只非常 耗费时间,效率也很低下。但是通过代码完成一些关键匹配却很容易,这可以大大提高 测试效率,快速完成交付。


如何选取测试数据


 Excel 是在设计测试用例方面使 用最多的一个工具,那么我们也就可以用 Excel 作为自己的参数存储文件

但在动手之前,你也应该想到,你的参数文件类型不会是一成不变的 Excel,未来你也有可 能使用其他格式的参数文件,因此在一开始你还要考虑到参数类的扩展性,这样你就不用每 多了一种参数文件存储格式,就写一个参数类,来完成参数的选取和调用了。那么如何选取和调用参数呢?你可以看看我设计的参数类:


import jsonimport xlrd
class Param(object):
    def __init__(self, paramConf='{}'):
    self.paramConf = json.loads(paramConf)
def paramRowsCount(self):    pass
def paramColsCount(self):    pass
def paramHeader(self):    pass
def paramAllline(self):    pass
def paramAlllineDict(self):    pass
class XLS(Param):    '''    xls基本格式(如果要把xls中存储的数字按照文本读出来的话,纯数字前要加上英文单引号:    第一行是参数的注释,就是每一行参数是什么    第二行是参数名,参数名和对应模块的po页面的变量名一致    第3~N行是参数    最后一列是预期默认头Exp    '''
def __init__(self, paramConf):    '''    :param paramConf: xls 文件位置(绝对路径)    '''    self.paramConf = paramConf    self.paramfile = self.paramConf['file']    self.data = xlrd.open_workbook(self.paramfile)    self.getParamSheet(self.paramConf['sheet'])
def getParamSheet(self, nsheets):    '''    设定参数所处的sheet    :param nsheets: 参数在第几个sheet中    :return:    '''    self.paramsheet = self.data.sheets()[nsheets]
def getOneline(self, nRow):    '''    返回一行数据    :param nRow: 行数    :return: 一行数据 []    '''    return self.paramsheet.row_values(nRow)
def getOneCol(self, nCol):    '''    返回一列    :param nCol: 列数    :return: 一列数据 []    '''    return self.paramsheet.col_values(nCol)
def paramRowsCount(self):    '''    获取参数文件行数    :return: 参数行数 int    '''    return self.paramsheet.nrows
def paramColsCount(self):    '''    获取参数文件列数(参数个数)    :return: 参数文件列数(参数个数) int    '''    return self.paramsheet.ncols
def paramHeader(self):    '''    获取参数名称    :return: 参数名称[]    '''    return self.getOneline(1)
def paramAlllineDict(self):    '''    获取全部参数    :return: {{}},其中dict的key值是header的值    '''    nCountRows = self.paramRowsCount()    nCountCols = self.paramColsCount()    ParamAllListDict = {}    iRowStep = 2    iColStep = 0    ParamHeader = self.paramHeader()    while iRowStep < nCountRows:        ParamOneLinelist = self.getOneline(iRowStep)    ParamOnelineDict = {}    while iColStep < nCountCols:        ParamOnelineDict[ParamHeader[iColStep]] = ParamOneLinelist[iColStep]    iColStep = iColStep + 1    iColStep = 0    ParamAllListDict[iRowStep - 2] = ParamOnelineDict    iRowStep = iRowStep + 1    return ParamAllListDict
def paramAllline(self):    '''    获取全部参数    :return: 全部参数[[]]    '''    nCountRows = self.paramRowsCount()    paramall = []    iRowStep = 2    while iRowStep < nCountRows:        paramall.append(self.getOneline(iRowStep))    iRowStep = iRowStep + 1    return paramall
def __getParamCell(self, numberRow, numberCol):    return self.paramsheet.cell_value(numberRow, numberCol)
class ParamFactory(object):
    def chooseParam(self, type, paramConf):        map_ = {            'xls': XLS(paramConf)        }
        return map_[type]

接下来,你就可以把这次测试的全 部参数都存到 Excel 里面了,具体内容如下图所示:


通过上面的参数类你可以看出,在这个 Excel 文件中,第一行是给人读取的每一列参数的注 释,而所有的 Excel 都是从第二行开始读取的,第二行是参数名和固定的表示预期结果的 exp。现在,我们使用 ParamFactory 类,再配合上面的这个 Excel,就可以完成”战 场“系统“选择武器”接口的改造了,如下面这段代码所示:


# 引入Common、ParamFactory类from common import Commonfrom param import ParamFactoryimport os
# uri_login存储战场的选择武器uri_selectEq = '/selectEq'comm = Common('http://127.0.0.1:12356', api_type='http')# 武器编号变量存储武器编号,并且验证返回时是否有参数设计预期结果# 获取当前路径绝对值curPath = os.path.abspath('.')# 定义存储参数的excel文件路径searchparamfile = curPath + '/equipmentid_param.xls'# 调用参数类完成参数读取,返回是一个字典,包含全部的excel数据除去excel的第一行表头说明searchparam_dict = ParamFactory().chooseParam('xls', {'file': searchparamfile})i = 0while i < len(searchparam_dict):    # 读取通过参数类获取的第i行的参数    payload = 'equipmentid=' + searchparam_dict[i]['equipmentid']    # 读取通过参数类获取的第i行的预期    exp = searchparam_dict[i]['exp']    # 进行接口测试    response_selectEq = comm.post(uri_selectEq, params=payload)    # 打印返回结果    print('Response内容:' + response_selectEq.text)    # 读取下一行excel中的数据    i = i + 1

总结


今天我们接口测试数据准备的内容就到这里了,在接口测试的工作中,作为“巧妇”的测试 工程师,还是需要参数这个“米”来下锅的,虽然我们之前课程中的代码涉及到参数的处 理,但是都很简单粗暴,一点也不适合自动化的处理方式,因此今天,我带你完成了参数类 的封装。

有的时候,我们也把参数类叫做参数池,这也就是说参数是存放在一个池子中,那我们准备 好的池子就是 Excel。我相信未来你也会不断扩展自己参数池的种类,这有可能是由于测试 接口的特殊需求,也有可能是由于团队技术栈的要求。因此,我们封装参数池是通过简单工 厂设计模式来实现的,如果你的代码基础并不好,那么你可以不用搞清楚简单工厂设计模式 是什么,只需要知道如何模拟上述代码,再进行扩展就可以了。

一个好用的测试框架既要有很好的可用性,也要有很好的扩展性设计,这样我们的私有接口 测试武器仓库就会变成可以不断扩展的、保持统一使用方法的武器仓库,这样才能让你或者 你的团队在面对各种各样的测试任务时,既可以快速适应不同接口测试的需求,又不需要增 加学习的成本。

相关文章
|
25天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
1天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
24 10
|
1天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。
|
1月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
36 6
|
1月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
30 1
|
2月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
37 1
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
136 1
|
2月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
618 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
178 0
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
69 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)