当前位置: 首页 > news >正文

【测试】接口测试与接口自动化

壹、接口测试基础

一、接口测试概念

I、基础概念

是测试系统组件间接口的一种测试。

主要用于检测外部系统与系统间、内部子系统间的交互点;测试重点检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系。

内部接口调用相当于函数调用;外部接口调用大部分基于HTTP协议进行调用。

II、优势

对比UI测试,能更早发现问题、能发现更底层问题、问题发现和解决的效率更高

III、用例设计

原理:

1、模拟客户端向服务器发送请求;

2、服务器接受请求报文后对报文作出处理,返回应答;

3、客户端接受应答。

除了接口的功能测试外,还包括接口安全、接口性能等测试;

用例设计方法常用有等价类、边界值法等。

测试要点:

1、接口返回数据与预期结果一致性检查。

2、接口测试结果通常需要SQL语句从数据库查询确认。

3、接口容错性检查。如:传递错误数据类型的处理

4、接口参数边界值检查。

5、接口性能。响应时间、接口tps等

6、接口安全性检查。外部调用的接口,一般每个接口都需要access-token验证。

b40342147ee3436c968de3c5398d6dc2.png

 


二、接口自动化实现接口关联的方式和提取变量的方式

HTTP URL组成:

f789cbc199c24fdb9433c8526fb66dca.png

 

安装requests:

pip install [ -i 源(清华源、阿里源、豆瓣源等,默认不填为官方源)]  requests

导入requests模块:

import requests

I、发送请求

请求:请求方法、请求路径、请求参数、请求体

requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.delete(url, **kwargs)

#   上诉调用此函数
requests.request(method, url, **kwargs)

#   上诉调用此函数,可以自动关联有cookie关联的接口
session.request(method=method, url=url, **kwargs)
method=method       请求方法
url=url     请求路径
params=None     get请求参数
data=None       post或者put请求参数
json=None       post请求参数
headers=None    请求头
cookies=None        Cookie
files=None      文件上传
————————————
auth=None       鉴权(token)
timeout=None        超时处理
allow_redirects=True
proxies=None    设置代理
hooks=None      钩子函数
stream=None     文件下载
verify=None     证书验证
cert=None       CA证书

#   生成一个session对象,帮助保存客户端的会话信息

requests.session()

II、接受响应

由response对象接收

 

响应:响应码、响应信息、响应内容、响应头

 

响应内容一般有两种格式:JSON格式和HTML格式

 

需要根据响应内容验证接口工作是否正常。

res = requests.get(url, params=None, **kwargs)
print(res.text)                返回的文本信息
print(res.json())                返回的json格式
print(res.url)                返回响应对象的实际请求地址
print(res.content)                返回的字节内容
print(res.status_code)                返回的状态码
print(res.reason)                返回的状态信息
print(res.cookies)                返回的cookie
print(res.encoding)                返回编码格式
print(res.headers)                返回请求头
print(res.request.请求数据)                返回请求数据

III、cookie、session、token概念

cookie:存在于客户端;由服务端set-cookie方法设置。

session:存在于服务端内存中;用于和cookie一起验证客户端登陆状态。

token:服务端生成的一串字符串,用作客户端进行请求的一个令牌。

token运行原理:

1、Client第一次登录成功后,由Sever 生成,保存在Sever DB中,并返回Token值给Client。

2、Client收到Token后,进行保存(保存位置由Server指定)。

3、Client再次发送请求时,附带Token在请求参数中发送给Server进行验证。

4、Server收到请求后,取出Token值与保存在Server DB中的Token值进行比较。

        若Token一致,说明用户登录成功,处于登录状态;

        若Token不一致,说明登录信息失效,需重新登录;

        若Server DB不存在Token值,说明用户没有登录过。

token认证的优缺点:

无状态性、可重用性、安全性


三、面试题:实现接口关联的三种方式和提取变量的两种方式

什么是JSON:

由{}和[]组成的数据

下一个接口的参数需要用到上一个接口的返回值:接口关联

实现接口关联的三种方式

①、通过类变量保存中间变量实现接口关联(如果类变量跨py文件就会出错)

②、通过单独的文件保存中间变量实现接口关联

③、极限封装成和工具一样只需要通过表达式实现接口关联

提取变量的两种方式(对接口响应内容的处理方式)

①、正则表达式提取(适用文本对象)或者 html的xpath方式提取(HTML格式)

re.search() 提取一个值,通过下标值

re.findall()提取多个值,通过下标值

