接口自动化测试

news2025/1/11 22:59:38

接口自动化测试

  • 1.基础知识
    • 1.接口测试原理
    • 2.接口测试点及用例设计方法
    • 3.接口测试返回值的处理
    • 4.接口测试要点
    • 5.常见HTTP状态码
    • 6.HTTP基础知识
    • 7.接口自动化测试工具
  • 2.抓包工具
    • 1.chrom抓包
    • 2.Fiddle抓包(PC端,手机端)
      • 1.原理
      • 2.下载安装
      • 3. 认识界面
  • 3.Request库
    • 1.利用requests发送get请求
    • 2.利用requests发送get请求+参数
    • 3.利用requests发送post请求
    • 4.在post请求中以json方式传递参数
    • 5.添加或者修改headers信息
    • 6.在请求头中添加cookie信息
    • 7.利用session对象保持会话状态
    • 8.利用requests上传和下载文件
    • 9.加密接口测试
    • 10.接口参数关联

1.基础知识

1.接口测试原理

接口测试的原理就是模拟客户端向服务器发送请求,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的过程。

2.接口测试点及用例设计方法

接口测试采用的方法其实与黑盒测试一致的,甚至可以把接口测试理解为没有界面的功能测试。只不过接口测试的关注点主要在请求和响应上。另外,还包括接口的安全接口的性能等。常用的用例设计有等价类,边界值法等。
一般测试用例的设计要从单接口参数的校验到整个业务功能点的验证,还可以验证一些安全性和异常情况。
在这里插入图片描述

3.接口测试返回值的处理

  • 为什么我们需要关心接口返回的响应值
    原因:我们需要对返回的响应内容进行断言,从而验证接口工作是否正常。

  • 接口响应内容的形式?
    主要有三种形式:JSON格式的字符串;HTML源码;程序员自定义的字符串。

  • 主要的处理方式?
    处理方式1:正则表达式来进行处理,这种方法适合以上三种响应内容形式。
    处理方式2:lxml库进行处理,这种方式仅针对返回内容是HTML源码形式的。
    处理方式3:直接使用requests库自带的json方法进行处理,这种方式仅针对返回内容是json形式的。

  • 正则表达式
    获取指定内容最常用的一个正则表达式.*?的使用。

4.接口测试要点

  • 检查接口返回的数据是否与预期结果一致。
  • 接口测试结果检查通常需要通过SQL语句从数据库内进行查询确认。
  • 检查接口的容错性,假如传递数据的类型错误时是否可以处理。
  • 接口参数的边界值,例如传递的参数足够大或为负数时,接口是否可以正常处理。
  • 接口的性能,http请求接口大多与后端执行的SQL语句性能,算法等比较相关。
  • 接口的安全性,外部调用的接口尤为重要,一般每个接口都要进行鉴权验证。

5.常见HTTP状态码

状态码含义
1**临时响应并需要请求者继续执行操作
2**请求成功。操作被成功接收并处理
3**重定向代码,用于已经移动的文件并且在头信息中指定新的地址信息
4**客户端错误,请求包含语法错误或者无法完成请求
5**服务器错误,服务器在处理请求的过程中发生错误

比如:
200 服务器成功处理请求
404 未找到资源
410 找到资源,但现在已不存在
500 内部服务器错误
503 服务器目前无法为请求提高服务
302 临时重定向
304 客户端的缓存资源时最新的,要客户端使用缓存

6.HTTP基础知识

  • DNS:Domain Name Server 域名服务器
    http:// www.baidu.com: 80/ adv_search? w=py&order=false# tag
    在这里插入图片描述

  • HTTP报文格式分为两种

请求报文:请求行,请求头部,回车换行,消息体
响应报文:状态行,响应头部,回车换行,消息体

HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S架构)。HTTP协议永远都是客户端发起请求,服务器回送响应。B/S架构又叫浏览器/服务器模型,严格意义上说,这个B不仅仅只是浏览器,凡是能够发生HTTP请求的对象或者工具,都可以叫做客户端。

  • HTTP请求组成部分

