接口自动化-代码实现
接口自动化基础
1、接口自动化测试
- 接口自动化:使用工具或代码代替人对接口进行测试的技术
- 测试目的: 防止开发修改代码时引入新的问题
- 测试时机:
- 开发进行系统测试转测前,可以先进行接口自动化脚本的编写
- 开发进行系统测试转测后,优先进行系统测试用例的执行,再进行接口自动化脚本的编写
2、接口自动化测试流程
1)选取自动化测试用例
- 优先级高(先实现业务流程用例、后实现单接口用例)
- 功能稳定
2)搭建自动化测试环境
- 核心技术
- 编程语言:Python
- 测试框架:pytest
- 接口请求:requests
- 安装:
pip3 install requests - 验证:
pip3 show requests
- 安装:
3)搭建自动化测试框架
4)代码实现自动化
5)输出测试报告
6)实现持续集成
3、接口自动化测试框架
1)接口自动化框架
接口自动化框架就是基于应用服务器和数据库进行case管理,具体包含API封装、数据库封装、测试数据参数化和代码优化断言封装等
2)接口自动化框架设计思路
- 搭建集成框架——定义项目目录结构
- 通用功能类封装——封装通用功能如:数据库工具等
- 接口对象封装与调用——封装接口API对象+PyTest框架编写测试脚本
- 测试数据参数化——测试数据json文件设计、参数化实现
- 用例组织运行——组织测试用例运行,生成测试报告
3)搭建基础框架—定义项目目录结构

