接口自动化测试思路和实战(4):数据驱动测试框架

news2024/11/23 21:00:11

目录

数据驱动测试框架

步骤1、在项目根目录下新建conf文件夹,在下面新建config.ini文件

步骤2、在common的py文件夹下新建ini_file_utils.py文件

步骤3,重写local_config.py文件,封装读取ini文件中的值

步骤4、修改common_function.py文件,把获取的token值放到ini文件中

步骤5、修改run_api_tests.py文件,先把 token值写入ini文件中

步骤6、修改用例层的代码和获取token的py文件

步骤7、执行run_api_tests.py文件,查看执行结果;


数据驱动测试框架

  在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,Json文件,Yaml文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。

通俗化一点:就是把测试过程中用到的测试数据和代码进行分开编写,分开存放。

比如:测试token接口用到的数据appid-sercet以及期望结果都提前放入一个数据文件

举例:项目中的access_token是一个公共需求的测试数据,它生成一次有效期是7200秒,2个小时一般都能执行完所有的接口测试了.

实现一次性获取 token值,保存到文件中,后续使用文件中的 token值完成测试。

步骤1、在项目根目录下新建conf文件夹,在下面新建config.ini文件

步骤2、在common的py文件夹下新建ini_file_utils.py文件

 编写代码:

# encoding: utf-8
# @author: Jeffrey
# @file: ini_file_utils.py
# @time: 2022/7/31 16:22
# @desc: 读取、写入ini文件
import os
import configparser


class IniFileUtils:  #和框架业务无关的底层代码==》公共底层代码

    def __init__(self,file_path):
        self.ini_file_path = file_path
        self.conf_obj = configparser.ConfigParser()
        self.conf_obj.read(self.ini_file_path, encoding='utf-8')

    def get_config_value(self,section, key):
        value = self.conf_obj.get(section, key)
        return value

    def set_config_value(self,section, key, value):
        self.conf_obj.set(section, key, value)
        config_file_obj = open(self.ini_file_path, 'w')
        self.conf_obj.write(config_file_obj)
        config_file_obj.flush()
        config_file_obj.close()

if __name__ == '__main__':
    current_path = os.path.dirname(__file__)
    config_file_path = os.path.join(current_path, '../conf/config.ini')
    ini_file = IniFileUtils(config_file_path)
    print(ini_file.get_config_value('default', 'HOSTS'))
    ini_file.set_config_value('default','TOKEN_VALUE', 'SSS9090')

执行查看结果:

ini配置文件中的token_value的值

步骤3,重写local_config.py文件,封装读取ini文件中的值

 编写代码:

# encoding: utf-8
# @author: Jeffrey
# @file: local_config.py
# @time: 2022/7/26 21:25
# @desc:  封装读取ini文件中的值
import os
from common.ini_file_utils import IniFileUtils


current_path = os.path.dirname(os.path.abspath(__file__))
config_file_path = os.path.join(current_path, '../conf/config.ini')


class LocalConfig():  # #和框架业务有关系的底层代码

    def __init__(self,file_path = config_file_path):
        self.ini_file_obj = IniFileUtils(file_path)
    @property
    def get_hosts(self):
        '''获取ini文件中的hosts值'''
        hosts_value = self.ini_file_obj.get_config_value('default', 'hosts')
        return hosts_value
    @property
    def get_token_value(self):
        '''获取ini文件中的token_value值'''
        token_value = self.ini_file_obj.get_config_value('default','token_value')
        return token_value

local_config = LocalConfig()

if __name__ == '__main__':
    print(local_config.get_hosts)
    print(local_config.get_token_value)

查看执行结果:

步骤4、修改common_function.py文件,把获取的token值放到ini文件中

 编写代码:

# encoding: utf-8
# @author: Jeffrey
# @file: common_function.py
# @time: 2022/7/26 21:01
# @desc: 模块化框架
import os
import jsonpath
from common.local_config import local_config
from common.common_api_info import CommonApiInfo
from common.ini_file_utils import IniFileUtils