URL地址,请求参数(可选),请求头,请求体(仅限POST请求)
对于响应内容部分,主要关注两个点:响应状态码,响应内容

  • HTTP工作过程

    1. 浏览器输入
    2. dns域名解析:域名与IP映射(第一次访问去DNS找对应IP,不是第一次访问则本机存有IP)
    3. 建立tcp连接(三次握手)
    4. 发送http request:请求信息
    5. web服务器接收请求
    6. 应用服务器处理业务逻辑
    7. 关闭tcp连接:请求响应完成。如果浏览器在其头部信息中加入了connection:keep-alive,则tcp连接将任然保持打开状态。
    8. 浏览器:渲染响应页面
  • Get和Post
    Get:从服务器端获取资源或数据
    Post:向服务器端提交数据
    Get和Post的区别:
    1)Get请求一般用于向服务器请求获取一个资源,没有副作用,一般会在客户端做缓存。Post请求一般用于向服务器提交数据并让其去完成一件事,所以这个操作是有副作用的,不会在客户端做缓存,
    2)Get请求发送数据的时候,一般会将请求数据放在url字符串中发送给服务器端,所以从安全性角度来看相对没有Post请求安全性搞,所以get请求一般不会用于比较隐私数据的传输。而Post请求时将请求数据放在请求体body里面,所以一般用于表单数据,登录数据等数据的传输。

7.接口自动化测试工具

  • Jmeter

  • Apifox

  • postman

2.抓包工具

1.chrom抓包

右键-》检查-》找到网络
在这里插入图片描述

2.Fiddle抓包(PC端,手机端)

1.原理

Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据。在打开它的那一瞬间,它就已经设置好了浏览器的代理了。当你关闭的时候,它又帮你把代理还原了。在这里插入图片描述

2.下载安装

官网下载:https://www.telerik.com/fiddler
按照指示填写,下载,然后傻瓜式安装,一直点击是就可以安装成功。

3. 认识界面

  • 抓取数据信息说明

在这里插入图片描述

名称含义
#抓取HTTP Request的顺序,图标表示请求状态和响应状态
ResultHTTP状态码 (重点关注)
Protocol请求使用的协议,常用HTTP,HTTPS
Host请求地址的主机名
URL请求资源的位置
Body请求的大小
Caching请求的缓存过期时间或者缓存控制值
Content-Type请求响应的类型
Process发送此请求的进程:进程ID
Comments允许用户为此回话添加备注
Custom允许用户设置自定义值

要访问HTTPS协议需要设置一下:Tools –> Fiddler Options ,选择HTTPS,勾选Decrypt HTTPS TrafficDecrypt,然后后面弹出的窗口都点击yes/是,点击Actions,最后点击OK

  • 数据详细字段说明

在这里插入图片描述

名称含义
Statistics请求的性能数据分析
Inspectors查看数据内容(常用)
AutoResponder允许拦截指定规则的请求
Composer自定义请求发送服务器
Filters请求过滤规则(常用)
Timeline请求响应时间
  • 过滤

过滤最常用,过滤掉不需要的抓包数据,只显示自己需要的,这样看起来会方便很多。

1)过滤方式一:
在这里插入图片描述
2)过滤方式二:
?+字符串
在这里插入图片描述
@+host
在这里插入图片描述

=+状态码
在这里插入图片描述

3.Request库

安装Requests库:pip install requests

1.利用requests发送get请求

import requests

def test1():
    resp = requests.get('http://www.taobao.com')
    print(resp.status_code)  # 响应的状态码信息
    print(resp.text)  # 获取响应对象的文本信息
    print(resp.url)  # 获取响应对象所对应的请求地址

if __name__ == '__main__':
    test1()

2.利用requests发送get请求+参数

import requests

# 直接在url上添加请求参数
def test1():
    resp = requests.get('https://baidu.com/s?wd=python')  # 自动在url后面添加参数
    print(resp.text)
    
# get请求+参数
def test2():
    data = {
        'wd': 'python',
    }  # 请求参数
    resp = requests.get('https://baidu.com/s', params=data)  # 自动在url后面添加参数
    print(resp.text)

if __name__ == '__main__':
    test2()

3.利用requests发送post请求

import requests

def test1():
    resp = requests.post('https://ynuf.aliapp.org/service/um.json?_bx-v=2.0.31')
    print(resp.status_code)  # 响应的状态码信息
    print(resp.text)  # 获取响应对象的文本信息
    print(resp.url)  # 获取响应对象所对应的请求地址

if __name__ == '__main__':
    test1()

4.在post请求中以json方式传递参数

import requests

# 以json格式传
def test1():
    data = {"username": "test", "password": "123", "age": 18, "phone": 1588888888}  # 字典格式是json
    resp = requests.post('', json=data)
    print(resp.text)

if __name__ == '__main__':
    test1()

5.添加或者修改headers信息

如果浏览器访问,响应正常,如果不是浏览器来访问,爬虫会代码访问,则响应不正常。这个需要用到headers信息。

import requests

# 含有header访问才能跟浏览器访问显示一样的
def test1():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
    }
    resp = requests.get('', headers=headers)
    print(resp.text)

if __name__ == '__main__':
    test1()

6.在请求头中添加cookie信息

