【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......

news2024/9/25 9:31:48

目录:导读

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


前言

接口测试,大家关注更多的是哪个工具更优秀,更好用。但是很少人关注到接口测试用例的设计问题,也很少人会去写接口用例,都代码化了嘛,还写什么用例,是吧?

这样真的对么?我们是不是忽略了什么呢?回归测试的时候,成百上千个接口执行下来,没有报错,你就真的对系统放心了么?在接口测试之外,我们还需要补充哪些功能用例来验证那些接口做不了或者不好做的场景呢?

接口用例的设计也是一项非常重要的测试活动。通过一定的接口用例设计,让我们编写的脚本更有目的性、更可靠,才能体现接口测试的价值的意义,而不是单纯以量取胜。测试目的明确,符合接口测试基本原则,断言清晰的接口自动化脚本才是好脚本。

某个用例的测试目的是什么

在进行接口测试脚本的编写前,我们应该明确这批脚本的预期目标在哪里,是为了验证什么内容。

根据个人的经验,一般会把接口用例分成三类:
单接口验证:以验证接口参数、权限、返回值为主,保证接口“能用”,这类用例一般在接口设计定稿后,配合Mock服务就可以完成用例编写;

场景逻辑验证:以用户场景为基础,验证接口间的参数传递及业务流程能够正常流转,用例复杂度较高,需要非常熟悉业务与接口之间的关系。这是接口测试最核心的价值。

异常验证:主要验证参数异常、逻辑异常等情况下,接口是否能处理并给出友好的错误信息。

通常情况下,关注参数异常的场景会比较多,可以用等价类、边界值等方式来处理。
需要注意的是多关注下异常的返回信息是什么,信息是否明确,提示是否友好等等。

接口信息的来源

当我们明确好测试目标后,再开始编写测试用例,会有更针对性的去设计测试数据和接口组合。
接下来的问题是什么呢?
去哪里确认你的接口信息是有效的?

基本上有两种路径:

接口文档:开发人员都不喜欢自己写文档,同时也很讨厌别人不写文档。所以测试人员如何获取一份真实有效的接口文档是件比较麻烦的事。一般团队内都会有一个统一的接口文档管理工具(如果没有,就找开发多磨麿,让他们弄个,并不难),我们需要关注接口文档的有效性和及时性。现在也有很多的插件或者工具能够帮助研发人员自动生成接口文档,例如Swaager、apidoc等等。

接口抓包:如果什么都没有,那就自力更生,通过Fiddler之类的工具,通过抓包分析的方式来获取接口,这类的场景如果较多的话,可以把Fiddler抓到的接口导出,然后写个小程序,直接转成接口平台可以识别的脚本,效率会更高一些。

在获取到接口信息后,需要与开发人员多交流,明确参数的意义及来源,以便我们针对性的做测试用例设计,这个环节不要过多的自己猜(很多测试人员经常会自己猜想),直接找开发问就好了。

在这个接段,还要梳理并区分接口的重要程度和优先级。这样就可以确认哪些接口优先设计用例,哪些接口可以先放放,在有限制的时间内,做最大价值的事。

一些基本原则

拿到接口后,明确了参数说明,结合测试目标,我们就可以开始设计并编写测试用例了。

区别于功能测试用例,接口测试用例(脚本)一些原则需要注意:
自动化:好像是废话,所有的用例应该是非交互试,最常见的就是Token之类的生成,需自动处理好(我见过每次执行用例前,需要自己手动生成Token再粘贴进去的脚本,特别是分环境执行的时候)。

独立性:每个用例应该是独立的,没有依赖的。需要在一个用例里处理好前置条件,而不是多个用例相互依赖。

可重复:用例测试可重复执行,所以需要注意参数的生成方式。

可持续性:如果代码修改导致已有接口测试执行失败,必须修复代码问题或者测试代码逻辑。

断言那些事

在设计测试用例时,还需要关注的是针对断言的设计,好的断言能够帮助我们发现问题,没有断言的用例(脚本)就是耍流氓,完全没有意义。

个人在审核脚本时,会重点关注这个(很多测试人员为了数据好看,或者因为是事后补写,所以断言写的非常简单,这类脚本其实都是在做无用功,纯粹是为了KPI)。

从接口层面看,我们至少需要验证两点:
数据结构验证:验证接口返回的数据结构是否与事先定义的一样。调用方在处理数据时,肯定是根据事先定义好的数据结构来解析数据的,如果数据结构发生变化,那对调用方来说,是灾难性的(契约测试考虑下)。

核心数值的验证:根据业务场景的不同,可以有目的性的验证某些key的值是否与预期的一样,可以结合数据库查询的方式来验证(不同的自动化测试框架有不同的实现方式)。这个就比较依赖测试人员对业务的了解。根据实际情况灵活的设计验证点。

除了以上两点外,还有一些额外的验证点在需要的时候可以进行,如涉及到其它方的数据流转、返回的URL是否可被访问,返回的数据是否真的是必要的(这点很重要,过多的返回会导致很多意外的问题),等等。根据实际情况进行补充。

