8年资深测试总结,接口自动化框架的设计与实现,一文打通...

目录:导读

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


前言

1、自动化测试框架

在大部分测试人员眼中只要沾上“框架”,就感觉非常神秘,非常遥远。

大家之所以觉得复杂,是因为落地运用起来很复杂。

每个公司,每个业务及产品线的业务流程都不一样,所以就导致了“自动化测试框架”去完成自动化测试的时候产生很多不稳定因素,这样就很难定位成一个固定的框架。

其实不然,真正的自动化测试框架不是一个模式,而是一种思想和方法的集合,通俗的讲就是一个架构。

2、自动化测试框架思想

为了更好的了解自动化测试框架,先从自动化测试的发展历程说起;

一般测试工作限在3年以上且接触过自动化测试的应该对以下几种自动化测试框架思想有一定的认知:

模块化思想;
库思想;
数据驱动思想;
关键字驱动思想;

以上仅仅是代表了一种自动化测试的思想,并不能定义为框架。上面讲到框架=思想+方法,于是演化了以下五种框架:

1)模块化测试脚本框架

需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。

2)测试库框架

与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。

3)关键字驱动或表驱动的测试框架

这个框架需要开发数据表和关键字。
这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。

在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。

这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用数据表来产生各个测试用例的同时被复用。

4)数据驱动测试框架

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

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

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

然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。

5)混合测试自动化框架

最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的。

3、接口自动化测试框架策略

设计出来的框架是直接给测试人员,而且其他的测试人员只需要简单的向里面不断的补充测试用例即可;

所以我们的框架设计必须三简化即操作简单,维护简单,扩展简单。

设计框架的同时一定要结合业务流程,而且不仅仅靠技术实现,其实技术实现不难,难点对业务流程的理解和把握。

设计框架时要将基础的封装成公用的,如:get请求、post请求和断言封装成同基础通用类。

测试用例要与代码分享,这样便于用例管理,所以将我们选择上面的数据驱动思想。

4、接口自动化测试框架设计

1)进行接口框架设计前,我们先看看当前的一些主流接口自动化工具框架

在这里插入图片描述

2)以上各工具特性

工具学习成本录制持续集成测试报告用例管理性能测试扩展难度最低要求
Java+testng+MavenJava
Requests+PythonPython
Robot Framework工具组件
HttpRunnerPython

根据以上的特性可得我们优先考虑Python+Requests和HttpRunner;

下面根据其两个框架分别来分析下用例执行过程。

3)用例执行解析

Python的Requests库针对所有的HTTP请求方法,采用的是统一的接口
requests.request(method, url, **kwargs)

其中,kwargs可以保护HTTP请求所有可能用到的信息,例如:headers、cookies、params、data、auth等。

所以,只要遵循Requests的参数规范,在接口测试用例中复用Requests参数的概念即可。而HttpRunner处理逻辑很简单,直接读取测试用例中的各项参数,传递给Requests发起请求。

Requests接口请求示例

def test_login(self):url = "www.xxx.com/api/users/login"data = {"name": "user1","password": "123456"}resp = requests.post(url, json=data)self.assertEqual(200, resp.status_code)self.assertEqual(True, resp.json()["success"])

在该用例中,实现了HTTP POST请求,然后对响应结果进行判断,检查响应code等是否符合预期。

这样的用例在实际项目中会存在两个问题:
用例模式基本固定,会存在大量相似或重复的用例,用例维护有很大问题;
用例与执行代码不分离,参数数据也未分离,同样不易维护;

HttpRunner使用json/yaml格式处理测试用例,分离后的用例描述如下

{"name": "test login","request": {"url": "www.xxx.com/api/users/login","method": "POST","headers": {"content-type": "application/json"},"json": {"name": "user1","password": "123456"}},"response": {"status_code": 200,"headers": {"Content-Type": "application/json"},"body": {"success": true,"msg": "user login successfully."}}}

HttpRunner用例执行引擎

