API接口自动化学习总结

news2025/3/20 9:29:36

视频:python 做 API接口测试 和 自动化 - 1周入门_哔哩哔哩_bilibili

资料:HTTP协议 - 白月黑羽

要学习接口自动化,先要知道http协议和requests库,后面则是接口手工测试和接口自动化测试。

HTTP协议:

HTTP协议简介:

HTTP 协议 全称是 超文本传输协议, HTTP 协议最大的特点是 通讯双方 分为 客户端 和 服务端 。

HTTP请求消息:

解读下面两个请求消息,分别是get请求和post请求。

GET /mgr/login.html HTTP/1.1
Host: www.baiyueheiyu.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
POST /api/medicine HTTP/1.1
Host: www.baiyueheiyu.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate

name=qingmeisu&sn=099877883837&desc=qingmeisuyaopin

请求行 request line:是第一行,里面包含了3部分信息: 请求的方法,操作资源的地址, 协议的版本号。

常见的HTTP 请求方法包括:GET,从服务器 获取 资源信息,这是一种最常见的请求。

POST,添加 资源信息 到 服务器进行处理(例如提交表单或者上传文件)。

PUT,请求服务器 更新 资源信息 。 更新 用户姓名、地址 等等

DELETE,请求服务器 删除 资源信息 。比如 要 删除 某个用户、某个药品 等等

什么是url参数?https://www.baidu.com/s?wd=iphone&rsv_spt=1
问号后面的部分 wd=iphone&rsv_spt=1 就是 url 参数,前面是url,每个参数之间是用 & 隔开的。

请求头 request headers:请求头是http请求行下面的 的内容,里面存放 一些 信息。单个请求头的 格式是: 名字: 值  。就是第二行!

消息体 message body:添加、修改的数据信息 通常都是 存放在 请求消息体 中的。WEB API 请求消息体 通常是某种格式的文本,常见的有

  • Json
  • Xml
  • www-form-urlencoded

HTTP响应消息:

HTTP/1.1 200 OK
Date: Thu, 19 Sep 2019 08:08:27 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
Content-Length: 37
X-Frame-Options: SAMEORIGIN
Vary: Cookie

{"ret": 0, "retlist": [], "total": 0}

状态行 status line:状态行在第一行,包含3个部分:协议版本,就是 HTTP/1.1状态码,就是 200描述状态的短语,就是 OK。

常见的状态码有如下几种:

• 2xx:通常 表示请求消息 没有问题,而且 服务器 也正确处理了

• 3xx:这是重定向响应,常见的值是 301,302, 表示客户端的这个请求的url地址已经改变了, 需要 客户端 重新发起一个 请求 到另外的一个url。

• 4xx:表示客户端请求有错误, 常见的值有:400 Bad Request 表示客户端请求不符合接口要求,比如格式完全错误
401 Unauthorized 表示客户端需要先认证才能发送次请求
403 Forbidden 表示客户端没有权限要求服务器处理这样的请求, 比如普通用户请求删除别人账号等
404 Not Found 表示客户端请求的url 不存在

• 5xx:表示服务端在处理请求中,发生了未知的错误。通常是服务端的代码设计问题,或者是服务端子系统出了故障(比如数据库服务宕机了)

响应头 response headers:响应头 是 响应状态行下面的 的内容,里面存放 一些 信息。 作用 和 格式 与请求头类似,即HOST:www.baidu.com这种类似。是第二行。

消息体 message body:和请求消息体一样,WEB API 响应消息体 通常也是某种格式的文本,常见的有:

  • Json
  • Xml
  • www-form-urlencoded

接口测试概述:

接口测试(或者API接口测试),其实就是 对 软件系统 消息交互接口 的测试。

接口测试就是

  • 依据接口规范,写出测试用例,

  • 使用软件工具,直接通过消息接口 对 被测系统 进行消息收发

  • 验证被测系统行为是否正确。

基于 HTTP 的接口测试工具, 常见的 有 Postman、Jmeter等。熟悉 Python 语言, 也完全可以使用 requests 库,自己写代码发送接收HTTP请求,进行测试。

