吐血整理,接口自动化测试-接口依赖/上传接口处理(项目实例)

news2025/1/21 15:43:08

目录:导读

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


前言

常见的两种接口依赖处理方式

1、请求体的字段依赖
这种情况多数是在当前测试的接口,它的前置接口的请求体中的字段要拿来在当前的接口请求体中继续使用。

比如修改用户信息的接口,该接口会使用到用户名的字段,该字段是由创建用户时的请求体中传入的,创建用户的接口请求体我们做了参数化,让它动态生成用户名。

因为每次都是变化的,则当执行到修改用户信息的接口时,如果我们依然使用上个接口的参数化,势必会导致两者的用户名不一样,因此会导致接口执行失败,所以我们要对这种类型的接口进行接口依赖处理

B1

我们直接在测试类的代码中处理接口依赖:

if case["check_info"] == 'user_info':
	user_name = json.loads(new_data)['name']
	case_logger.info("{:-^50s}".format(f"user_name:{user_name}"))
	setattr(do_re, 'user_name', user_name)

2、响应体的字段依赖
将响应体的字段拿来用在下一个接口的这种方式,在接口依赖中依然很常见,往往上一个接口为get类型的查询接口,我们从该接口的响应体中取对应的字段拿到下一个接口的请求体中使用。

B2

我们直接在测试类的代码中处理接口依赖:

if case["check_info"] == 'get_op_svc_servicestage_domainId':
	op_svc_servicestage_domainId = res.json()['user']['domain']['id']
	case_logger.info("{:-^50s}".format(f"op_svc_servicestage_domainId:{op_svc_servicestage_domainId}"))
	setattr(do_re, 'op_svc_servicestage_domainId', op_svc_servicestage_domainId)

处理需要上传文件的类型接口

1、接口分析
这里直接在前端进行上传,通过Chrome浏览器的F12开发工具进行抓包,可以看到上传文件接口的请求与相应信息,因为是公司的项目接口,会做一些马赛克处理:

B3

再看看请求参数:

B4

我们可以从请求中看到,请求方式为multipart/form-data表单格式,并且注意到,虽然上传了文件,但是请求参数中并没有展示文件路径和文件名,而且fileList值为“binary”,那么可以知道上传的为文件的字节内容

2、postman示例
以postman示例,body选择form-data选项,key填入fileList[]并选择格式为file,在value中选择一个本地文件进行上传,然后发起请求:

B5

3、requests示例
刚刚我们借助工具实现了上传文件的请求,postman中可以将我们的请求转化为python代码格式。

具体步骤如下:
先使用postman构建好参数并调试成功;
点击Save按钮下方的Code;

B6

选择语言为Python - Requests后复制代码

B7

将复制后的代码粘贴到Pycharm或者VS code的开发工具中运行即可

import os
import requests

from Commons.constants import UPLOAD_DIR

url = "https://接口地址/1.0/product/style-gallery"

payload = {}
files = [
    ('fileList[]', open(os.path.join(UPLOAD_DIR, 'stylegallery.png'), 'rb'))
]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text.encode('utf8'))

至此就完成了文件上传接口的处理,后续进行测试或者接口自动化在此基础上进行二次开发即可

4、解决方法二
如果上面的方式并不能解决问题,那么再采用第二种方法,基本就不会有问题。

我们先来看看上传文件的请求内容:

B9

接下来,给requests库的请求参数files的值套用以下模板:

files = {
            '${name}': ('${filename}', open( '${filepath}', 'rb'), '${Content-Type}')
        }

${name}:即name的值"fileList[0]"
${filename}:即filename的值"a.jpg"
${filepath}:filename的文件路径
${Content-Type}:即Content-Type的值"image/jpeg"
将模板对应的变量替换为实际值,得到:

files = {
            'fileList[0]': ('a.jpg', open(os.path.join(UPLOAD_DIR, 'a.jpg'), 'rb'), 'image/jpeg')
        }

注意:要确认文件路径是否正确,我这里使用了相对路径,然后将files传递给requests的对应方法上即可。

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

不经历风雨,怎能见彩虹;不经历磨炼,怎能成巨匠。坚持梦想,追求卓越,奋斗的脚步永不停歇。在每个黎明前,都有辉煌等待。

奋斗如同磨刀石,磨砺出锋芒;努力如同阳光,照亮前行。不畏挑战,追求卓越,只有坚持不懈地执着奋斗,方能超越自我,绽放人生的辉煌,让梦想在奋斗的征途中闪耀不息!

奋斗的旅途上,不要畏惧失败,因为每一次跌倒都是站起来更坚强的机会;不要追求完美,因为成长正是在一次次的尝试中积累。只要心怀勇气与坚持,坚定地迈向梦想。

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

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

相关文章

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…

什么是前端框架?怎么学习? - 易智编译EaseEditing

前端框架是一种用于开发Web应用程序界面的工具集合,它提供了一系列预定义的代码和结构,以简化开发过程并提高效率。 前端框架通常包括HTML、CSS和JavaScript的库和工具,用于构建交互式、动态和响应式的用户界面。 学习前端框架可以让您更高效…

