测试基础|为啥大多数功能测试会觉得测试平台不好用?自动化测试的几点思考

一、接口自动化到底要验证什么

个人觉得做什么事情前,应该想下做的动机和想要达成的目的,这样会减少很多不必要的弯路。

1. 自动化的原因

测试界普遍认为应该加自动化用于提高测试效率和保障;

测试kpi任务;

应对需要频繁执行的测试场景;

需要增加信心和可靠性。

2. 理想中的目的

线上定时巡检,监测系统稳定性,更早地发现问题,减少故障恢复的时间;

辅助提高回归测试质量(就是辅助作用,别想着能靠自动化发现大问题);

记录每次巡检的结果,有助于团队了解系统的历史性能。

3. 接口自动化的设计方向

说到底,接口自动化的所有处理就是围绕下面三步去提取测试点和选型工具,并没有什么很高大上的东西,底层还是要看写测试点的这个人的业务水平,创建出有效的测试点。

图片

我们基本根据这三步和上面的目的去规划测试点和实现方式。

在这里插入图片描述

3.1 工具选择原则:

图片

3.2 主要测试点提取

图片

3.3 测试场景实现难点(大部分都能借助测试框架解决,解决不了的就用工作流程解决,再解决不了的就不用解决,自动化测试只是辅助措施)

->这里用pytest的测试框架来描述解决方法,不同的测试框架自己找对应的方法

图片

4. 自动化实现中的实际痛点

现在的普遍论调应该基本都是在技术优化上,但是实际上自动化测试的实际痛点的本质上因为人的痛点:

(1)日益增长的工作内容同有限人力之间的矛盾

有限的测试人力无法满足日益增加的测试需求/要求;

引入自动化测试无法减少工作量的增加,却要挤出时间和资源去实施和维护一个辅助性质的自动化。

(2)理想化愿景与实际可行性之间的矛盾

平台化设计过度复杂,想要覆盖各种测试需求,导致用例创建繁琐、学习曲线陡峭;

妄想匹配所有项目需求,不断细化和组件化等,导致失去灵活性、增加维护成本。

(3)技术追求与实际需求之间不平衡的矛盾

倾向于追求更高级、复杂的技术,以展示其专业技能,导致出现用很复杂的流程和实现方式去验证一件反而简单的事;

封装过度,导致代码难以理解和维护(我们不是开发,没必要防御性编程)。

解决思路:

1.自动化设计就要立足于实际的项目需要,只关注当前项目的核心功能和业务流程,不盲目追求覆盖率,只对关键路径、核心功能和高风险场景进行自动化,不一定动辄就是测试平台。

2.接口自动化性价比最高的就是脚本化(复制粘贴是真的方便)搭配一个成熟的测试框架,不搞花里胡哨的封装和平台化,力求易读、易维护的自动化测试脚本。

3.不追求更高级的技术,注重实用性/快捷性,自动化的关键点不是你用了什么技术去做请求断言返回,而是你的这个用例关注的方向对没。(你用Java 搞了个平台创建断言了接口返回和我用postman写了个脚本断言返回,测试结果效果上有什么质的区别吗?)

5. 自动化搭建大致过程

选择一个合适的工具;

根据我上面主要测试点提取的表,选择需要验证的内容进行断言;

利用codeGeex/gpt的辅助,一步步把需要完成的自动化搭起来;

后续随着用例数和场景复杂了,遇到什么问题就有什么解决什么,你不可能一开始就能想到全部的问题。

如果你是用 python,大致用到的就是这些,除了通用的 http 请求,如果有其他协议,就找对应协议的库

测试框架:pytest:用于编写和执行测试用例,支持参数化测试、夹具等功能。HTTP请求库:requests:用于发送HTTP请求,方便处理接口的GET、POST等操作数据驱动:yaml:用于存储测试数据,例如接口请求参数、期望响应等。可以使用PyYAML库解析YAML格式的数据文件。数据库连接:mysql-connector-python,用于与MySQL数据库建立连接,执行数据库操作,例如验证接口返回的数据与数据库中的数据是否一致。日志记录:logbook,用于记录测试过程中的日志信息,有助于排查问题和进行调试。报告生成:allure-pytest,结合pytest和Allure生成详细的测试报告,提供可视化的测试结果和执行历史。

二、目前测试平台有什么奇怪点

了解问题的核心关键在于 “从群众中来,到群众中去”,这句话同样适用于测试岗,很多平台都会标注“独特的用例编写方式”、“低门槛,易使用”的特性,但是实际上都是粗制web化的jmeter或者粗制web化的postman又或者是奇葩的低代码拖拽,不仅创建用例麻烦不灵活 且 调试接口费时间,功能细化和封装过度也导致了不小的学习使用成本,且该学习成本不像 jmeter 这种工具的使用经验那样可复用。这些既不能提高效率又不能用来提高测试水平的做法用一句话来形容的话就是:“离群众太远了”。

