爆肝整理,接口自动化测试-数据驱动框架封装(实战)

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

接口自动化框架—数据驱动

在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,Json文件,Yaml文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。

在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。

这类似于表驱动测试,在表驱动测试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。

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

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

举例:
项目中的access_token是一个公共需求的测试数据,它生成一次有效期是7200秒,2个小时一般都能执行完所有的接口测试了。
实现一次性获取 token值,保存到文件中,后续使用文件中的 token值完成测试。

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

E1

2、在common的py文件夹下新建ini_file_utils.py文件
编写代码:

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')

执行查看结果:

E2

ini配置文件中的token_value的值

E3

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

E4

编写代码:

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)

查看执行结果:

E5

4、修改common_function.py文件,把获取的token值放到ini文件中
编写代码:

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值

E5

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

E6

6、修改用例层的代码和获取token的py文件
用例层的代码脚本修改前VS修改后

E7

修改后

E8

获取token的py文件:

E9

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

E10

查看报告

E11

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

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

奋斗是生命的底色,坚持是成功的密码;追求卓越,砥砺前行,用汗水谱写辉煌乐章。相信自己的潜力与才华,不断超越自我,创造出属于自己的壮丽人生画卷!

积极拥抱挑战,勇敢闯荡人生舞台;心怀梦想,坚定追逐辉煌成功。不停歇,不止步,砥砺前行,放飞激情;相信自己的力量,奋发拼搏,书写绚丽绝伦的人生篇章!

信心点亮前行之路,汗水浇灌辉煌花朵;努力奋斗超越极限,梦想舞动青春旋律。坚持热爱,追逐远方,创造属于自己的壮丽传奇。奋发进取,才华绽放,勇往直前,成就精彩人生!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java版本spring cloud 工程项目管理系统源码

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重&#xff0c…

VScode的简单使用

一、VScode的安装 Visual Studio Code简称VS Code,是一款跨平台的、免费且开源的现代轻量级代码编辑器,支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性,也拥有对git的开箱…

00|Oracle学习(卸载、安装、创建删除数据库/数据库实例)

Oracle 12c卸载 1 如果数据库配置了自动存储管理(ASM)先删除聚类同步服务CSS。DOS指令: localconfig delete2 进入“任务管理器”(ctrlshiftEsc),将所有运行中的Oracle进程全关闭。 3 在开始菜单中&#…

NPOI库:C#中使用的强大工具箱,从入门到精通

*引言: 在软件开发中,Excel文件是一种常见且重要的数据存储和处理方式。为了简化Excel文件的读写操作,C --------------------------目录-------------------------- 一、安装NPOI库二、引入命名空间三、Excel文件的读取1. 打开Excel文件2. 读…

【数据挖掘竞赛】——科大讯飞:锂离子电池生产参数调控及生产温度预测挑战赛

🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ ​ 【科大讯飞】报名链接:https://challenge.xfyun.cn?invitaC…

公众号套图制作教你打造独特商品宣传海报风格

在公众号的运营中,一个精美的海报设计可以吸引更多的关注和转发,提升文章的曝光度和传播效果。然而,对于没有设计经验的人来说,制作一个令人惊艳的海报可能是一项挑战。但是,现在有了乔拓云这个强大的工具,…

QT编写的串口助手

QT编写的串口助手 提前的知识 创建UI界面工程 找帮助文档 添加串口的宏

[STL]详解list模拟实现

[STL]list模拟实现 文章目录 [STL]list模拟实现1. 整体结构总览2. 成员变量解析3. 默认成员函数构造函数1迭代器区间构造函数拷贝构造函数赋值运算符重载析构函数 4. 迭代器及相关函数迭代器整体结构总览迭代器的模拟实现begin函数和end函数begin函数和end函数const版本 5. 数据…

DevOps-Git

DevOps-Git 版本控制软件提供完备的版本管理功能,用于存储,追踪目录(文件夹)和文件的修改历史。版本控制软件的最高目标是支持公司的配置管理活动,最终多个版本的开发和维护活动,即使发布软件。 git安装 h…

Eureka注册中心 与 OpenFeign调用接口

需求 一个应用通过接口,调用另一个应用的接口。使用OpenFeign来实现接口调用。 说明 通过OpenFeign(本文接下来简称Feign)调用远程接口,需要Eureka注册中心的支持。 OpenFeign调用接口的逻辑如下: 提供接口的应用…

笔记本触摸板没反应怎么办?只需要4个方法!快速解决!

“大家知道为什么笔记本触摸板没反应吗?我的鼠标不见了现在触摸板也没反应,根本就用不了电脑了,有什么方法可以解决吗?” 触摸板是笔记本电脑上最重要的输入设备之一,它可以提供便捷的操作方式。对于很多朋友来说&…

原型模式——对象的克隆

1、简介 1.1、概述 可以通过一个原型对象克隆出多个一模一样的对象,该模式被称为原型模式。 在使用原型模式时,需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。 1.2、定义 原型模式(Prototype Patt…

前端试用期工作总结范文5篇

前端试用期工作总结 (篇1) 时间飞逝,转眼间,做为一名Web前端开发的正式员工已经有两个月之久。在这个难忘而又夸姣的 日子里,我深入体会到了公司的积极氛围和各个部门的巨大魅力,目睹了公司一步步走向成熟…

(202307)wonderful-sql:复杂一点的查询(task3)

教程链接:Datawhale - 一个热爱学习的社区 知识学习 1 视图 视图是一张虚拟的表。《sql基础教程第2版》用一句话非常凝练的概括了视图与表的区别---“是否保存了实际的数据”。 通过定义视图可以将频繁使用的SELECT语句保存以提高效率。通过定义视图可以使用户看…

Games101学习笔记 - 变换矩阵基础

二维空间下的变换 缩放矩阵 缩放变换: 假如一个点(X,Y)。x经过n倍缩放,y经过m倍缩放,得到的新点(X1,Y1);那么新点和远点有如下关系,X1 n*X, Y1 m*Y写成矩阵就是如下…

C++ 自定义数据类型

C自定义数据类型有:枚举类型、结构类型、联合类型、数组类型、类类型 1. typedef 声明 在编写程序时,除了可以使用内置的基本数据类型名和自定义的数据类型名以外,还可以为一个已有的数据类型另外命名。这样,就可以根据不同的应…

word怎么转换成pdf?分享几种转换方法

word怎么转换成pdf?将Word文档转换成PDF文件有几个好处。首先,PDF文件通常比Word文档更容易在不同设备和操作系统上查看和共享。其次,PDF文件通常比Word文档更难以修改,这使得它们在需要保护文件内容的情况下更加安全可靠。最后&a…

创建维基WIKI百科和建立百度百科有何不同?

很多企业有出口业务,想在互联网上开展全球性网络营销,维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科,经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容,可事实上两个平台的…

1227. 分巧克力(简单,易懂)

输入样例: 2 10 6 5 5 6输出样例: 2 这个题就是基础的二分问题,做题思路: 找到一个数,让其满足,所有小块的边值,且最终的总和要大于等于我们的K 第一次做错了!! #in…

云计算——虚拟化层架构

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 前言 本章将会讲解云计算的虚拟化层架构,了解云计算虚拟化层都有哪些架构模式…