这样,通过一系列的方法设计出来的接口用例,才会有一定的业务价值,能够真正的帮助到团队,提升测试效率,对于这样的测试脚本,全部PASS的结果才会让人安心。(你能想象没有断言的脚本全部PASS,你还放心的么)

脚本的后期维护

测试用例(脚本)编写完成后,并不意味着接口测试的成完。在其它的测试环节中,如果发现因为接口问题而产生的BUG(如响应异常、无数据返回等情况),我们需要适当的补充到接口用例中,避免类似的情况再次发生而我们没有验证到。

在积累到一定高质量的用例(脚本)后,可以进一步挖掘这些东西的价值,如转化成线上业务监控的脚本,转换成精准测试的依据等。

还有更高端的玩法,是借助混沌测试的思路,独立拉个分支,故意修改一些异常出来,让测试用例验证,能否发现这些BUG,以验证测试用例的有效性。如果不能发现,那就需要我们去思考如何改进测试脚本(业内已经有类似的平台出现了)。

关于测试数据的准备

多聊下测试数据准备的事,这其实是接口测试中很重要的一个环节,想要脚本可以在多个环境中运行,那么测试数据就不能写的太死,需要根据环境去自动获取一些数据值。

针对测试数据的准备,一般的玩法也有三类:
公共参数:通过不同作用域及标识的区分,有个专门的文件来处理一些共用数据的存放,例如不同环境下的用户名。

数据集合:通过特定的API或者SQL事先生成所需要的数据,然后放到一个指定的集合(参数或者文件都可以)中,在需要的时候,从这里获取对应的数据值。

数据模板:这个是数据集合的升级版,根据业务数据流,只需要填写一些简单的信息,就可以自动生成一整套的业务数据(例如个人做过的,通过基础的学校信息,就自动生成一套针对性的数据,包含学校、班级、学科、学生等整套的数据)。

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

人生留下的不仅是美丽,更重要的是精神;精神需要传承和发扬,会激励我们去追求理想,活就活的精彩,乐就乐的舒畅;记住榜样的力量,传递爱的正能量。

积极的人在每一次忧患中都是看到一个机会,而消极的人则是在每个机会都是会看到某种忧患。

大多数人高估了他们在一年内能做的事情,而低估了他们在十年里能做的事情,绝不以临时方案解决长期问题。

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

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

相关文章

美团前端一面手写面试题

实现斐波那契数列 // 递归 function fn (n){if(n0) return 0if(n1) return 1return fn(n-2)fn(n-1) } // 优化 function fibonacci2(n) {const arr [1, 1, 2];const arrLen arr.length;if (n < arrLen) {return arr[n];}for (let i arrLen; i < n; i) {arr.push(arr[…

vulnhub Kioptrix4

总结&#xff1a;sql注入&#xff0c;受限shell绕过&#xff0c;mysql提权 目录 下载地址 漏洞分析 信息收集 sql注入 ssh登录绕过受限shell 提权 下载地址 Kioptrix4_Hyper_v.rar (Size: 210 MB)Download: http://www.kioptrix.com/dlvm/Kioptrix4_Hyper_v.rarDownload …

Linux驱动开发详细解析

Linux驱动开发详细解析 驱动概念 驱动与底层硬件直接打交道&#xff0c;充当了硬件与应用软件中间的桥梁。 具体任务 读写设备寄存器&#xff08;实现控制的方式&#xff09;完成设备的轮询、中断处理、DMA通信&#xff08;CPU与外设通信的方式&#xff09;进行物理内存向虚…

关于字符设备驱动的通用概念和写法

概述 设备驱动程序可以使用模块的方式动态加载到内核中去。加载模块的方式与以往的应用程序开发有很大的不同。以往在开发应用程序时都有一个 main()函数作为程序的入口点&#xff0c;而在驱动开发时却没有 main()函数&#xff0c;模块在调用 insmod 命令时被加载&#xff0c;…

JVM学习笔记一:类加载子系统

目录 前言 类加载子系统的作用 类加载器角色的位置 类加载器分类 虚拟机自带的加载器 启动类加载器&#xff08;引导类加载器&#xff09; 扩展类加载器 系统类加载器 用户自定义类加载器 什么时候需要自定义类加载器&#xff1f; 如何自定义类加载器&#xff1f; …

【验证码的识别】—— 极验验证码的识别

前言 &#xff08;结尾有彩蛋欧&#xff09; 目前&#xff0c;许多网站采取各种各样的措施来反爬虫&#xff0c;其中一个措施便是使用验证码。随着技术的发展&#xff0c;验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码&#xff0c;后来加入了英文字母和混…

《计算机系统基础》——计算机系统导论

文章目录《计算机系统基础》——计算机系统导论计算机的基本组成程序开发与执行过程机器语言汇编语言高级语言程序的转换处理程序的数据流动计算机系统层次结构早期计算机系统1GL2GL现代计算机系统3GL4GL指令集体系结构《计算机系统基础》——计算机系统导论 &#x1f680;接下…