②、JsonPath提取(适用JSON对象)

       jsonpath.jsonpath()

        jsonpath表达式规则:

        $ 根节点

        .子节点

        .. 递归子节点

        [] 代表列表中的值,下标从0开始


贰、接口测试工具

一、ApiFox

接口管理、开发、测试全流程集成工具。解决多个系统间数据同步问题。

ApiFox = Postman + Swagger  + Mock + Jmeter

命令行中执行ApiFox测试

 

npm install -g apifox-cli

安装apifox-cli库

若出现报错:

unable to verify the first certificate

则执行npm config set strict-ssl false

 

导出用例:

ApiFox cli文件

通过命令执行测试:

apifox run (用例名称).apifox-cli.json -d data.csv -n 2 -r html

-d :数据文件

-n :循环次数

-r :生成测试报告,并指定报告格式

 

二、Jmeter

 


叁、Pytest接口自动化框架

接口自动化框架封装——统一请求封装

原因:

①、去除冗余代码

②、实现请求统一管理,如统一异常管理、统一日志管理

577d9d8930b643a19236a0d7d91e6c91.png


、接口自动化测试引入pytest用例管理框架

python:pytest,unitest

java: testng,junit

pytest作用:

1、找到用例

        模块名必须以test_开头或者_test结尾

        类名必须以Test开头,并且不能由init方法

        用例方法必须以test开头

2、执行用例

3、判断结果

4、生成报告

pytest插件:

pip install -r requirements.txt:

  -r 或 --requirement:这个选项告诉pip从一个文件中读取要安装的包列表;

        创建requirements.txt文件的一个常用方法是使用pip freeze > requirements.txt命令

pytest                本身

pytest-html                简单的html报告

pytest-xdist                多线程执行

pytest-ordering                控制用例执行顺序

pytest-rerunfailures        失败的用例重跑

pytest-base-url                设计基础路径(开发、测试、生产、预发布)

allure-pytest                生成allure报告

运行:

1、命令行运行

        命令行输入pytest运行

                -v输出更详细信息

                -s输出调试信息 

2、主函数调用

import pytestif __name__=="__main__":pytest.main()

3、结合pytest.ini全局配置文件执行

[pytest]#命令行参数
addopts = -vs --html=/reports/report.html --reruns 2
#--html产生html报告保存在/reports/report.html路径,--reruns失败用例重跑2次#配置执行的用例位置
testpaths = ./testcases
#若没有,则将执行所有文件夹下用例#配置修改默认的模块规则
python_files = test_*.py
#按照test_开头匹配执行用例#配置修改默认的类规则
python_classes = Test*#配置修改默认的用例规则
python_functions = test_*#配置基础路径
base_url = http://www.baidu.com#标记
markers =test_this:测试这条用例user_this:测试这条用例

、Pytest的前后置、固件、夹具

I、类似Jmeter和Postman:前置脚本和后置脚本

#   每个用例def setup(self):print("每个用例前:xxx")def teardown(self):print("每个用例之后:x")#   每个类def setup_class(self):print("每个类前:xx")def teardown_class(self):print("每个类之后:xxxx")

II、使用fixture固件结合contest.py文件实现前后置

装饰器

@pytest.fixture(callable_or_scope=None,*args,scope="function",params=None,autouse=False,ds=None,name=None)

scope=“作用范围”

scope:function 函数

scope:class 类

scope:module 模块

scope:session 会话

autouse = “自动执行”

在一个文件设置的固件fixture只能在当前文件起作用。

若希望对所有py文件起作用,需要结合conftest.py文件

@pytest.fixture(scope='function', autouse=False, params=[["baili","baili123"]], ids=["data1"], name="sql")
def exe_sql(request):print("请求之前:查询数据库")yield request.paramprint("请求之后:关闭数据库")

分层前后置

最外层conftest.py先执行、里面层的conftest.py后执行

4673443a2c064259881146153d9473e3.png


、接口自动化测试框架封装——通过文件保存中间变量实现

原因

1、类变量不能跨py文件使用

2、统一管理中间变量

工具做不到的事情

1、RSA,签名,自定义加密,混合加密……

2、生成美观的报告

3、复用性

4、团队协作

数据与业务分离


数据保存到:excel、csv、yaml、txt等

yaml简介:

一种数据类型,支持注释#、换行、字符串等

作用:

1、用于配置文件

2、用于编写测试用例

数据结构:

1、map对象:{键:空格 值}——这里的键值对,引号后面必须有空格,否则无法读取成功