current_path = os.path.dirname(os.path.abspath(__file__))
config_file_path = os.path.join(current_path, '../conf/config.ini')

def save_access_token_value_info_ini_file(session_obj,hosts):
    """获取access_token的值并写入到ini文件中"""
    response = CommonApiInfo(session_obj,hosts).get_access_token_api('client_credential',
                                                          'wxf14419077f707856',
                                                          '92a113bd4b5ffdc72144740dc7123c99')
    # 获取响应json中的access_token的值
    token_value = jsonpath.jsonpath(response.json(), "$.access_token")[0]
    # 把获取到的access_token值写入到ini文件中
    IniFileUtils(config_file_path).set_config_value('default', 'token_value', token_value)
    # return token_value

if __name__ == '__main__':
    import requests
    save_access_token_value_info_ini_file(requests.session(), local_config.get_hosts)

执行后查看ini文件中的token_value的值:

已写入最新的token值

步骤5、修改run_api_tests.py文件,先把 token值写入ini文件中

步骤6、修改用例层的代码和获取token的py文件

用例层的代码脚本修改前VS修改后

VS

修改后

获取token的py文件:

步骤7、执行run_api_tests.py文件,查看执行结果;

查看报告

Run_api_tests.py中生成了token值给ini配置文件,然后测试获取 token接口时,又调用生成了token值,为了防止后面生成值覆盖前面的值而导致ini配置文件失效,所以测试获取token接口要换不同的账号(appid和secret)

备注:以上就是各个框架不同,讲到了从线性脚本·--·模块化框架·--·库框架·--·数据驱动


 以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了

各位想获取资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于微信小程序的火锅店点餐订餐系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

MySQL基础篇-约束

目录 1.约束概述 2.分类 3.测试user表的约束情况 主键约束 非空约束及唯一约束 检查约束 默认约束 4.外键约束 外键约束的语法 外键约束的删除/更新行为 小结 1.约束概述 MySQL约束(Constraints)是用于确保表中数据完整性和一致性的规则。它们定…

“童”趣迎国庆 安全“童”行-柿铺梁坡社区开展迎国庆活动

“金秋十月好心境,举国欢腾迎国庆。”国庆节来临之际,为进一步加强梁坡社区未成年人爱国主义教育,丰富文化生活,营造热烈喜庆、文明和谐的节日氛围。9月24日上午,樊城区柿铺街道梁坡社区新时代文明实践站联合襄阳市和时…

借助 ControlNet 生成艺术二维码 – 基于 Stable Diffusion 的 AI 绘画方案

背景介绍 在过去的数月中,亚马逊云科技已经推出了多篇博文,来介绍如何在亚马逊云科技上部署 Stable Diffusion,或是如何结合 Amazon SageMaker 与 Stable Diffusion 进行模型训练和推理任务。 为了帮助客户快速、安全地在亚马逊云科技上构建、…

抽象轻松java

嗨嗨嗨! 没想到吧,出现了抽象轻松第4种语言系列(我也没想到) 简单的java程序,看完就懂的简单逻辑——购物车系统 购物车,首先要有商品吧,现实中的商品有什么属性? 名字&#xff0…

JavaSE 基础(十三)网络编程

1. 概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程主要工作是在发…

基于ModebusRTU通信采集温度湿度项目案例

目录 一、模拟温湿度模拟 【1.1】温湿度仪表参数 【1.1】使用电脑模拟传感器 【1.2】使用Codesys软件模拟传感器 二、自定义控件UI设计 【2.1】自定义控件温度湿度柱状设计 ​编辑 【2.1.1】设置温度湿度柱状实际显示【属性】 【2.1.2】设置温度湿度柱状的背景颜色【属…

工具篇 | Gradle入门与使用指南 - 附Github仓库地址

