接口测试学习笔记

文章目录

  • 认识url
  • http协议
  • 接口规范
  • Postman实现接口测试
    • 设计接口测试用例
    • 使用软件发送请求并查看响应结果
    • Postman 自动关联
    • Postman如何提交multipart/form-data请求数据
    • Postman如何提交查询参数
    • Postman 如何批量执行用例
    • 单接口测试
    • Postman 断言
    • Postman参数化
  • 接口测试自动化
    • request入门
    • 自动化实现

认识url

  • 互联网上标准资源的地址,一般称为统一资源定位符
  • 组成:协议://hostname:[port]/path/[?查询参数1&查询参数2]
  • 示例:
    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=84053098_3_dg&wd=mysql%20desc&oq=mysql%2520%25E5%25AD%2597%25E7%25AC%25A6%25E4%25B8%25B2%25E9%2595%25BF%25E5%25BA%25A6&rsv_pq=a1182568005b8a7b&rsv_t=c237j3Sa1r6hmKdWk1jv8fDNgTouU%2FaXxVtMvt9hnoX3bPes%2Flk6Xl7H06sI4yAoqIrCAQ&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=7&rsv_sug1=7&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=2953&rsv_sug4=3776
    • 协议:数据传输的格式,如http、https
    • 服务器地址:域名或ip,示例中是www.baidu.com
    • 端口:一个应用程序对外访问的唯一标识,通常是80(http)、443(https) 协议默认的端口可以默认不写
    • 资源路径:端口号后,?之前的部分
    • 参数:客户端向服务器传递的数据,参数与路径之间用?隔开,多个参数之间用&隔开

http协议

  • http:超文本传输协议,基于请求与响应的应用层协议

  • 作用:规定了客户端与服务器之间的信息传递规范,是二者共同遵守的协议

  • 组成:

    • HTTP请求:定义请求数据格式
      • 请求行、请求头、请求体
      • 常用的请求方法:
        • GET:从服务器获取资源
        • POST:从服务器新建一个资源
        • PUT:从服务器更新资源
        • DELETE:从服务器删除资源
      • 请求头:第二行到空白行之间
        • 作用:通知服务器客户端请求信息
        • 特点:键值对,每行一对
        • Content-Type:定义请求体的数据类型
          • text/html:htm格式
          • image/jepg:jpg图片格式
          • application/json:json数据格式
          • application/x-www-form-urlencoded:表单默认的提交数据格式
      • 请求体:空白行之后的内容
        • 作用:传输数据实体
        • 请求体常在post、put方法中使用
        • 常配合的请求头:Content-Type和Content-Length
    • HTTP响应:定义响应数据格式
      • 状态行、响应头、响应体
      • 状态行:响应数据的第一行
        • 作用:描述服务器的处理结果
        • 状态行由协议版本号、状态码、状态消息组成
        • 状态码:
          • 1xx:指示信息
          • 2xx:成功
          • 3xx:重定向
          • 4xx:客户端错误
          • 5xx:服务端错误
      • 响应头:
        • 位置:第二行到空白行之间
        • 作用:描述客户端要使用的一些附加信息
        • 特点:由键值对组成,每行一对
      • 响应体:
        • 位置:空行之后
        • 作用:服务器返回的数据实体
        • 特点:由图片、json、xml、html等多种类型
  • 常见的状态码: 在这里插入图片描述

接口规范

为什么要有接口规范?
为了让前后端开发人员更好的配合,提高工作效率。
在这里插入图片描述

  • 传统接口风格

示例:对用户进行操作的相关接口
在这里插入图片描述

  • RESTful:一种网络应用程序的设计风格和开发方式,提供一组设计原则和约束条件

示例:
在这里插入图片描述

特点:
1. 请求api的url用来定位资源
2. 通过标准的http方法,对资源进行增删改查等操作
3. 利用http状态码,返回状态信息
  • 两种接口风格有什么区别?
    在这里插入图片描述