2、list对象:[],可以用一组“-”开头表示,如:

-"name": 1

-"name": 2

可以和json完美转化

读写:

PyYaml模块

数据驱动

通过修改数据,从而驱动测试用例的执行,得到不同的结果。

一组数组执行一次用例,多组数据执行多次用例。

pytest数据驱动装饰器

@pytest.mark.parametrize(参数名,参数值)

生成Allure报告

1、下载allure、解压并配置环境变量

验证环境:

在dos窗口和PyCharm中分别验证:allure --version

 

2、生成临时的json报告

pytest.ini全局配置文件中:

addopts = -vs --alluredir=./temps --clean-alluredir

3、生成HTML的allure报告

if __name__=="__main__":pytest.main()time.sleep(3)os.system("allure generate ./temps -o ./reports --clean")

 

问题
1、yaml(excel、csv、txt)中如何调用python函数

2、接口关联要处理

3、文件上传要处理

4、常规断言和数据库断言

多个用例间区别

1、yaml文件名不同

2、需要提取变量,多了提取代码

3、有关联处理关联,有文件上传处理文件上传

HTTPRunner环境搭建

 安装:

pip install httprunner

pip install har2case

验证环境:

hrun -V

har2case -V

五个命令:

httprunner 主命令

hrun httprunner别名;用于运行yaml/json/pytest测试用例

hmake httprunner make别名;将yaml/json转化为pytest文件

har2case httprunner har2case别名;将har文件转换为yaml/json文件

locust 用于性能测试

 

 

 

 

相关文章:

【测试】接口测试与接口自动化

壹、接口测试基础 一、接口测试概念 I、基础概念 是测试系统组件间接口的一种测试。 主要用于检测外部系统与系统间、内部子系统间的交互点;测试重点检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系。 内部接口调用相当于函数调用&am…...

Android设置边框圆角

在Android开发中&#xff0c;圆角设计十分常见&#xff0c;那么实现边框圆角有几种形式呢&#xff1f; 文章目录 设置圆角边框样式使用ClipToOutline进行裁切最后 设置圆角边框样式 常见的方式是在drawable文件夹下设置一个xml文件的边框样式&#xff0c;比如 <shape andro…...

SpringBoot项目打成jar包,在其他项目中引用

1、首先新建一个SpringBoot工程 记得要将Gradle换成Maven 2、新建一个要引用的方法 3、打包的时候要注意&#xff1a; ① 不能使用springboot项目自带的打包插件进行打包&#xff0c;下面是自带的&#xff1a; ②要换成传统项目的maven打包&#xff0c;如下图&#xff1a; 依…...

【音频可视化】通过canvas绘制音频波形图

前言 这两天写项目刚好遇到Ai对话相关的需求&#xff0c;需要录音功能&#xff0c;绘制录制波形图&#xff0c;写了一个函数用canvas实现可视化&#xff0c;保留分享一下&#xff0c;有需要的直接粘贴即可&#xff0c;使用时传入一个1024长的&#xff0c;0-255大小的Uint8Arra…...

解决github每次pull push输入密码问题

# 解决git pull/push每次都需要输入密码问题 git bash进入你的项目目录&#xff0c;输入&#xff1a; git config --global credential.helper store然后你会在你本地生成一个文本&#xff0c;上边记录你的账号和密码。配置项写入到 "C:\Users\用户名\ .gitconfig" …...

Java重修笔记 第六十四天 坦克大战(十四)IO 流 - 标准输入输出流、InputStreamReader 和 OutputStreamWriter

标准输入输出流 1. System.in 标准输入流 本质上是一个InputString&#xff0c;对应键盘&#xff0c;表示从键盘输入。 定义&#xff1a;public final static InputStream in null; 所以 Scanner scanner new Scanner(System.in); 会从键盘中获取数据 2. System.out 标准输…...

prctl的函数和pthread_self函数

1.prctl的函数原型如下&#xff1a; #include<sys/prctl.h> ​prctl(PR_SET_NAME, “process_name”);第一个参数是操作类型&#xff0c;指定PR_SET_NAME&#xff08;对应数字15&#xff09;&#xff0c;即设置进程名&#xff1b; 第二个参数是进程名字符串&#xff0c;…...

Vim 命令行模式下的常用命令

Vim 命令行模式下的常用命令 文件操作&#xff1a; :w &#xff1a;保存当前文件。:w filename &#xff1a;将当前内容另存为指定的 filename 。:q &#xff1a;退出 Vim&#xff0c;如果文件有修改但未保存&#xff0c;会提示错误。:q! &#xff1a;强制退出 Vim&#xff0c…...