接口测试工作:

接口测试工作,主要包括

  • 获取接口文档,评审文档,了解接口的实现细节

  • 根据接口文档,写出测试用例,

  • 等产品发布后,根据测试用例,使用软件工具,直接通过消息接口 对 被测系统 进行消息收发,验证被测系统行为是否正确

评审 接口文档:接口文档 通常 是由 开发人员提供, 测试人员 根据接口文档编写接口测试用例。

由于开发人员写的接口文档可能存在模糊,错误甚至自相矛盾的情况,所以在写测试用例之前,必须要先对接口文档进行评审,找出里面的问题,和 文档作者进行沟通 ,确保接口文档 基本正确、完善,然后才能动手写测试用例。

编写测试用例

此处有项目要求,最好自己试一试!

requests库 和 session:

具有Python编程的基础了,只需要花1天时间 学习一个库:requests,就可以轻松的自己开发测试工具 收发 HTTP消息。或者使用市面上存在的工具:postman、jemeter。

Requests库简介:

Requests 库 是用来发送HTTP请求,接收HTTP响应的一个Python库。

安装:

执行命令 pip install requests 。Requests可以很方便的发送HTTP请求给服务器。

抓包工具 fiddler:

在做接口测试的时候, 经常需要用到 抓包工具 ,来查看具体的发送的请求消息,和接收的响应消息。fiddler 是 代理式 抓包。fiddler 启动后,会启动一个代理服务器(同时设置自己作为系统代理),监听在 8888 端口上。

需要安装,自己从网上找资源下载即可。安装好以后,通常我们需要设置一下抓包过滤项,否则抓到的包太多,不方便分析。

要 根据目标主机地址过滤 HTTP消息, 在上图所示 左边的红色箭头处, 选择 show only the following hosts

然后,在下边的方框,里面填写要抓取的HTTP消息的目标地址, 可以使用* 作为通配符

localhost; 127.0.0.1;*.sohu.com

然后再点击右边 标签栏里面的 Inspectors 标签,即可进行查看。右边 上半区 对应的请求消息的内容, 右边下半区对应的是响应消息的内容。

浏览器抓包:浏览器可以通过其代理配置,指定使用fiddler作为代理,从而让fiddler抓到包。但是浏览器本身F12打开的开发者窗口,就可以很方便的看到HTTP消息,所以不需要fiddler抓包。

requests程序抓包:要让requests 发送请求使用代理,只需要如下参数进行设定即可

import requests

proxies = {
  'http': 'http://127.0.0.1:8888',
  'https': 'http://127.0.0.1:8888',
}

response = requests.get('http://mirrors.sohu.com/', proxies=proxies)
print(response.text)

手机抓包:进行 API 接口测试的时候,可能需要抓 手机App 和 web服务之间的 HTTP消息,需要设置手机使用 fiddler作为代理。首先确保 手机使用的 WIFI 和 运行fiddler的电脑 必须使用同一个子网。

然后 需要设置fidder, 允许远程机器连接自己,点击菜单option,点击connections标签,勾选 Allow remote computer to connect, 

构建HTTP请求:

使用Requests发送HTTP请求,url里面的参数,通常可以直接写在url里面,比如

response = requests.get('https://www.baidu.com/s?wd=iphone&rsv_spt=1')

构建请求消息头:(第三行!!)每个消息头也就是一种 键值对的格式存放数据,如下所示

user-agent: my-app/0.0.1
auth-type: jwt-token

Requests发送这样的数据,只需要将这些键值对的数据填入一个字典。然后使用post方法的时候,指定参数 headers 的值为这个字典就可以了。然后使用post方法的时候,指定参数 headers 的值为这个字典就可以了,如下

headers = {
    'user-agent': 'my-app/0.0.1', 
    'auth-type': 'jwt-token'
}

r = requests.post("http://httpbin.org/post", headers=headers)
print(r.text)

构建请求消息体:http 的 消息体就是一串字节,里面包含了一些信息。这些信息可能是文本,比如html网页作为消息体,也可能是视频、音频等信息。消息体基本都是文本,文本的格式主要是这3种: urlencoded ,json , XML。一般都是json格式消息体

