【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......
目录:导读
- 前言
- 一、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性能测试
九、总结(尾部小惊喜)
人生留下的不仅是美丽,更重要的是精神;精神需要传承和发扬,会激励我们去追求理想,活就活的精彩,乐就乐的舒畅;记住榜样的力量,传递爱的正能量。
积极的人在每一次忧患中都是看到一个机会,而消极的人则是在每个机会都是会看到某种忧患。
大多数人高估了他们在一年内能做的事情,而低估了他们在十年里能做的事情,绝不以临时方案解决长期问题。
相关文章:
![](https://img-blog.csdnimg.cn/8124a64fb6264240b52e201824d52680.png)
【软件测试】python接口自动化测试编写脚本,资深测试总结方法,你的实用宝典......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 接口测试࿰…...
![](https://img-blog.csdnimg.cn/6c398e48b8514660a1341851993f41c2.png)
MathType公式编辑器过期(禁止联网)的解决方案
MathType公式编辑器过期(禁止联网)的解决方案 Mathtype公式编辑器无法使用解决方案 MathType联网后显示证书失效,需要重新认证或者购买。或者是MathType成了精简版,只剩两行了。 1. 打开控制面板 方法1 首先大家在电脑中打开W…...
![](https://img-blog.csdnimg.cn/65e532d6edc24f3ea8abe510559a35b1.png)
电子技术——共栅和共源共栅放大器的高频响应
电子技术——共栅和共源共栅放大器的高频响应 我们在之前学过无论是是CS放大器还是CE放大器,都可以看做是一个带通(IC低通)滤波器。在高频处的响应收到输入电容 CinC_{in}Cin 的限制(主要是米勒效应)。因此ÿ…...
![](https://img-blog.csdnimg.cn/2dafab5af4714421820d45b966febaab.png#pic_center)
基于jsplumb构建的流程设计器
项目背景 最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下 项目地址:ht…...
![](https://img-blog.csdnimg.cn/0838d8d61ced4556bbc8c109b7e73e1e.gif)
解析从Linux零拷贝深入了解Linux-I/O(下)
接上文解析从Linux零拷贝深入了解Linux-I/O(上) 大文件传输场景 零拷贝还是最优选吗 在大文件传输的场景下,零拷贝技术并不是最优选择;因为在零拷贝的任何一种实现中,都会有「DMA 将数据从磁盘拷贝到内核缓存区——P…...
![](https://img-blog.csdnimg.cn/cdec600bcf964938aaf990f709c5ef3a.png)
【学习笔记2.19】动态规划、MySQL、Linux、Redis(框架)
动态规划 343整数拆分 class Solution {public int integerBreak(int n) {int dp [] new int [n 1];//dp[i]:正整数i拆分后的最大乘积dp[2] 1;for(int i 2;i < n ;i ){for(int j 1;j < i;j ){dp[i] Math.max(dp[i],Math.max(j * (i - j),j * dp[i - j]));} …...
![](https://img-blog.csdnimg.cn/af713280cd5948689be90cc9810c6b78.png)
String intern方法理解
1、原理 参考学习视频: https://www.bilibili.com/video/BV1WK4y1M77t/?spm_id_from333.337.search-card.all.click&vd_source4dc3f886f5ce1d43363b603935f02bd1 String s1 “hello”; String s1 "hello"; 代码原理解释如下图String s1 new Str…...
![](https://www.ngui.cc/images/no-images.jpg)
解决 cocosjs与安卓原生集成 崩溃问题
版本:cocos2dx3.16 背景:公司需要把游戏整合到一个APP里面。于是打算通过activity切换的方式实现。但是游戏退出重进之后总会出现fatal 11线程报错。于是有了以下修改。我是底层小白。折腾了好久总算鼓捣出一个能用的版本。优化的地方应该有很多。不过就没去好好优…...
![](https://img-blog.csdnimg.cn/024d3972f1c7492ab358ae7052c0811f.png)
spring注解方式整合Dubbo
系列文章目录 文章目录系列文章目录一、创建一个父工程项目二、创建子模块(dubbo-api模块)二、创建子模块(dubbo-provider模块)三、创建子模块(dubbo-consumer模块)总结一、创建一个父工程项目 这里我们通过Spring Initializer 来帮我们构建一个spring-dubbo这个父项目,点击nex…...
![](https://img-blog.csdnimg.cn/7f63886aac22479ea61dd9e201449600.png)
Git详解
Git1.Git简介1.1 Git是什么1.2 Git的作用1.3 Git的简介1.4 Git的下载和安装1.5 Git的安装目录结构如下2.Git代码托管服务2.1 常用的Git代码托管服务1.Git简介 1.1 Git是什么 Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、x…...
![](https://www.ngui.cc/images/no-images.jpg)
003__JAVA模板方法-设计模式
模板方法 定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现 举个例子,把大象放进冰箱分几步,第一打开冰箱,第二打大象放进冰箱,第三把冰箱关闭。这三个步骤就可以用模板方法的设计模式。 …...
![](https://www.ngui.cc/images/no-images.jpg)
Springboot项目集成Netty组件
系列文章目录 Springboot项目集成Netty组件 Netty新增解析数据包指定长度功能 文章目录系列文章目录前言一、Netty是什么?二、使用步骤1. 项目引入依赖1.1 项目基础版本信息:1.2 Netty依赖2. 项目配置2.1 在 yml 配置文件中配置以下:2.2 创建…...
![](https://www.ngui.cc/images/no-images.jpg)
python 中的import cfg问题
pip install cfg 报错: ERROR: Could not find a version that satisfies the requirement cfg (from versions: none) ERROR: No matching distribution found for cfg 要使用pip install cfg2才行...
![](https://img-blog.csdnimg.cn/img_convert/4e15f43aa93478ff245eef53f12c5d3a.jpeg)
[oeasy]python0088_字节_Byte_存储单位_KB_MB_GB_TB
编码进化 回忆上次内容 上次 回顾了 字符大战的结果 ibm 曾经的 EBCDIC 由于字符不连续的隐患 导致后续 出现 无数问题无法补救 7-bit 的 ASA X3.4-1963 字母序号连续 比较字符时 效率高判断字符 是否是字母 也很容易 获得了 IBM以外公司的 支持 为什么 ASA X3.4-1963 是 7…...
![](https://img-blog.csdnimg.cn/2e46244d9a674b6ca09398b761cdc38a.png#pic_center)
vue3.0 生命周期
目录前言:vue3.0生命周期图例1.beforeCreate2.created3.beforeMount/onBeforeMount4.mounted/onMounted5.beforeUpdate/onBeforeUpdate6.updated/onUpdated7.beforeUnmount/onBeforeUnmount8.unmounted/onUnmounted案例:总结前言: 每个Vue组…...
![](https://www.ngui.cc/images/no-images.jpg)
CGAL 数字类型
文章目录 一、简介二、内置数字类型三、CGAL中的数字类型参考资料一、简介 在CGAL汇总,数字类型必须满足特定的语法和语义要求,这样它们才能在CGAL代码中成功使用。一般来说,它们往往是代数结构概念的模型,如果它们对实数的子集模型,那么它们就也是RealEmbeddable模型。 二…...
![](https://img-blog.csdnimg.cn/img_convert/003c5fab8c1143230ebfb86b902bba60.png)
如何将Python打包后的exe还原成.py?
将python打包好的exe解压为py文件,步骤如下:下载pyinstxtractor.py文件下载地址:https://nchc.dl.sourceforge.net/project/pyinstallerextractor/dist/pyinstxtractor.py并将pyinstxtractor.py放到和exe相同的目录文件下打开命令控制台cd 进…...
![](https://www.ngui.cc/images/no-images.jpg)
CJSON简单介绍
json简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集,最新的定义可以参考ECMA-404_2nd_ed…...
![](https://img-blog.csdnimg.cn/7247955a5a244f028decd9b02f548d8b.jpeg#pic_center)
算法训练营 day49 动态规划 爬楼梯 (进阶)零钱兑换 完全平方数
算法训练营 day49 动态规划 爬楼梯 (进阶)零钱兑换 完全平方数 爬楼梯 (进阶) 70. 爬楼梯 - 力扣(LeetCode) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同…...
![](https://img-blog.csdnimg.cn/4c70ed74621642cfae2b18c3c973a952.png)
Vue:extends继承组件复用性
提到extends继承,最先想到的可能是ES6中的class、TS中的interface、面向对象编程语言中中的类和接口概念等等,但是我们今天的关注点在于:如何在Vue中使用extends继承特性。 目录 Vue:创建Vue实例的方式 构造函数方式࿱…...
![](https://www.ngui.cc/images/no-images.jpg)
ChatGPT 的一些思考
最近 ChatGPT3.5 在全世界范围内掀起了一次 AI 的潮流,ChatGPT1.0/ChatGPT2.0 当时也是比较火爆,但是那个当时感觉还是比较初级的应用,相当于是一个进阶版的微软小冰,给人的感觉是有一点智能,但不多。其实从早期版本开…...
![](https://img-blog.csdnimg.cn/046d15ec821d472695f245a2e5f413ca.png)
GEE学习笔记 六十九:【GEE之Python版教程三】Python基础编程一
环境配置完成后,那么可以开始正式讲解编程知识。之前我在文章中也讲过,GEE的python版接口它是依赖python语言的。目前很多小伙伴是刚开始学习GEE编程,之前或者没有编程基础,或者是没有学习过python。为了照顾这批小伙伴࿰…...
![](https://img-blog.csdnimg.cn/5d453ccd3c95447981103adbeaef2139.png)
大数据全系安装
内容版本号CentOS7.6.1810ZooKeeper3.4.6Hadoop2.9.1HBase1.2.0MySQL5.6.51HIVE2.3.7Sqoop1.4.6flume1.9.0kafka2.8.1scala2.12davinci3.0.1spark2.4.8flink1.13.5 1. 下载CentOS 7镜像 CentOS官网 2. 安装CentOS 7系统——采用虚拟机方式 2.1 新建虚拟机 2.2.1 [依次选择]-&…...
![](https://img-blog.csdnimg.cn/83f0c953daca487f8932b6ff19542df0.png)
stable-diffusion-webui 安装使用
文章目录1.github 下载,按教程运行2.安装python 忘记勾选加入环境变量,自行加入(重启生效)3.环境变量添加后,清理tmp ,venv重新运行4.运行报错,无法升级pip,无法下载包,5…...
![](https://img-blog.csdnimg.cn/b1ae4b8875e24fe0a523c458752f7d45.png#pic_center)
3D点云处理:点云聚类--FEC: Fast Euclidean Clustering for Point Cloud Segmentation
文章目录 聚类结果一、论文内容1.1 Ground Surface Removal1.2 Fast Euclidean Clustering题外:欧几里得聚类Fast Euclidean Clustering二、参考聚类结果 原始代码中采用的是pcl中的搜索方式,替换为另外第三方库,速度得到进一步提升。 一、论文内容 论文中给出的结论:该…...
![](https://www.ngui.cc/images/no-images.jpg)
华为OD机试题 - 射击比赛(JavaScript)| 代码+思路+重要知识点
最近更新的博客 华为OD机试题 - 括号检查(JavaScript) 华为OD机试题 - 最小施肥机能效(JavaScript) 华为OD机试题 - 子序列长度(JavaScript) 华为OD机试题 - 众数和中位数(JavaScript) 华为OD机试题 - 服务依赖(JavaScript) 华为OD机试题 - 字符串加密(JavaScript)…...
![](https://img-blog.csdnimg.cn/img_convert/78165348f36cf13bfa6bdeb81d5ec8e6.png)
流程引擎之Flowable简介
背景Flowable 是一个流行的轻量级的采用 Java 开发的业务流程引擎,通过 Flowable 流程引擎,我们可以部署遵循 BPMN2.0 协议的流程定义(一般为XML文件)文件,并能创建流程实例,查询和访问流程相关的实例与数据…...
![](https://img-blog.csdnimg.cn/62535927ed0c4260943c75e7b157aca0.png)
AcWing:4861. 构造数列、4862. 浇花(C++)
目录 4861. 构造数列 问题描述: 实现代码: 4862. 浇花 问题描述: 实现代码: 4861. 构造数列 问题描述: 我们规定如果一个正整数满足除最高位外其它所有数位均为 00,则称该正整数为圆数。 例如&…...
![](https://img-blog.csdnimg.cn/80248648f0d6427ca8612f9d3bd0ce85.png)
进程的概念
进程的概念 程序的概念 这里说的是一个可执行文件,passive的意思可以理解为我们这个执行文件需要我们进行双击才会被被执行。 双击后,程序入口地址读入寄存器,程序加载入主存,成为一个进程 进程是主动去获取想要的资源࿰…...
![](https://img-blog.csdnimg.cn/img_convert/72e33f336ec66f5c1bd2985e65c3d3f4.png)
自动化测试5年经验,分享一些心得
自动化测试介绍 自动化测试(Automated Testing),是指把以人为驱动的测试行为转化为机器执行的过程。实际上自动化测试往往通过一些测试工具或框架,编写自动化测试用例,来模拟手工测试过程。比如说,在项目迭代过程中,持…...
![](/images/no-images.jpg)
展示型网站建设的标准/做好网络推广的技巧
最近早上地铁上一直看设计模式,代码中却使用不上,今天恰好碰到一个新需求,感觉和发布订阅模式有点相同,借用了一下理念,虽然代码写的很烂,但是还是第一次去试着用设计模式,记录一下成长的第一步…...
![](https://www.oschina.net/img/hot3.png)
自己网站做短链接/电子商务平台
2019独角兽企业重金招聘Python工程师标准>>> 这个不是很麻烦的事情,毕竟Yii已经做了所有的路由的相关事情,我们只需要配置一下路由规则和nginx就可以了,这里介绍三种nginx配置方案,其实不止Yii,大多数的php框架都可以这样配置 方案一 (这个是网上最多的解决方案,y…...
![](http://img1.tuicool.com/U3Mjie.jpg)
婚庆公司怎么找/如何做网站seo排名优化
1.需要的软件 1.1 VS2012 下载地址 百度吧! 1.2 cocos2d-x-3.0rc0.zip下载地址 1.3 CocoStudio_V1.3.0.0.exe 下载地址 1.4 NDK android-ndk-r9d-windows-x86.zip 下载地址 1.5 SDK adt-bundle-windows-x86-20131030.zip 下载地址 1.6 Visual Assist X 10.8.2…...
![](/images/no-images.jpg)
关键词和网站的关系/seo主要做什么
使用rpm命令查询软件包: 1、查询系统中安装的所有RPM包 $ rpm -qa 查询当前linux系统中已经安装的软件包。 例:$ rpm -qa | grep -i x11 | head -3 察看系统中包含x11字符串的前3行软件包。 2、查询软件包是否安装 $ rpm –q rpm包名称 察看系统中指定软…...
![](https://upload-images.jianshu.io/upload_images/6302559-1dc2281fd582a2c3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
免费咨询身高发育/google seo
开篇 这篇文章的目的是讲解RM Executor模块当中一些通用的方法,这些方法在各个Executor的父类当中实现的,各个子类Executor模块都会复用,因此抽取出来统一的进行讲解。 个人是认为抽取通用的内容放在一篇文章讲解完后可以针对每类Executor讲解…...
![](https://img-blog.csdnimg.cn/1ddd56e8cd734770a8ea5965f91d7596.png)
介休市政府门户网站公布/湘潭关键词优化服务
1、bootz 80800000 - 83000000 注意‘-’左右是有空格的!要不然会一直卡在start kernel上!!! 2、insmod提示version magic 4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 should be 4.1.15-gbedf008 SMP preempt mod_u…...