Postman实现接口测试

设计接口测试用例

1. 提取测试点:

使用功能测试的方法,通过业务流程图,梳理测试点,提取业务路径到xmind中。

2. 解析接口文档:

问:为什么要解析接口文档?
答:熟悉接口信息,为设计接口测试用例做准备问:接口文档一般由谁编写?作用是?
答:一般由后端开发编写,用来描述接口信息的文档问:如何进行接口文档解析?
答:1)分析接口之间的依赖关系2)分析接口请求(如 url,请求方法,请求头,请求参数类型,请求参数等)3) 分析接口响应(如 响应状态码,响应数据等)

3. 编写测试用例

根据接口文档和提取的业务路径,编写测试用例:

ID模块优先级用例名称接口名称前置条件请求URL请求方法请求头请求参数类型请求参数预期结果

使用软件发送请求并查看响应结果

步骤:

  1. 设置请求方式
  2. 设置接口url
  3. 设置请求头
  4. 设置请求数据
  5. 点击send 发送
  6. 查看响应状态码
  7. 查看响应数据

Postman 自动关联

步骤:

  1. 在前一个用例的test 中获取响应结果,并设置需要的值为环境变量
    • pm.response.json() 获取响应结果json
    • pm.enviroment.set() 设置环境变量
  2. 在需要的用例中使用 {{变量名}} 来获取变量值

Postman如何提交multipart/form-data请求数据

步骤:

  1. 设置请求方式
  2. 设置接口url
  3. 设置请求头
  4. 设置请求数据:body->form-data->file->选择上传文件
  5. 点击send发送
  6. 查看响应状态码
  7. 查看响应数据

Postman如何提交查询参数

  • 方法1:直接在接口url后面跟?查询参数
  • 方法2:设置parameter区域

Postman 如何批量执行用例

  1. 点击测试集中的run按钮,批量执行用例
  2. 在弹出的Collection Runner窗口,点击运行
  3. 查看测试结果

单接口测试

  1. 分析接口文档,提取测试点 xmind 脑图

在这里插入图片描述

  1. 根据测试点,编写测试用例 excel
ID模块优先级用例名称接口名称前置条件请求URL请求方法请求头请求参数类型请求参数预期结果
  1. 使用postman,实现并执行测试用例

在这里插入图片描述

Postman 断言

  • 断言的作用:让工具代替人工,自动判断实际结果跟预期结果是否一致
  • Postman 如何进行断言?
# 常用的断言方式有:
# 1、断言响应状态码
pm.test("Status code is 200", function () {pm.response.to.have.status(200);});
# 2、断言响应text是否包含特定文本
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");});
#3、断言响应json 的某个值,是否与预期结果相等
pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.value).to.eql(100);});

Postman参数化

  • 参数化的作用:提高测试脚本的复用性
  • Postman如何实现参数化?
    • 准备数据文件 json文件,每项数据以json形式组织成一个列表,保存在json文件中;
    • 引用数据文件:
      • 请求中使用:{{变量名}}来引用变量
      • 在代码中使用:data.变量名 来引用变量
    • 执行用例

接口测试自动化

自动化测试框架目录结构:

  • api:封装接口信息
  • data:存放测试数据
  • script:编写测试脚本
  • common:存放通用工具类
  • report:存放测试报告
  • config.py:定义项目基本配置信息
  • pytest.ini:pytest 配置文件

request入门

# 导包
import request
# 发送request请求,并返回响应
# request.请求方法 发送相应的请求,并返回响应结果
# 参数 json 提交json数据;参数headers 提交 headers 数据
response = request.get(url="", json=, headers=)
# 打印响应
print(response.status_code)
print(response.text)
print(response.json())

自动化实现

1、封装接口

# 在api文件夹中创建对应接口文件
# 在该文件中对该接口进行封装
# 导包
import request
# 创建接口类
class LoginAPI:# 初始化def __init__(self):# 定义当前接口urlself.image_api = "" # 获取验证码url接口self.login_api = "http:..." # 登录url接口# 封装接口,并获取响应结果def image(self):return request.get(self.image_api)def login(self, login_data):return self.post(self.login_api, json=login_data}