Content-Type: application/x-www-form-urlencoded

json 格式消息体:json 是一种表示数据的语法格式。 它和Python 表示数据的语法非常像。

构建一个json 格式的字符串:可以使用json库的dumps方法,如下

import requests,json

payload = {
    "Overall":"良好",
    "Progress":"30%",
    "Problems":[
        {
            "No" : 1,
            "desc": "问题1...."
        },
        {
            "No" : 2,
            "desc": "问题2...."
        },
    ]
}

r = requests.post("http://httpbin.org/post", data=json.dumps(payload))

也可以将 数据对象 直接 传递给post方法的 json参数,如下

r = requests.post("http://httpbin.org/post", json=payload)

检查HTTP响应:

检查响应状态码:要检查 HTTP 响应 的状态码,直接 通过 reponse对象的 status_code 属性获取

检查响应消息头:要检查 HTTP 响应 的消息头,直接 通过 reponse对象的 headers 属性获取

检查响应消息体:要获取响应的消息体的文本内容,直接通过response对象 的 text 属性即可获取

 

session机制:

session就是一个数据结构,保存该客户这次登录操作相关信息。同时创建一个唯一的sessionid(就是一个字符串),标志这个session。服务端是通过 HTTP的响应头 Set-Cookie 把产生的 sessionid 告诉客户端的。

接口手工测试:

接口自动化测试;

暂时跳过,可以尝试做一下这个接口,仍然需要另外学习Fiddler、postman接口测试。

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

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

相关文章

1. 环境准备

安装CentOS 7 配置网络 默认网络是NAT 端口转发 更改/etc/sysconfig/network-scripts/ifcfg-ens33 修改以下内容: BOOTPROTOstatic 启用静态IP地址 ONBOOTyes 开启自动启用网络连接 添加以下内容: IPADDR192.168.30.100 设置IP地址 NETMASK255.25…

【链表】一文搞定链表算法:从基础到实战

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言例题一、两数相加二、两两交换链表中的节点三、重排链表四、合并K个升序链表五、 K个⼀组翻转链表 结语 前言 什么是链表算法: 链表算法&#xff0…

瑞萨RA系列使用JLink RTT Viewer输出调试信息

引言 还在用UART调试程序么?试试JLINK的RTT Viewer吧!不需占用UART端口、低资源暂用、实时性高延时微秒级,这么好的工具还有什么理由不用了! 目录 一、JLink RTT Viewer 简介 二、软件安装 三、工程应用 3.1 SEGGER_RTT驱动包 3.2 手搓宏定义APP_PRINT 3.3 使用APP_…

DEFI币生态重构加速,XBIT去中心化交易所引领DEX安全新范式

2025年3月18日,全球加密市场在监管与技术共振下迎来结构性变革。去中心化金融(DeFi)代币DEFI币因跨链流动性协议升级引发社区热议,而币应XBIT去中心化交易所(以下简称XBIT)凭借其链上透明验证机制、无需下载…

13 IO流:字节流、字符流、缓冲流、文件复制(字节/字符/缓冲区)、字符转换流、打印流、IO框架(黑马Java视频笔记)

文章目录 IO流 >> 读写数据的方案1. 认识IO流1)IO流的分类2)IO流的体系 2. 文件字节输入流2.1 创建文件字节流对象2.2 读取文件1)使用read()方法一个一个字节的读取2)使用字节数组读取数据:byte[]3)使用字节流读…

靶场(十四)---小白心得思路分享---Extplorer

启程: 开始扫描端口服务,发现什么都没有,果断进行下一步目录扫描 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 98:4e:5d:e1:e6:97:29:6f:…

逆向中常见的加密算法识别

1、base64及换表 base64主要是将输入的每3字节(共24bit)按照每六比特分成一组,变成4个小于64的索引值,然后通过一个索引表得到4个可见的字符。 索引表为一个64字节的字符串,如果在代码中发现引用了这个索引表“ABCDEF…

Linux上的`i2c-tools`工具集的编译构建和安装