- api——封装接口信息
- scripts——编写测试脚本
- data——存放测试数据
- report——存放测试报告
- common——存放通用工具类
- config.py——定义项目配置信息
- pytest.ini——pytest配置文件
Requests库
1.介绍
- requests库:python中的“浏览器”,基于urllib的HTTP库
- 安装:
pip install requests - 操作步骤
- 导包
- 发送接口请求
- 查看响应数据
2.Requests发送请求
1)requests处理json类型
requests.请求方法(url, params=None, data=None, json=None, headers=None)
- 常见方法:get,post,put,delete
- url:请求的url地址
- params:请求的查询参数
- data:请求体为form表单参数
- json:请求体为json参数
- headers:请求头参数
2)requests处理multipart/form-data类型
requests.请求方法(url, data=None, json=None, headers=None, files=None)
- files:上传的文件
3.Requests查看响应
| 属性/方法 | 说明 |
|---|---|
| response.status_code | 状态码 |
| response.json() | json形式的响应内容 |
| response.text | 文本形式的响应内容 |
| response.url | 请求url |
| response.encoding | 查看响应头部字符编码 |
| response.headers | 头信息 |
| response.cookies | cookies信息 |
登录接口调试-登录
- 需求:使用requests访问登录接口,并查看响应结果
- 接口信息
- url:http://kdtx-test.itheima.net/api/login
- 方法:post
- 请求数据
- 请求头:Content-Type:application/json
- 请求体:{“username”:“admin”,“password”:“HM_2023_test”,“code”:“2”,“uuid”:“验证码接口返回结果中的数据值”}
# 需求:登录成功# 导包
import requests# 发送请求
url = "http://kdtx-test.itheima.net/api/login"
header_data = {"Content-Type": "application/json"
}
login_data = {"username": "admin","password": "HM_2023_test","code": 2,"uuid": "26bdc08fac934d6b805e49645b2701ae"
}
response = requests.post(url=url, headers=header_data, json=login_data)# 查看响应
print(response.status_code)
print(response.json())
接口对象封装
1、接口自动化代码核心思想?
核心思想:代码分层思想
- 测试脚本层
- 重点关注测试数据准备和断言
- 重点关注业务流程的处理
- 直接调用接口对象层发送请求
- 接口对象层
- 根据接口API文档封装
- 重点关注如何调用接口
- 请求参数从测试脚本层传递
- 接口响应结果返回给脚本层
2、代码中如何解决接口之间的数据依赖?
使用python中变量或属性传递接口依赖数据
例如:
#提取登录成功之后的token数据并保存在类的属性中TestContractBusniess.token = res_l.json().get("token")
3、Requests中如何处理multipart/form-data请求数据?
# 读取文件
f = open("test.pdf", "rb")
# 设置请求数据
response = requests.post(url=xxx, files={"file": f}
数据驱动
数据驱动:以测试数据驱动脚本执行,维护焦点从脚本转向测试数据的一种自动化测试设计模式
好处:代码与测试数据分离,增强代码的可维护性
如何实现?
pytest中parametrize装饰器
- 作用:遍历所有测试数据并运行测试方法
- 语法
- @pytest.mark.parametrize(②保存数据参数名, ①测试数据)
def test_method(self, ③参数名)
pass
- @pytest.mark.parametrize(②保存数据参数名, ①测试数据)
- 示例
- test_data=[(“manager”, “123456),(”",“123456”),(“itheima”,“123456”)]
- @pytest.mark.parametrize(“mobile, password”, test_data)
def test_method(self, mobile, password)
pass
json文件实现数据驱动
1)json文件记录测试数据
[{"username": "admin","password": "HM_2023_test","status": 200,"message": "成功","code": 200},{"username": "","password": "HM_2023_test","status": 200,"message": "错误","code": 500},{"username": "admin111","password": "HM_2023_test","status": 200,"message": "错误","code": 500}
]
2)封装读取json文件
# 读取json文件
def build_data(json_file):# 定义一个空列表test_data = []# 打开json文件with open(json_file, "r", encoding="utf-8") as f:# 加载json文件数据json_data = json.load(f)# 循环遍历测试数据for case_data in json_data:# 转换数据格式[{}, {}, {}] ==> [(), (), ()]username = case_data.get("username")password = case_data.get("password")status = case_data.get("status")message = case_data.get("message")code = case_data.get("code")test_data.append((username, password, status, message, code))# 返回处理后的测试数据return test_data
3)测试用例方法中利用参数化取出测试数据
# 登录成功@pytest.mark.parametrize("username, password, status, message, code", build_data(json_file=config.BASE_PATH + "/data/login.json"))def test01_login_success(self, username, password, status, message, code):login_data = {"username": username,"password": password,"code": 2,"uuid": TestLoginAPI.uuid}response = self.login_api.login(test_data=login_data)# 断言响应状态码为200assert status == response.status_code# 断言响应数据包含’成功‘assert message in response.text# 断言响应json数据中的code值assert code == response.json().get("code")
项目配置文件
用于维护项目相关的基本信息,如:URL、项目路径等
# 导包
import os
# 定义环境域名
BASE_URL = "http://kdtx-test.itheima.net"
# 统一文件路径
BASE_PATH = os.path.dirname(__file__)
print(BASE_PATH)
当测试用例代码中需要用到url或项目路径时,如:
self.url_verify = config.BASE_URL + "/api/captchaImage"
json_file=config.BASE_PATH + "/data/login.json"
Allure测试报告
- 介绍
- 能生成美观易读的报告
- 支持多种开发语言,如java、python等
- 能快速上手
- 操作步骤
- 生成测试结果文件(json文件)
- 使用allure命令生成在线报告
- 帮助文档:https://docs.qameta.io/allure
1)生成测试结果文件
使用步骤:
-
将pytest配置文件中的命令行参数加上如下代码
--alluredir report -
编写好测试脚本后,在命令行行中运行pytest
[pytest] addopts =-s --alluredir report testpaths=./scripts python_files = test*.py python_classes = Test* python_functions = test* -
程序运行结束后,会在项目的report目录中生成一些json文件
2)使用allure命令生成在线报告
安装:
1.https://github.com/allure-framework/allure2/releases 下载 allure
2.解压缩安装包到一个不包含中文路径的目录
3.将压缩包内的 bin 目录配置到 path 系统环境变量
4.右键我的电脑 - 属性 - 高级设置 - 环境变量 - 找到系统环境变量的path项 - 增加 allure到bin目录
5.在命令行中输入 allure--version 命令,能显示allure版本信息,即为成功
总结:
1)终端输入 pytest 运行
2)终端输入 allure serve report 命令 得到报告