1. 测试平台使用槽点

测试平台交互模式:

创建项目->创建模块->创建case->关联项目->关联模块;

编写case:请求参数、前后置、预期值等多个输入框,需要逐个点击填写信息 (和 jmeter 创建用例的方式有什么区别?),当接口发生变更时,也是需要逐个用例手动修改信息,维护成本高,用例的可读性也差;

调试 case: 调试信息不够清晰且慢,调试出问题时也无法马上明确是平台问题还是接口本身问题。

2. 测试平台的设计通病

把【低门槛,易使用】理解为:不用写代码就是容易用,抛开实际意义上的实用。

太想通用:平台的灵活性本身比较差,为了增加灵活性又为了考虑功能测试不懂代码,通常都会将多种操作流程组件化,增加很多配置项。但是一件产品如果是一端的产出,没有对应的产品、测试和持续的用户反馈,必定会有设计不当或者过度组件化,导致测试用例的抽象层次变得复杂、上手难度增加、执行有性能问题等。

鸡肋:为体现自身技术,选型难度较大的前后端技术栈,过度追求技术炫耀让平台更难理解和使用,底层逻辑还是走的对返回包的断言,导致难以让人信服。就像赛博丁真绕了个大圈关灯一样。

3. 意识形态差异:

都什么年代了,现在面试功能测试哪个不要求基本的代码脚本能力?更别说现在都有gpt加持,真的不用特别考虑测试无代码能力的场景。

都是测试,肯定是希望通过写脚本去巩固自己熟悉的开发语言,即使繁琐,也有学习成长的快感。

三、写自动化的心理误区

1. 没使用设计模式,很心虚

特别是新手,认为如果没有使用设计模式来编写自动化测试代码,就会感到不够专业或不足够好。

设计模式的确在自动化测试中可以提高代码的可维护性和可扩展性,但并非所有项目都需要复杂的设计模式。如果你只是为了实现简单的接口测试,引入设计模式只会导致代码过于复杂,增加了维护成本。

设计模式是一个不断演进的过程,可以在需要的时候逐步引入,而不必为了设计模式而设计模式。始终专注于编写简单、可读、可维护的脚本。

哪怕你用下面最简单明了的模式,哪又怎样?能达到自动化的目的即可,干嘛要折磨自己(个人见解,大佬忽略)

project_root/
|-- api_tests/     存放 API 测试用例的目录
|   |-- project1/      项目1
|   |   |-- __init__.py
|   |   |-- test_api_project1.py
|   |   |-- utils/
|   |       |-- __init__.py
|   |       |-- api_client_project1.py   封装 API 请求的客户端工具
|   |-- project2/          项目2
|       |-- __init__.py
|       |-- test_api_project2.py
|       |-- utils/
|           |-- __init__.py
|           |-- api_client_project2.py   封装 API 请求的客户端工具
|-- conftest.py      共享的 fixture 和配置信息
|-- pytest.ini          Pytest 的配置文件
|-- requirements.txt

2. 过度关注工具而非测试目标

Java的TestNG、python的pytest、jmeter、postman还是在前面工具基础上封装平台,本质上都是向目标接口发出请求再进行断言,不管技术实现上有多难,最后实现的测试目标都是一样的。

自动化最终难题都在用例维护和管理上,即使平台化也是如此。

测试用例的设计和执行质量直接影响测试的有效性,良好设计的测试用例可以更好地捕捉潜在的问题,而低质量的测试用例可能导致遗漏重要的测试点。

3. 一切都可以自动化

自动化是业务逻辑抽象的结果,只是业务逻辑测试的一种方式,相比手工的确是效率更高些,但是需要一个基础条件:稳定的项目。

4. 试图一步到位

一开始就想覆盖所有的接口和测试场景,徒增压力和维护成本。

要逐步增量的方法,从一些核心的接口和关键的测试场景开始,逐步扩展测试范围。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

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

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

相关文章

mysql 数据库的MHA高可用

目录 一、MHA概述: 1.认识MHA: 2.MHA 的组成: 3.MHA 的特点: 4.MHA 工作原理: 5.数据流向: 6.数据同步方式: 7. mysql 的高可用 : 二. MySQL MHA 的搭建: 1. 修改 Master、…

vulhub中Struts2-016 远程代码执行漏洞复现

影响版本: 2.0.0 - 2.3.15 漏洞复现 在struts2中,DefaultActionMapper类支持以"action:"、"redirect:"、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这…

蓝桥杯每日一题:杨辉三角形(组合计数)