LaTeX中表格过宽解决方案

最近使用LaTeX处理表格时遇到了一件十分棘手的问题&#xff0c;由于内容较多将表格分成了好多列&#xff0c;但将内容填入表格时由于表格宽度过大&#xff0c;导致表格右边溢出了页面无法查看&#xff0c;查阅大量资料与博文后给出如下解决方案&#xff0c;全文代码已部署在Ove…

C#基础练习题,编程题汇总

C#基础练习题&#xff0c;编程题汇总一、C#提取输入的最大整数二、秒数换算为相应的时、分、秒三、C#计算电梯运行用时demo四、C#用一维数组求解问题五、C#程序教小学生学乘法六、C#winfrm简单例题七、C#类继承习题八、C#绘图例子一、C#提取输入的最大整数 编程实现在一行内输…

分布式任务调度(XXL-JOB)

什么是分布式任务调度&#xff1f; 任务调度顾名思义&#xff0c;就是对任务的调度&#xff0c;它是指系统为了完成特定业务&#xff0c;基于给定时间点&#xff0c;给定时间间隔或者给定执行次数自动执行任务。通常任务调度的程序是集成在应用中的&#xff0c;比如&#xff1a…

[译]PostgreSQL16-新特性-新增IO统计视图:pg_stat_io

PostgreSQL16-新特性-新增IO统计视图&#xff1a;pg_stat_io我们DBA常遇到的问题是&#xff1a;如何优化数据库的IO操作&#xff1f;获取PG服务产生的所有IO情况历来都是一个挑战。首先&#xff0c;PG将IO行为范围内为写WAL和读写数据目录(也就是数据文件)。真正的挑战是&#…

解决实际项目中stalled时间过久的问题

背景 在公司参与了一个做度量统计的项目&#xff0c;该项目的特点是页面上的表格、卡片、图标非常多。项目经常出现一种情况&#xff1a;页面加载速度较慢&#xff0c;开始怀疑是由于计算量较大&#xff0c;后端接口相应速度较慢。优化了一版后端接口后&#xff08;加缓存、优…

方法区和元空间有什么关系?

一.什么是方法区&#xff1f; 方法区属于是 JVM 运行时数据区域的一块逻辑区域&#xff0c;是各个线程共享的内存区域。 《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用&#xff0c;方法区到底要如何实现那就是虚拟机自己要考虑的事情了。也就是说&#xff0c;在…

电子技术——分析放大器的高频响应的有用工具

电子技术——分析放大器的高频响应的有用工具 在前几章我们使用米勒效应估计了CS和CE放大器模型的高频响应 fHf_HfH​ &#xff0c;以及分析了其限制和影响因素。然而&#xff0c;这个方法不能有效的处理负载是容性负载 CLC_LCL​ 的情况。同时&#xff0c;这个方法不能扩展到更…

【FPGA】Verilog:实现十六进制七段数码管显示 | 7-Segment Display

写在前面&#xff1a;本章主要内容为理解七点数码管显示的概念&#xff0c;并使用 Verilog 实现。生成输入信号后通过仿真确认各门的动作&#xff0c;通过 FPGA 检查在 Verilog 中实现的电路的操作。 Ⅰ. 前置知识 七段数码管是利用多重输出功能的非常有用的元件。该元件用于字…

spring+springboot+mybatis志愿者报名系统 ssm java

本盐城疫情防控志愿者报名系统以SSM作为框架&#xff0c;B/S模式以及MySql作为后台运行的数据库。本系统主要包括以下功能模块&#xff1a;防疫视频、优秀事迹、报名条件、在线报名等模块&#xff0c;通过这些模块的实现能够基本满足日常盐城疫情防控的操作。 根据盐城疫情防控…

基于微信小程序的中国各地美食推荐平台小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.…

【js】export default也在影响项目性能呢

这里写目录标题介绍先说结论分析解决介绍 无意间看到一个关于export与exprot default对比的话题&#xff0c; 于是对二者关于性能方面&#xff0c;有了想法&#xff0c;二者的区别&#xff0c;仅仅是在于写法吗&#xff1f; 于是&#xff0c;有了下面的测试。 先说结论 太长…

.NET3.5安装步骤及相关问题。

.NET3.5全称 Microsoft.NETFramework3.5 最新版本-.NET4.8 第一步打开控制面板 windows系统打开控制面板 选择程序 选择.NET3.5安装。 可能会出现问题。 解决方案&#xff1a; 报错代码80240438的常用解决办法&#xff1a; 方法一&#xff1a;检测windows update servic…

【NLP实战】Python字符串处理

一、Python字符串基本操作 1. 去掉前后的特殊字符&#xff08;strip&#xff09; Python的strip操作可以去除字符串前后的空格&#xff08;不改变原串&#xff09;下例将前后的空格均删掉&#x1f447; str 人工智能 str.strip() # OUT:人工智能rstrip删除右边的空格&a…