2、编写测试用例

# 在script文件夹中创建py文件
# 导包
from api.login import LoginAPI
# 创建测试类
class TestLoginAPI():# setupdef setup():# 实例化接口对象login_api = LoginAPI()# teardowndef teardown():pass# 编写测试用例def test_login_success():pass

3、 数据驱动实现

# 导包
import pytest
# 定义数据,每条数据以元祖的形式组织,并通过列表组合起来
test_data = [(1, 2...), ()]
# 在用例前使用pytest的装饰器
@pytest.mark.parameterize("参数1,参数2...", test_data)
def test_login(self, 参数1,参数2...):pass

4、json文件实现数据驱动

#将每条数据以json的形式组织,然后通过列表组织起来,放在data文件夹下,保存为xxx.json
编写方法,将json文件读取,并将json列表组织的形式转化为元祖列表组织的形式
结合步骤3,使用pytest的装饰器 @pytest.mark.parameterize 以实现json文件数据驱动

5、config文件使用

congfig文件中保存基本的url 和 项目的路径等基本信息

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ入门指南(九):消费者可靠性

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、消费者确认机制 二、失败重试机制 三、失败处理策略 四、业务幂等性 1.通过唯一标识符保证操作的幂等性 2.通过业务判断保证操作的幂等性 总结 前言 RabbitMQ是一个高效、可靠的开源消息队列系…

TikTok地理标签:通过短视频游走全球景点

TikTok,这个全球短视频平台,不仅是创意的播放场所,更是连接全球用户的数字旅行通道。通过TikTok的地理标签,用户可以在短视频中游走于世界各地的景点,感受异国风情,分享旅行心情。本文将深入探讨TikTok地理…

7.3 uvm_config_db in UVM

uvm_config_db类派生自uvm_resource_db类。它是uvm_resource_db顶部的另一层便利层,简化了用于uvm_component实例的基本接口(资源库的访问方法)。 下面uvm_config_db类的代码段取自uvm源代码。 class uvm_config_db#(type Tint) extends uv…

【GitHub精选项目】短信系统测试工具:SMSBoom 操作指南

前言 本文为大家带来的是 OpenEthan 开发的 SMSBoom 项目 —— 一种用于短信服务测试的工具。这个工具能够发送大量短信,通常用于测试短信服务的稳定性和处理能力。在合法和道德的范畴内,SMSBoom 可以作为一种有效的测试工具,帮助开发者和系统…

【编译原理】基于词法分析器的LL1语法分析器

【编译原理】基于词法分析器的LL1语法分析器 实验要求 设计一个满足以下要求的⽂法: (1)识别只包含变量声明语句和执行语句程序段的语法结构合法性; (2)变量声明中只使用int,char,float 3类基本类型&…

Android studio 花式按键

一、activity_main.xml代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.a…

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )

文章目录 一、 list 双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件 二、 list 双向链表容器 构造函数1、默认无参构造函数2、创建包含 n 个相同元素的 list 双向链表3、使用初始化列表构造 list 双向链表4、使用另外一个 list 容器 构造 list 双向链表…

【Java基础】Java中异常分类,他们之间的区别?

&#x1f341;Java中异常分哪两类 &#x1f341;Java中异常类&#x1f341;受检异常&#x1f341;非受检异常 &#x1f341;拓展知识仓&#x1f341;什么是Throwable&#x1f341;Error和Exception的区别和联系&#x1f341; 列举几个常用的RuntimeException&#x1f341;Java异…

关于“Python”的核心知识点整理大全41

目录 scoreboard.py game_functions.py game_functions.py 14.3.8 显示等级 game_stats.py scoreboard.py scoreboard.py scoreboard.py game_functions.py game_functions.py alien_invasion.py 14.3.9 显示余下的飞船数 ship.py scoreboard.py 我们将最高得分圆整…