一些问题:
①allure依赖于jdk环境,需要先安装jdk1.8.0并配置环境变量(按照csdn上的文章配置了半天都没用,最后是直接将bin文件的绝对路径添加到path环境变量中才成功)
②如果在pycharm终端输入allure serve report 报错提示“allure不是内部或外部命令”,可以直接使用allure路径+serve report,即D:\software\allure-2.30.0\bin\allure serve report
相关文章:
接口自动化-代码实现
接口自动化基础 1、接口自动化测试 接口自动化:使用工具或代码代替人对接口进行测试的技术测试目的: 防止开发修改代码时引入新的问题测试时机: 开发进行系统测试转测前,可以先进行接口自动化脚本的编写开发进行系统测试转测后&…...
如何查看linux大文件
文章目录 一、查看存储情况二、查看指定路径下的文件大小查看临时文件和日志的大小 三、查找home目录下文件大小大于100M的大文件四、查看INNODE使用情况五、查看进程使用情况查看所有进程查看特定进程杀死相关进程 六、清除缓存操作七、 查看docker的硬盘占用情况详细查看 一、…...
生成式人工智能服务大模型备案答疑
问:大模型备案范围 答:利用生成式人工智能技术向中华人民共和国境内公众提供生成文本、图片、音频、视频等内容的服务,适用本办法。 未向境内公众提供生成式人工智能服务的,不适用本办法的规定。 ps:生成式人工智能…...
QT-贪吃蛇小游戏
QT-贪吃蛇小游戏 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "Food.h" #include <QTime> #include <time.h> #include "Snake.h"Food::Food(int foodSize):foodSize(foodSize) {coordinate.x -1;coordinate.…...
虚幻5|AI视力系统,听力系统,预测系统(1)视力系统
继宠物伴随系统初步篇后续 虚幻5|AI巡逻宠物伴随及定点巡逻—初步篇-CSDN博客 一,听力系统 1.打开宠物ai的角色蓝图 2.选中ai感知组件 右侧细节,找到ai感知,添加感知配置,我们需要的是ai视力配置 3.选中左侧创建的ai感知组件&…...
IC rankIC
IC IC衡量的是预测值和实际值之间的相关系数 计算公式为:IC Pearson(R(predicted),R(actual)) 取值范围:[-1, 1],其中1表示完全相关,也就是预测值和实际值完全一样。0表示完全不相关,-1表示,反向相关 ra…...
Windows服务器IIS7下如何查看真实报错原因
背景 IIS7默认为友好报错,或只报错代码。如500错误,401错误等。根据这些错误无法定位真实原因,故而需要显示真实的错误信息。 解决方案 以500错误为例说明。 1、打开IIS,点全局设置中的"错误页"(注意必须是全局网站)。 2、右击50…...
深度学习设计模式之策略模式
文章目录 前言一、介绍二、特点三、详细介绍1.核心组成2.代码示例3.优缺点优点缺点 4.使用场景 总结 前言 策略模式定义一系列算法,封装每个算法,并使它们可以互换。 一、介绍 策略模式(Strategy Pattern)是一种行为型设计模式&…...
Linux 下安装miniconda(少走弯路)
Miniconda 和 Conda 都是用于管理 Python(及其他语言)环境和包的工具。 conda对于我来说是太臃肿了,很多的包我不会使用,所以选择安装miniconda是一个较好的选择。 下面是linux安装miniconda的实际操作。 在以下的网站…...
java ssl使用自定义证书
1.证书错误 Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 2.生成客户端证书 openssl x509 -in <(openssl s_client -connect 192.168.11.19:8101 -prexit 2>/dev/null) -ou…...
【ARM+Codesys 客户案例 】基于RK3568/A40i/STM32+CODESYS开发的控制器在自动输送分拣系统上的应用,支持定制
2021年“京东618” 累计下单金额超3438亿元,再次刷新纪录! 从下单到收货,各种货品均可在短短几天内通过四通八达的物流网络送达全国任何一个家庭。电子商务和快递物流的迅猛发展对仓储、分拣、配送效率和准确性均提出了更高的要求,加速了智能物流的发展。…...
C++ 设计模式(1. 单例模式)
单例模式是一种创建型设计模式, 它的核心思想是保证一个类只有一个实例,并提供一个全局访问点来访问这个实例。 特点 全局访问点的意思是,为了让其他类能够获取到这个唯一实例,该类提供了一个全局访问点(通常是一个静态…...
算法笔记|Day31动态规划IV
算法笔记|Day31动态规划IV ☆☆☆☆☆leetcode 1049.最后一块石头的重量II题目分析代码 ☆☆☆☆☆leetcode 494.目标和题目分析代码 ☆☆☆☆☆leetcode 474.一和零题目分析代码 ☆☆☆☆☆leetcode 1049.最后一块石头的重量II 题目链接:leetcode 1049.最后一块石…...
CSS文字方向控制属性text-orientation
在CSS中,text-orientation 属性主要用于控制文本的方向,特别是当文本被设置为垂直排列时。这个属性主要用于东亚语言的排版,比如中文、日文和韩文,这些语言在垂直书写时,字符的排列方向可能与拉丁文字不同。 text-ori…...
配置typora上传图片到Chevereto图床
目录 一、下载安装PicGo二、配置PicGo三、配置Typora 一、下载安装PicGo PicGo下载地址点击进入 进入官网后点击下载,会跳转到GitHub,如图,选择对应的操作系统版本下载 下载完成后单击安装(本文已windows系统为例) 二、配置PicGo 点击插件设…...
Java面试八股之如何保证消息队列中消息不重复消费
如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费,通常需要从以下几个方面来着手: 消息确认机制: 对于像RabbitMQ这样的消息队列系统,可以使用手动确认(manual acknowledge)机制来…...
0.91寸OLED迷你音频频谱
一、简介 音频频谱在最小0.91寸OLED 屏幕上显示,小巧玲珑 二、应用场景 本模块为音频频谱显示模块,用来获取声音频谱并展示频谱,跟随音乐声音律动 三、产品概述 基于主控芯片设计的将声音采集分析频谱,显示到0.91寸OLED的功能…...
机器学习--特征工程常用API
1. DictVectorizer - 字典特征提取 DictVectorizer 是一个用于将字典(如Python中的字典对象)转换为稀疏矩阵的工具,常用于处理类别型特征。 DictVectorizer(sparseTrue, sortTrue, dtype<class numpy.float64>)参数: spar…...
块级LoRA:个性化与风格化在文本到图像生成中的新突破
人工智能咨询培训老师叶梓 转载标明出处 文本到图像生成技术的核心目标是教会预训练模型根据输入的文本提示生成具有特定主题和风格的新颖图像。尽管已有多种微调技术被提出,但它们在同时处理个性化和风格化方面仍存在不足,导致生成的图像在个人身份和风…...
redis的数据结构——压缩表(Ziplist)
压缩表(Ziplist)是Redis中一种紧凑的数据结构,主要用于节省内存。它通常被用于存储少量的字符串或小整数,尤其在列表类型(List)和哈希类型(Hash)中。当数据量较小或数据本身占用内存较少时,Redis会选择用压缩表来存储数据,以减少内存开销。 压缩表的基本结构 压缩表…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