介绍 1.1 什么是Gradle? Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序&#x…

用AI解决量子学问题

3 人工智能用于量子力学 在这一部分中,我们提供了有关如何设计高级深度学习方法以有效学习神经波函数的技术评述。在第3.1节中,我们概述了一般情况下定义和解决量子多体问题的方法。在第3.2节中,我们介绍了学习量子自旋系统基态的方法。在第…

Python3操作SQLite3创建表主键自增长|CRUD基本操作

Python3操作MySQL8.XX创建表|CRUD基本操作 Python3操作SQLite3创建表主键自增长|CRUD基本操作 一: SQLite3创建表时主键自增长 1: sqlite支持建立自增主键 create table t_user (id integer primary key autoincrement,age int(2), name varchar(10),address varchar(100) )…

YOLOv5、YOLOv8改进:ConvNeXt(backbone改为ConvNextBlock)

目录 1.介绍 2. YOLOv5修改backbone为ConvNeXt 2.1修改common.py 2.2 修改yolo.py 2.3修改yolov5.yaml配置 1.介绍 论文地址:https://arxiv.org/abs/2201.03545官方源代码地址:https://github.com/facebookresearch/ConvNeXt.git 自从ViT(Vision T…

Linux 权限相关例题练习

目录 一、前期准备工作: 1)新建redhat用户 2)新建testdir目录及其file1 二、例题详解 1、当用户redhat对/testdir目录无写权限时,该目录下的只读文件file1是否可修改和删除? 2、复制/etc/fstab文件到/var/tmp下&…

C++11之新的类功能

这里写目录标题 新的类功能默认成员函数类成员变量初始化强制生成默认函数的关键字default禁止生成默认函数的关键字deletefinal与override关键字override 新的类功能 默认成员函数 原来C类中,有6个默认成员函数: 构造函数析构函数拷贝构造函数拷贝赋…

Spring学习笔记13 Spring对事务的支持

Spring学习笔记12 面向切面编程AOP-CSDN博客 什么是事务:在一个业务流程当中,通常需要多条DML(insert delete update)语句共同联合才能完成,这多条DML语句必须同时成功,或者同时失败,这样才能保证数据的安全. 多条DML要么同时成功,要么同时失败,叫做事务(Transaction) 事务四…

安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Apache DolphinScheduler在中国信通院“2023 OSCAR开源尖峰案例”评选中荣获「尖峰开源项目奖」!

在近日由中国信息通信研究院(以下简称“中国信通院”)和中国通信标准化协会联合主办的“2023 OSCAR 开源产业大会”上,主办方公布了 2023 年“OSCAR 开源尖峰案例”评选结果,包括“开源人物”“开源项目”“开源社区”“开源企业”…

python+vue实验室课程预约管理系统

实验室课程管理系统运用计算机完成数据收集、查询、修改和删除以及统计等工作,提高了管理者工作效率,避免了因信息量巨大,造成的人为错误.通过前面的功能分析可以将实验室课程管理系统的功能分为管理员、学生和教师三个部分&#…

Linux高性能服务器编程 学习笔记 第八章 高性能服务器程序框架

TCP/IP协议在设计和实现上没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源(视频、新闻、软件等)被数据提供者所垄断,所以几乎所有网络应用程序都采用了下图所示的C/S(客户端/服务器)…

LeetCode_BFS_中等_1926.迷宫中离入口最近的出口

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 ‘.’ 表示)和墙(用 ‘’ 表示)。同时给你迷宫的入口 …

电脑提示vcruntime140.dll缺失重新安装的修复方法

电脑出现 vcruntime140.dll 丢失的情况,通常是由于系统缺失了 Microsoft Visual C Redistributable 的运行库文件。这个文件是许多应用程序在运行时所需的依赖库,如果丢失了该文件,可能会导致某些软件无法正常运行。 下面是关于 vcruntime140…