import requests

# 绕过登录,想要获取登录之后的信息,需要带上Cookie
def test1():
    headers = {
        'Cookie': ''  # 每次都要更新
    }
    resp = requests.get('', headers=headers)
    print(resp.text)

if __name__ == '__main__':
    test1()

7.利用session对象保持会话状态

需要登录才能访问的接口,对于这种一定要使用session会话来帮助保存会话信息

import requests

# 利用session保持会话状态
def test1():
    sess = requests.Session()  # 创建一个session会话对象,帮助我们保存客户端的会话信息
    data = {
        'username': 'admin',
        'password': 'admin123'
    }
    sess.post('', data=data)  # 操作登录
    resp2 = sess.get('')  # 请求登录之后的接口
    print(resp2.text)

if __name__ == '__main__':
    test1()

8.利用requests上传和下载文件

import requests

# 上传文件不带参数
def test1():
    files = {
        'file': open('test.txt', 'rb')
    }
    resp = requests.post('', files=files)
    print(resp.text)
    
# 上传文件带其他参数
def test2():
    data = {
        'batchname': 'GB20210707'  # 抓包的
    }
    files = {
        'batchfile': open('Test.xls', 'rb')
    }
    resp = requests.post('', data=data, files=files)
    print(resp.text)

if __name__ == '__main__':
    test1()

9.加密接口测试

询问开发用的什么加密方法

import requests

# 加密接口请求
def test1():
    uid, name, password, salt = '3', 'qcj', '123456', 'LZ7dYxCj5S68ucAh'
    import hashlib  # 有MD5加密方法
    hl = hashlib.md5()
    hl.update(('{}-{}-{}-{}'.format(uid, name, password, salt)).encode('utf-8'))
    sign = hl.hexdigest()  # 对hl对象中保存的字段进行md5加密算法
    print(sign)
    data = {
        'uid': '3',
        'sign': sign
    }
    resp = requests.post('', json=data)
    print(resp.text)

if __name__ == '__main__':
    test1()

10.接口参数关联

import requests

# 接口参数关联(下一个请求的入参是上一请求的出参)
def test1():
    data = {
        'username': 'qcj',
        'password': '123456'
    }

    resp = requests.post('', data=data)  # 请求第一个接口
    resp_json = resp.json()  # 第一个接口响应的json内容
    auth_token = resp_json['data']  # 提取第一个接口的data出参

    headers = {
        'auth-token': auth_token
    }
    resp = requests.get('', headers=headers)  # 请求第二个接口
    print(resp.text)
    
if __name__ == '__main__':
    test1()

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

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

相关文章

HIbernate多表学习

一,表与表之间关系: 1.一对多:多的表用一个外键存一的表的主键id。 2.多对多:新建第三张表,两个外键分别存两个多的表的主键id。 3.一对一 二,Hibernate一对多练习: 一对多映射配置&#…

国际通用回收标准-GRS、RCS的答疑

【国际通用回收标准-GRS、RCS的答疑】 GRS & RCS 国际通用回收标准 GRS和 RCS是目前现行国际公认的回收材料标准。许多国际知名品牌如 ADDIDAS、3M、PUMA、H&M、NIKE等都是此标准的会员。GRS与 RCS最早开始于纺织产业,用以证明其产品或原料含有一定的回收材…

yolov5剪枝实战4: 正常训练和稀疏化训练

1. 准备自己的数据集 1.1 下载项目文件 准备好备注的数据集进行训练,我这里给出了标注好的足球的数据集。从百度网盘下载到项目目录下并解压,网盘地址见文末 VOCdevkit_ball.ziptestfiles.zipprepare_data.py1.2 解压建立或自行建立数据集 使用PASCAL VOC数据集的目录结构,…

怎么批量把图片转文字?教你几招轻松完成

工作中我们经常要与图片、文字打交道,特别是做资料收集的小伙伴,当收到图片资料的时候,就需要将其输出为文字进行保存,如果是单张的时候我们还可以使用手机或者微信直接拍照识别转,但是图片不止一张的时候,…

nvcc编译器之GPU代码编译(chapter 5)

目录 5. GPU编译 5.1 GPU多代架构 5.2 GPU特性列表 5.3 应用兼容性 5.4 虚拟架构 5.5 虚拟架构特性列表 5.6 兼容性补全机制 5.7 nvcc示例 5. GPU编译 本章描述了由nvcc与CUDA驱动协同维护的GPU编译模型。本文介绍了一些技术部分,并在最后给出了具体的示例…

100家!第一批5G应用解决方案供应商推荐名录