def run_testcase(testcase):req_kwargs = testcase['request']try:url = req_kwargs.pop('url')method = req_kwargs.pop('method')except KeyError:raise exception.ParamsError("Params Error")resp_obj = requests.request(url=url, method=method, **req_kwargs)diff_content = utils.diff_response(resp_obj, testcase['response'])success = False if diff_content else Truereturn success, diff_content

从测试用例中获取HTTP接口请求参数,testcase[‘request’]

{"url": "www.xxx.com/api/users/login","method": "POST","headers": {"content-type": "application/json"},"json": {"name": "user1","password": "123456"}}

发起Http请求

requests.request(url=url, method=method, **req_kwargs)

检测测试结果,即断言

utils.diff_response(resp_obj, testcase['response'])
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

勇敢面对挑战,坚定前行,你的努力终将开花结果。每一步都是向着梦想迈进的力量,相信自己,勇往直前,创造属于你自己的辉煌。

不忘初心,砥砺前行,每一次努力都将成就辉煌。勇敢地迎接挑战,坚定地迈向梦想,因为你的努力终将开启成功之门。相信自己,你必定能创造奇迹。

困难并不可怕,勇敢面对挑战,才能收获辉煌。坚持不懈,努力奋斗,梦想的光芒终将照亮前行的道路。相信自己,你定能创造属于自己的奇迹。

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

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

相关文章

Ionic 模块组件的理解

1 Ionic4.x 文件分析 1.1 app.module.ts 分析 Ionic 是一个基于 Angular 的移动应用开发框架,能帮助开发者使用 Web 技术(HTML5、CSS3、JavaScript)创建跨平台的应用程序。在 Ionic 应用程序中,app.module.ts 文件是整个应用程序的…

基于javaweb+mysql的jsp+servlet学生成绩管理系统(管理员、教师、学生)

博主24h在线,想要源码文档部署视频直接私聊,9.9元拿走! 基于javawebmysql的jspservlet学生成绩管理系统(管理员、教师、学生)(javajspservletjavabeanmysqltomcat) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myecl…

UE5 c++将自定义UserWdiget添加到对应菜单栏