源码复制到Ubuntu系统中并解压 的i2c-tools工具集的源码百度网盘下载链接: https://pan.baidu.com/s/1XNuMuT1auT1dMzYo3LAFmw?pwdi6xe 终端进入源码目录 cd /home/book/mybuild/i2c-tools-4.2执行编译构建命令 运行下面的命令进行编译构建 make CC${CROSS_COM…

langgraph简单Demo(使用langserve实现外部调用)

前言 这个示例是研究如何使用langserve实现外部调用 接入大模型参考文章:接入阿里云百炼 1、安装依赖 pip install langserve fastapi uvicorn pip install sse_starlette 2、代码实现 from fastapi import FastAPI from langchain_core.messages import HumanM…

折叠树报表

折叠树报表中包含了三种信息: 1.树组织信息-可展开、收拢 2.节点的统计信息(汇总求和) 3.每个节点对应的数据信息 一、准备数据 mysql8 数据库中存在两张表 org和store表。 org表和部分数据如下,其中orgname是组织的名称,codepath是完整的组织代码,seq是每个节点的顺序,可…

Python个人学习笔记(16):模块(os)

四、os模块 主要用于文件夹处理 (一)文件夹相关 os.makedirs(‘dirname1/dirname2’) :创建文件夹目录,不能重复创建,用的多 代码: os.makedirs(a/b/c)结果: os.removedirs(‘dirname1’)&…

虚拟地址空间(下)进程地址空间(上)

一.关于页表组成 1.权限(rwx) 作用:如1.让代码区变成只读的 2.写时拷贝的实现:子进程创建时其页表指向的父进程代码和数据权限都是只读的,子进程试图修改,触发错误,系统开始写时拷贝。 来源:…

【数据集分享】青藏高原两次强震玛多地震和漾濞地震的震源过程

2021年5月21日,5小时内在青藏高原不同区域发生了漾濞6.4级和玛多7.4级强烈地震,表明印度板块和欧亚大陆板块的碰撞汇聚作用下青藏高原持续和频繁的 剧烈构造运动和地震活动。本研究利用地震记录和空间对地观测同震位移资料(InSAR)…

jmeter环境搭建及使用

Meter 是一个开源的性能测试工具,用于测试静态和动态资源的性能。 1、安装 官网下载: 下载地址:Apache JMeter - Download Apache JMeter 网盘下载: 通过百度网盘分享的文件:apache-jmeter-5.6.3.rar 链接&#x…

Python 鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

yum软件包乾坤大挪移(Yum Package Qiankun Great Migration)

yum软件包乾坤大挪移 背景 由于很多的生产环境是无法连接外网的,因此用yum或者dnf命令来安装软件包常常是一个比较麻烦的事情,原因是很多软件的依赖很复杂,如果要一个个下载、拷贝、再安装,这往往是一个非常繁琐冗杂的过程&…

Java:读取中文,read方法

public static void main(String[] args) throws IOException {FileReader fr new FileReader("C:\\aaa\\a.txt");//字符流的底层也是一个字节一个字节读取的,遇到中文就一次读多个,GBK一次读两个,UTF-8一次读三个字节//idea默认U…

英语词性--数词

文章目录 数词概念数词分词基数词序数词 基数与序数词的区别基变序的规律 数词概念 数词(Numerals) 是英语中用于表示 数量(基数)或顺序(序数) 的词类,通常用于描述数字、计数、顺序等。 例如&…

Linux 一步部署DHCP服务

#!/bin/bash #脚本作者和日期 #author: PEI #date: 20250319 #检查root权限 if [ "$USER" ! "root" ]; then echo "错误:非root用户,权限不足!" exit 0 fi #防火墙与高级权限 systemctl stop firewa…

如何打造安全稳定的亚马逊采购测评自养号下单系统?

在当今的电商领域,亚马逊作为全球领先的在线购物平台,其商品种类繁多,用户基数庞大,成为了众多商家和消费者的首选。而对于一些需要进行商品测评或市场调研的用户来说,拥有一个稳定、安全的亚马逊账号体系显得尤为重要…