下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ... 给定一个正整数 N,请你输出数列中第一次出现 N是在第几个数&#x…

Vue - 你能说说Vue3和Vue2相比,改进了哪些地方吗

难度级别:中级及以上 提问概率:85% Vue2终将面临停止维护,不过幸好Vue3做到了很好的向后兼容,可以使前端开发人员能够更平滑的过渡。在前端面试中,Vue3的相关知识也会越来越多,那么Vue3与Vue2相比,都做到了哪些改进呢? 从开发阶段讲…

VS Code远程连接服务器运行python程序

之前一直用pycharm连接服务器跑程序,pycharm需要本地和远程都存一份代码,然后把本地的更新同步到服务器上来实现代码修改,后来实习的时候发现企业里面都用VS Code,不得不说,VS Code真的很方便,直接连服务器…

Leetcode 56. 合并区间

心路历程: 这道题看起来很简单,但实际上操作起来很多细节,第一反应是朋友圈问题,于是想到了并查集去做,顺便复习了一下并查集。但是这道题用并查集的话只能98% A,无法全部通过。 这道题其实是考察数组重复…

如何使用 FastApi

安装 fastapi fastapi 是一个用于构建高性能 Web 应用的 Python 框架,它提供了简洁、高效的 API 开发体验。 pip install fastapi 安装 uvicorn uvicorn 是一个用于运行 FastAPI 应用的服务器,它可以将你的 FastAPI 代码部署到生产环境中。 pip inst…

MySQL基础【语句执行顺序】

一个SQL语句它的执行顺序对于我们思考题意有着很重要的关系 题意就是:找出哪些只逛超市不买单的人(买单0元也算哦,可能是使用的是代金券吧) 看到此题关键找出两个数据 参观过的人 和 买单的人 他们的差就是白嫖的人(支…

【简单讲解想如何安装MXNet】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

C语言解决汉诺塔问题

背景 首先带大家了解一下汉诺塔问题 汉诺塔是一个典型的函数递归问题,汉诺塔描述了这样的场景,有三个柱子,A,B,C,A柱为起始柱,在A柱上面有若干大小不同的盘子,最下面的最大,最上面的最小&#x…

【教程】VOC数据集制作

语义分割任务中VOC数据集的制作,任务中只有一种标签:gas 文章目录 1、由黑白图像识别为txt标签2、txt转json3、数据集转VOC格式 1、由黑白图像识别为txt标签 由于使用CycleGAN网络进行风格迁移学习,生成了大量伪标签图像,因此需…

Python基于深度学习的屋内烟雾检测系统的研究与实现,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

实现Hello Qt 程序

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、使用 "按钮" 实现 1、纯代码方式实现 2、可视化操作实现 (1&#xff09…

计算机网络基础(二)

之前我们讲到了计算机网络的分类,现在我们继续讲解: 一.按网络的线路结构进行分类 1.星型 如上图,星型型拓扑结构是目前局域网普遍采用的一种拓扑结构。 特点: 星型拓扑结构是用一个节点作为中心节点,其他节点直接与…

常见的线程安全类

线程安全!线程安全!!线程安全!!! 鼠鼠我最近被线程安全这个词弄得好烦啊,那既然如此就来写一篇常见的线程安全类防止以后鼠鼠我的大脑又宕机了忘记了....... 这里我们讨论的线程安全的是指&am…

【C#】版本号

💻 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp16 {internal class Program{static void Main(string[] args){Version version01 new Version("4.0.0…

软件设计师-基础知识科目-计算机基础知识1

前言: 我去年11月份参加了软件设计师的考试,一次性顺利通过了该考试。去年11月份的考试首次改革成机考。考试时间上从一整天压缩成一个下午。考试难度无法评价,因为是第一次参加该考试。我考前利用4个月时间准备,准备时间看似很长…

Word wrap在计算机代表的含义(自动换行)

“Word wrap”是一个计算机术语,用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中,都有实现这一功能的函数或选项。 在编程中,例如某些编程语言中的wordwrap函数,能够按…

检查网站连接是否安全

要确认某个网站是否可以安全地进行访问,您可以查看有关该网站的安全信息。如果您无法安全地或以私密方式访问网站,浏览器将会发出提醒。 1. 在 浏览器 中,打开相应网页。 2.要确认网站的安全性,请查看网址左侧显示的安全状态图标…

学习:面向云备份提供商的 Solidigm 固态硬盘

SSD与HDD的区别 SSD和HDD之间的主要区别在于它们如何存储和传输数据。HDD有一个旋转盘片或磁盘,用于读取和写入数据。HDD的每GB初始价格通常低于SSD,这使其成为大型机构(如金融机构、政府数据存储设施、高性能计算中心(HPC&#…