前言: 为了实现与UserWidget一致的右键添加,便有了此章 注:这里使用的是UE5.3 目标内容: 这里可以参考UserWidget的源码,拷贝一份属于自己的就ok(本篇章只是全改成了属于自己的CommonUserWidget&#xff…

Android 使用.9图 NinePatchDrawable实现动态聊天气泡

最近一段时间,在做一个需求,需要实现一个聊天气泡的动画效果,如下图所示: GitHub源码demo ,建议下载demo,运行查看。 动态聊天气泡动画 静态聊天气泡 经过一段时间调研,实现方案如下: 实现方…

栈(定义,基本操作,顺序存储,链式存储)

目录 1.栈的定义1.重要术语2.特点 2.栈的基本操作3.栈的顺序存储1.顺序栈的定义2.基本操作1.初始化2.进栈3.出栈4.读栈顶 3.共享栈 4.栈的链式存储 1.栈的定义 栈( Stack)是只允许在一端进行插入或删除操作的线性表。 一种受限的线性表,只能在栈顶进行插…

高校为什么需要大数据挖掘平台?

目前数据挖掘已经成为各种应用领域的重要技术,大学数据挖掘课程的开放已经出现。数据挖掘课程整合了多门学科知识。该课程包括各种理论知识,也离不开相关的实用技术。整个教学过程是培养和提高学生全面创新和解决问题的能力。过去,教学过程理…

Vscode禁止插件自动更新

由于电脑的vscode版本不是很新。2022.10月份的版本1.7.2,电脑vscode的python插件装的也是2022年4月份的某个版本,但插件经常自动更新,导致python代码无法Debug,解决办法: 点设置,搜autoUpdate, 把红色框选成无

MicroStation二次开发问题记录(1):打开项目时自动加载dll文件

环境配置 Windows10 MicroStation CE Update16 Visual Studio 2019 前言 开发好的dll文件若每次都需要在打开MS时单独加载,则过于繁琐,因此可以在确定的工程项目文件中进行一次设置,在打开该文件时自动加载 一、加载dll文件 1. 点击File—Se…

ROS学习笔记(5):ros_control

1.ros_control简介 ros_control - ROS Wiki ros_control是为ROS提供的机器人控制包,包含一系列控制器接口、传动装置接口、控制器工具箱等,有效帮助机器人应用功能包快速落地,提高开发效率。 2.ros_control框架 ros_control总体框架: 针对…

【微服务 Spring Cloud 6】服务如何拆分?使用微服务的注意事项?

目录 一、前言二、单体服务的弊端三、微服务化四、服务如何拆分?1、拆分原则2、拆分时机和拆分方法3、拆分实践 五、使用微服务的注意事项1、确保相关业务和利益相关者的支持2、确定微服务的拆分粒度3、遵循微服务架构的原则4、确保接口的稳定性5、关注数据一致性6、…

百数低代码与AI:实现业务智能化的新途径

今年6月,咨询机构麦肯锡发布了的一份题为《生成式人工智能的经济潜力》的研究报告,在报告中,分析师们通过对47个国家及地区的850种职业(全球80%以上劳动人口)的研究,探讨了在AI成指数级发展背后&#xff0c…

PostgreSQL简介及安装步骤

PostgreSQL简介 PostgreSQL是一款开源的关系型数据库管理系统,具有强大的扩展性、高度的可定制性和可靠的稳定性,因此在企业级应用和开发领域中得到了广泛的应用。本文将介绍PostgreSQL的基本概念以及在各种操作系统上的安装步骤。 安装步骤 1. Window…

05【保姆级】-GO语言的标识符

之前我学过C、Java、Python语言时总结的经验: 先建立整体框架,然后再去抠细节。先Know how,然后know why。先做出来,然后再去一点点研究,才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

CRM客户管理系统究竟是什么?如何实施?

很多销售人员都不是特别喜欢使用信息化软件,然而从销售经理的角度看,信息化又的确提升了团队的管理效率和业绩。追究这些矛盾的原因,无外乎几点: 认知角度 → 销售员:数据没用又浪费我时间 VS 销售经理:数…

聊聊定时器 setTimeout 的时延问题

给大家推荐一个实用面试题库 1、前端面试题库 (面试必备) 推荐:★★★★★ 地址:web前端面试题库 全局的 setTimeout() 方法设置一个定时器,一旦定时器到期,就会执行一个函数或指定的代码片…

字符函数和字符串函数详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 字符分类函数 2. 字符转换函数 3. strlen的使用和模拟实现 3.1strlen的使用: 3.2strlen的模拟实现: 4. strcpy的使用和模拟实现 4.1strc…

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案

现象 漏刻有时项目开发中的调用了百度地图API,在PC端、IOS和安卓机型测试都没有问题。但是使用华为手机部分型号时,前端在监听点击事件的时候是使用 map.addEventListener(click,function(){...}),无法触发。或 原理 通过监听touchstart和…

Django初窥门径-自定义附件存储模型

前言 Django自带了一个名为FileField的字段,用于处理文件上传。然而,有时我们需要更多的控制权,例如定义文件的存储路径、文件名以及文件类型。在本篇文章中,我们将探讨如何自定义Django附件存储模型。 创建attachment应用 pyt…

Python|OpenCV-图像的添加和混合操作(8)

前言 本文是该专栏的第8篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在使用OpenCV库对图像操作的时候,有时需要对图像进行运算操作,类似于加法,减法,位操作等处理。而本文,笔者将针对OpenCV对图像的添加,混合以及位操作进行详细的介绍说明和使用。 下面,…

ZKP8.1 Polynomial-IOP and Polynomial Commitment Schemes

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 8: FRI-based Polynomial Commitments and Fiat-Shamir (Justin Thaler) 8.1 Polynomial-IOP and Polynomial Commitment Schemes Recall: build an efficient SNARK Recall: Polynomial-IOP P’s first message in the pro…