【动态规划-最长递增子序列(LIS)】力扣2826. 将三个组排序

给你一个整数数组 nums 。nums 的每个元素是 1&#xff0c;2 或 3。在每次操作中&#xff0c;你可以删除 nums 中的一个元素。返回使 nums 成为 非递减 顺序所需操作数的 最小值。 示例 1&#xff1a; 输入&#xff1a;nums [2,1,3,2,1] 输出&#xff1a;3 解释&#xff1a; …...

Elastic Stack--16--ES三种分页策略

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 方式一&#xff1a;from size实现原理使用方式优缺点 方式二&#xff1a;scroll实现原理使用方式优缺点 方式三&#xff1a;search_after实现原理使用方式优缺点 三…...

[LeetCode] 315. 计算右侧小于当前元素的个数

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;按要求返回一个新数组 counts 。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目主要思路&a…...

【hot100-java】二叉树展开为链表

二叉树篇。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …...

如何在在 YOLOv3模型中添加Attention机制

在YOLOv3模型中添加Attention机制需要以下几个步骤&#xff1a; 1. 规定格式 当添加新的模块&#xff08;如Attention机制模块&#xff09;时&#xff0c;需要像定义[convolutional]、[maxpool]等层在cfg文件中的格式一样&#xff0c;对新模块进行格式规定。例如对于SE模块&a…...

单点登录Apereo CAS 7.1安装配置教程

笔者目前正在做一个单点登录的课题,历时较长总算摸到一些门路,其中的辛酸不易按下不表。截至本文发布,CAS的最新版本为7.1。由于涉及到课题内容,而且内容比较新,整理试验不容易,暂时只对VIP开放,后续课题完成后会完全开放,敬请谅解。 CAS项目区别 在CAS的项目选择上,…...

windows C++-移除界面工作线程(一)

本文档演示了如何使用并发运行时将 Microsoft 基础类 (MFC) 应用程序中由用户界面 (UI) 线程执行的工作移动到工作线程。 本文档还演示了如何提高冗长绘制操作的性能。 通过将阻塞性操作&#xff08;例如&#xff0c;绘制&#xff09;卸载到工作线程来从 UI 线程中移除工作&am…...

Qt小bug — LINK : fatal error LNK1158: 无法运行“rc.exe“

Qt小bug —— LINK &#xff1a;fatal error LNK1158&#xff1a;无法运行"rc.exe" 环境 Qt 5.14.2 MSVC 2015 x64 现象 解决 在电脑上找到rc.exe 和rcdll.dll &#xff08;一般在C:\Program Files(x86)\Windows Kits*\bin\x64下面&#xff09;拷贝到 C:\Qt\Qt5…...

c++小游戏

目录 狼人杀 走迷宫 炸弹人 贪吃蛇 飞翔的小鸟 跑酷 吃豆人 飞机大战 人生模拟器 坦克大战 修仙模拟器 搜集了一些小游戏&#xff0c;名字下是个人是个人喜欢度&#xff0c;可供参考~ 狼人杀 ❤❤❤❤ #include<bits/stdc.h> #include<cstdio> #incl…...

k8s为什么用Calico

‌Calico是一种开源的网络和安全解决方案&#xff0c;主要用于容器、虚拟机、宿主机之间的网络连接。‌ 它支持Kubernetes、OpenShift、Docker EE、OpenStack等PaaS或IaaS平台&#xff0c;提供高效的网络通信和安全控制功能‌12。 Calico的核心组件包括Felix、etcd、BIRD等。F…...

HashMap 和 Hashtable 有什么区别?

HashMap和Hashtable都是Java中常用的存储键值对的集合类&#xff0c;它们都实现了Map接口&#xff0c;但二者之间存在一些显著的区别。以下是对HashMap和Hashtable区别的详细归纳&#xff1a; 一、线程安全性 HashMap&#xff1a;是非线程安全的&#xff0c;即多个线程可以同…...

【机器学习】深度学习、强化学习和深度强化学习?

深度学习、强化学习和深度强化学习是机器学习的三个重要子领域。它们有着各自独特的应用场景和研究目标&#xff0c;虽然都属于机器学习的范畴&#xff0c;但各自的实现方式和侧重点有所不同。 1. 深度学习&#xff08;Deep Learning&#xff09; 深度学习是一种基于神经网络的…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...