Centos8安装docker并配置Kali Linux图形化界面

鉴于目前网上没有完整的好用的docker安装kali桌面连接的教程,所以我想做一个。 准备工作 麻了,这服务器供应商提供的镜像是真的纯净,纯净到啥都没有。 问题一:Centos8源有问题 Error: Failed to download metadata for repo ap…

Redis基础概念和数据类型详解

目录 1.什么是Redis? 2.为什么要使用Redis? 3.Redis为什么这么快? 4.Redis的使用场景有哪些? 5.Redis的基本数据类型 5.1 5种基础数据类型 5.1.1 String字符串 5.1.2 List列表 5.1.3 Set集合 5.1.4 Hash散列 5.1.5 Zset有序集…

【hive】hive分桶表的学习

hive分桶表的学习 前言: 每一个表或者分区,hive都可以进一步组织成桶,桶是更细粒度的数据划分,他本质不会改变表或分区的目录组织方式,他会改变数据在文件中的分布方式。 分桶规则: 对分桶字段值进行哈…

玩转 VS code 之下载篇

VSCode 简介 Visual Studio Code (简称 VS Code / VSC),是2015 年由微软公司推出的一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、GIT 等特性,支持插件扩展等等 可用于 Windows,ma…

使用 Visual Studio GoogleTest编写 C/C++ 单元测试——入门篇

入门教程 Visual Studio 新建 GoogleTest项目,一路选默认参数 pch.h #pragma once#include "gtest/gtest.h"int add(int a, int b);pch.cpp #include "pch.h"int add(int a, int b) {return a b; }test.cpp #include "pch.h"TES…

LoRA微调方法详解

本文要介绍的是大模型的微调训练方法之一----LoRA。 0 背景 现在大模型非常火爆,大家都在想方设法应用大模型。 当前很多大模型虽说可以zero-shot直接使用, 但是在具体应用上一般还是微调一下效果更好, 也就是常说的finetune。 在小模型时代…

栈存储结构详解

目录 栈存储结构详解 进栈和出栈 栈的具体实现 栈的应用 什么是队列(队列存储结构) 栈存储结构详解 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图 1 所示。 图 1 栈存储结构示意…

【string】基本用法

目录 前言: string常用接口 一、string的创建,拼接与拷贝构造 1.创建 2.拼接 3.拷贝构造 二、string遍历 方式一:operator[ ]重载 方式二:迭代器 1.正向迭代器: 2.反向迭代器 3.const正向迭代器 4.const反向迭代器 方式三&#…

PyQt5资源的加载和使用,即如何使用Pyrcc

1、打开QtDesigner,选择编辑资源 2、新建资源文件,随便找个地方保存 3、按照自己的喜好命名,然后添加资源 4、保存并退出 5、我们创建一个QLabel,在这里添加资源 6、我们保存界面文件,并编译为py文件,然后…

【C语言】调试技巧

目录 一、什么是bug? 二、调试 1.一般调试的步骤 2.Debug 和 Release 三、调试环境准备 四、调试时要查看的信息 1.查看临时变量的值 2.查看内存信息 3.查看调用堆栈 4.查看反汇编信息 5.查看寄存器 五、练习 六、常见的coding技巧 七、const的作用 八、编程常见…

时序预测 | MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于RF随机森林的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基于RF随机森林的时间序列预测-递归预测未来…

Linux命令200例:kill用来终止或者结束进程(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

服务链路追踪

一、基础概念 1.背景 对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如: 如何串联整个调用链路,快速定位问题?如何理清各个微服务之间的依赖关系?如何进行各个微服…

uniapp-微信小程序篇

uniapp-微信小程序篇 一、创建项目(以Vue3TS 项目为示例) 可以通过命令行的方式创建也可以通过HBuilderX进行创建(通过HBuilderX创建的项目建议选择最简单的模板),个人建议使用命令行方式。 (1) 命令行方式: npx degit dcloudio…

WebRTC音视频通话-WebRTC视频自定义RTCVideoCapturer相机

WebRTC音视频通话-WebRTC视频自定义RTCVideoCapturer相机 在之前已经实现了WebRTC调用ossrs服务,实现直播视频通话功能。但是在使用过程中,RTCCameraVideoCapturer类提供的方法不能修改及调节相机的灯光等设置,那就需要自定义RTCVideoCaptur…

认识excel篇2之如何快速输入数据

一、快速输入数据(快捷键功能的使用) 1、鼠标左键填充:复制填充、等差序列填充(行、列是一样的) 步骤:选中单元格,鼠标放置到单元格右下角待鼠标箭头变成实心十字架,左键向下拖拽&…

List和ObservableCollection和ListBinding在MVVM模式下的对比

List和ObservableCollection和ListBinding在MVVM模式下的对比 List 当对List进行增删操作后,并不会对View进行通知。 //Employee public class Employee : INotifyPropertyChanged {public event PropertyChangedEventHandler? PropertyChanged;public string N…