接口自动化-代码实现
接口自动化基础
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会选择用压缩表来存储数据,以减少内存开销。 压缩表的基本结构 压缩表…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