微信这样分类客户,帮你轻松提升业绩!

无论是什么行业&#xff0c;都会遇到各种各样的客户&#xff0c;能不能成交这些客户&#xff0c;关键的一点在于有没有明确的客户分类。 今天就给大家分享几个高效分类客户的方法&#xff0c;帮助大家提高成交率和业绩。 1、分组管理 在微信中创建不同的分组&#xff0c;比如…

MyBatis——MyBatis的缓存

MyBatis的缓存 创建工程&#xff1a; 1缓存介绍 为什么使用缓存&#xff1f; 首次访问时&#xff0c;查询数据库&#xff0c;并将数据存储到内存中&#xff1b;再次访问时直接访问缓存&#xff0c;减少IO、硬盘读写次数、提高效率 Mybatis中的一级缓存和二级缓存&#xff1f;…

IP 地址归属地查询

IP 地址归属地查询 1. IP 地址归属地查询2. IP 地址归属地查询References 1. IP 地址归属地查询 https://tool.lu/ip/index.html 2. IP 地址归属地查询 https://www.ip.cn/ip/.html References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

【JavaScript】Set、Map、WeakSet、WeakMap

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

Gin框架之使用 go-ini 加载.ini 配置文件

首先,联想一个问题,我们在部署服务时,通常为了方便,对于需要迭代更新的代码进行修改,但是比对shell,可以搞一个变量将需要修改的,以及修改起来变动处多的,写在变量内,到时候如果需要变更,可以直接变更变量即可; 那么,golang有没有什么方式可以将需要变的东西保存起…

TCP协议及工作原理(三)客户端的搭建

ui界面的搭建 &#xff1a; QTcpServer是基于TCP的服务器类提供一种方便的方式管理和创建TCP服务器&#xff0c;QTcpSocket处理TCP套接字编程用于建立TCP连接&#xff0c;发送接收数据等功能。 参考前两篇可深入理解&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

php 不加后缀访问

实现不带后缀访问php文件的方法&#xff1a;首先在htaccess文件中加入内容“RewriteRule ^(api/token) token.php [L]”&#xff1b;然后通过根目录下的“token.php”来接受“api/token”&#xff1b;最后修改配置文件。 考虑的做法有&#xff1a; HTTP重写技术&#xff0c;让…

Win10电脑蓝牙默认音量100的设置教程

在Win10电脑操作过程中&#xff0c;用户想设置连接蓝牙后音量默认是100&#xff0c;但不知道具体的设置操作步骤。这时候用户需要打开Win10系统上的注册表&#xff0c;点击修改注册表来完成这一设置&#xff0c;下面就是Win10电脑蓝牙默认音量100的设置教程介绍&#xff0c;帮助…

【Java、Python】获取电脑当前网络IP进行位置获取(附源码)

我相信看到这篇博客的时候心里肯定是想解决自己的一个问题的&#xff0c;而这篇博客我就以简单快速的方式解决这些烦恼&#xff01; 一、获取当前IP 在Java中自带了一些自己的流对象来获取当前的IP地址&#xff0c;不多说我们直接上代码。 //获取当前网络ip地址 ipAddress Ine…

CentOS安装MongoDB

CentOS安装MongoDB 文章目录 CentOS安装MongoDB1. 安装并运行2. 创建用户/密码3. 测试语句4. 允许外网访问 1. 安装并运行 在 CentOS 上安装 MongoDB&#xff0c;你可以按照以下步骤进行&#xff1a; 导入 MongoDB 的 GPG 密钥&#xff1a; sudo rpm --import https://www.mon…

React快速入门之组件

组件 文件&#xff1a;Profile.js export default function Profile({isPacked true&#xff0c;head,stlyeTmp,src,size 80}) {if (isPacked) {head head " ✔";}return (<div><h1>{head}</h1><imgsrc{src}alt"Katherine Johnson&q…