近日,5G应用产业方阵(5G AIA)在“2022年中国5G发展大会5G应用产业发展论坛”发布了“5G应用解决方案供应商推荐名录(第一批)”入库名单,旨在强化5G应用供需对接,推动5G应用解决方案成熟&#xf…

RDD缓存机制及持久化技术

文章目录RDD缓存RDD缓存API介绍RDD缓存代码演示示例RDD缓存执行原理RDD CheckPointCheckPoint代码演示示例CheckPoint与Cache对比RDD缓存 RDD之间进行Transformation计算,当执行开启之后,就会有新的RDD生成,而之前老的RDD就会消失&#xff0…

js逆向基础篇-某音乐网站-xx音乐

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,如有侵权,可联系本文作者删除! 网站链接:aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvc2VhcmNoL20vP3M9JUU1JUE0JUE5JUU0JUI4JThCJnR5cGU9MQ== 案例分析: 搜索歌曲名称,找到列表接口,如上图能看到列表数据的,之后看下传参,…

249 h221 最大岛屿面积

方式1 错误的动态规划 递归公式为 if (matrix[i][j]‘1’&&matrix[i-1][j-1]‘1’){ int edge(int) Math.pow(dp[i][j],0.5); // 边长 int addCount addCount(matrix, i, j, edge); dp[i][j]dp[i-1][j-1]addCount; maxMath.max(max,dp[i][j]); } 只根据 dp[i-1][j-1]…

Dev C++开发环境的配置及使用

标题Dev C开发环境的配置及使用 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔 叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及应用》&#xff0…

免费题库接口

免费题库接口 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点击跳转&a…

[SUCTF 2019]Pythonginx

源码: app.route(/getUrl, methods[GET, POST]) def getUrl():url request.args.get("url")host parse.urlparse(url).hostnameif host suctf.cc:return "我扌 your problem? 111"parts list(urlsplit(url))host parts[1]if host suctf…

[论文评析]Densely Connected Convolutional Networks,CVPR,2017

Densely Connected Convolutional Networks, 文章信息背景与动机DenseNetDense blockDenseNetDenseNet的集中经典配置总结文章信息 题目:Densely Connected Convolutional Networks, 发表:CVPR,2017 作者:Gao Huang, …

【TWVRP】遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1177期】

⛄一、VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述为:对一系列发货点和收货点,组织调用一定的车辆&#xff…

【密码学篇】虚拟专用网技术原理与应用(商密)

【密码学篇】虚拟专用网技术原理与应用(商密) VPN技术不是洪水猛兽,其普遍应用于网络通信安全和网络接入控制,可通过服务器、硬件、软件等多种方式实现。—【蘇小沐】 文章目录【密码学篇】虚拟专用网技术原理与应用(…

JAVA多线程并发(一):线程的创建

JAVA多线程并发——创建线程 第一章:线程的创建与实现 文章目录JAVA多线程并发——创建线程一、继承Thread类二、实现runnable接口三、简单匿名内部类写法四、实现Callable接口五、线程池一、继承Thread类 代码示例: public class ExtendThread {publ…

SPARKSQL3.0-Unresolved[Parsed]阶段源码剖析

一、前言 上两节介绍了Antlr4的简单使用以及spark中如何构建SessionState,如果没有看过建议先了解上两节的使用,否则看本节会比较吃力 [SPARKSQL3.0-Antlr4由浅入深&SparkSQL语法解析] [SPARKSQL3.0-SessionState构建源码剖析] 那么在Unresolved…

MySql查询的生命周期和性能优化思路

目录 前言 1. 为什么查询性能差 2. 一次查询的生命周期 2.1 客户端与服务端通信 2.2 查询缓存 2.3 解析器 2.4 预处理器 2.5 优化器 2.6 查询引擎 2.7 存储引擎 3. 查询性能优化的思路 4.总结 前言 一说到mysql的查询性能优化,相信很多人能说出来很多的技…

AT32F407/437使用FreeRTOS并实现ping客户端

示例目的 基于以太网络,实现ping客户端已检测网络联机。 支持型号 AT32F407xx AT32F437xx 主要使用外设 EMAC GPIO USART 快速使用方法硬件资源 1) 指示灯LED2/LED3 2) USART1(PA9/PA10) 3) AT-START-F407/ AT-START-F437实验板 4) 以太网连接线软件资源 1) SourceC…

sql函数coalesce和parse_url

学习函数系列: coalesce coalesce函数可以用来排除null值。 coalesce(a, b,c,d) 参数的个数没有限制 返回第一个参数中非null的值。 select help coalesce\G; [ 1. row ] name | COALESCE description | Syntax: COALESCE(value,…) Returns the first non-NUL…