如何做接口自动化测试?
myzbx 2025-01-05 19:02 10 浏览
通过用Python实现头条项目接口自动化测试,下面一起来学习。
目标
- 1. 熟悉接口自动化测试的流程
- 2. 能够对一个项目的接口实现自动化测试
接口自动化测试流程
- 1. 需求分析
- 2. 挑选需要做自动化测试的功能
- 3. 设计测试用例
- 4. 搭建自动化测试环境[可选]
- 5. 设计自动化测试项目的架构[可选]
- 6. 编写代码
- 7. 执行测试用例
- 8. 生成测试报告并分析结果
项目接口介绍
1. 项目介绍
项目名称:黑马头条
项目描述:黑马头条是一款基于数据挖掘的推荐引擎产品,它为用户推荐有价值的、个性化的科技资讯,提供连接人与信息的新型服务。
项目技术架构:
2. 项目接口分析
分析接口文档...
3. 挑选需要做接口测试的功能
用例设计
1. 单接口的用例设计
2. 业务功能的用例设计
项目搭建
1. 新建项目
项目名称:apiAutoTestHmtt
2. 创建目录结构
3. 安装依赖包
pip install requests
编写代码
1. 封装接口类
根据用例分析待测功能,按功能模块定义接口类
登录:login.py
频道:channel.py
文章:article.py
收藏:collections.py
2. 编写测试脚本
1. 定义测试脚本文件
登录模块:test_login.py
频道模块:test_channel.py
文章模块:test_article.py
收藏模块:test_collections.py
2. 使用unittest管理测试脚本
3. 执行测试脚本
1. 使用unittest执行测试脚本
2. 调试代码
4. 数据库数据校验
4.1 用例场景
调用收藏文章的接口后,校验数据库中是否插入了对应的收藏记录。
4.2 表结构
CREATE TABLE `news_collection` (
`collection_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
`user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID',
`article_id` bigint(20) unsigned NOT NULL COMMENT '文章ID',
`create_time` datetime NOT NULL COMMENT '创建时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否取消收藏, 0-未取消, 1-已取消'
,
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`collection_id`),
UNIQUE KEY `user_article` (`user_id`,`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户收藏表';
4.3 示例代码
# 收藏
def test_collections(self):
article_id = 1 # 文章id
user_id = 1 # 用户id
# 收藏
response = self.collections_api.collections(article_id)
# 断言响应数据
json_result = response.json()
self.assertEqual("OK", json_result.get("message"))
# 数据库数据校验
conn = pymysql.connect("localhost", "root", "root", "hmtt")
cursor = conn.cursor()
sql = "select collection_id,is_deleted from news_collection where user_id=%s and ar
ticle_id=%s"
cursor.execute(sql, (user_id, article_id))
data = cursor.fetchone()
cursor.close()
conn.close()
self.assertIsNotNone(data)
self.assertEqual(0, data[1]) # 未取消
4.4 封装数据库操作工具类
为了减少代码的冗余,提高测试效率,可以对数据库的相关操作封装成工具类。
示例代码
import pymysql
class DBUtil:
_conn = None # 数据库连接对象
@classmethod
def get_conn(cls):
"""获取数据库连接对象"""
if cls._conn is None:
cls._conn = pymysql.connect("localhost", "root", "root", "hmtt")
return cls._conn
@classmethod
def close_conn(cls):
"""关闭数据库连接"""
if cls._conn:
cls._conn.close()
cls._conn = None
@classmethod
def get_cursor(cls):
"""获取游标对象"""
return cls.get_conn().cursor()
@classmethod
def close_cursor(cls, cursor):
"""关闭游标对象"""
if cursor:
cursor.close()
@classmethod
def get_one(cls, sql):
"""查询一条记录"""
data = None
cursor = None
try:
cursor = cls.get_cursor()
cursor.execute(sql)
data = cursor.fetchone()
except Exception as e:
print("get_one error: ", e)
finally:
cls.close_cursor(cursor)
cls.close_conn()
return data
数据驱动
1. 数据驱动
1.1 定义数据文件
1. 定义存放测试数据的目录,目录名称:data
2. 分模块定义数据文件
登录模块:login.json
频道模块:channel.json
文章模块:article.json
收藏模块:collections.json
3. 根据业务编写用例数据
1.2 测试数据参数化
修改测试脚本,使用parameterized实现参数化
生成测试报告
使用HTMLTestRunner生成测试报告
report_file = "./report/report{}.html".format(time.strftime("%Y%m%d-%H%M%S"))
with open(report_file, "wb") as f:
runner = HTMLTestRunner(f, title="黑马头条接口自动化测试报告", description="V1.0")
runner.run(suite)
相关推荐
- Django零基础速成指南:快速打造带用户系统的博客平台
-
#python##服务器##API##编程##学习#不是所有教程都值得你花时间!这篇实战指南将用5分钟带你解锁Django核心技能,手把手教你从零搭建一个具备用户注册登录、文章管理功能的完整...
- iOS 17.0 Bootstrap 1.2.9 半越狱来啦!更新两点
-
这款Bootstrap半越狱工具终于更新,离上一次更新已相隔很久,现在推出1.2.9版本,主要为内置两点功能进行更新,也是提升半越狱的稳定性。如果你正在使用这款半越狱工具的,建议你更新。注意!...
- iOS 16.x Bootstrap 1.2.3 发布,支持运行清理工具
-
本文主要讲Bootstrap半越狱工具更新相关内容。如果你是iOS16.0至16.6.1和17.0系统的,想体验半越狱的果粉,请继续往下看。--知识点科普--Bootstrap...
- SpringBoot整合工作流引擎Acticiti系统,适用于ERP、OA系统
-
今日推荐:SpringBoot整合工作流引擎Acticiti的源码推荐理由:1、SpringBoot整合工作流引擎Acticiti系统2、实现了三级权限结构3、持久层使用了mybatis框架4、流程包...
- SpringCloud自定义Bootstrap配置指南
-
在SpringCloud中自定义Bootstrap配置需要以下步骤,以确保在应用启动的早期阶段加载自定义配置:1.添加依赖(针对新版本SpringCloud)从SpringCloud2020...
- Python使用Dash开发网页应用(三)(python网页开发教程)
-
PlotlyDash开发Web应用示例一个好的网页设计通常都需要编写css甚至js来定制前端内容,例如非常流行的bootstrap框架。我们既然想使用Dash来搭建web应用,很大的一个原因是不熟悉...
- Oxygen XML Editor 27.1 中的新功能
-
OxygenXMLEditor27.1版是面向内容作者、开发者、合作者和出版商的行业领先工具包的增量版本。在27.1版本中,AIPositronAssistant得到了增强,包括用于...
- 【LLM-多模态】Mini-Gemini:挖掘多模态视觉语言模型的潜力
-
一、结论写在前面论文提出了Mini-Gemini,一个精简而强大的多模态VLM框架。Mini-Gemini的本质在于通过战略性框架设计、丰富的数据质量和扩展的功能范围,发掘VLM的潜在能力。其核心是补...
- 谐云课堂 | 一文详解分布式改造理论与实战
-
01微服务与分布式什么是分布式?首先,我们对上图提到的部分关键词进行讲解。单体,是指一个进程完成全部的后端处理;水平拆分,是同一个后端多环境部署,他们都处理相同的内容,使用反向代理来均衡负载,这种也叫...
- 基于Abaqus的手动挡换挡机构可靠性仿真
-
手动挡,也称手动变速器,英文全称为Manualtransmission,简称MT,即用手拨动换挡操纵总成才能改变变速器内的齿轮啮合位置,改变传动比,从而达到变速的目的。家用轿车主要采用软轴连接的换挡...
- 【pytorch】目标检测:彻底搞懂YOLOv5详解
-
YOLOv5是GlennJocher等人研发,它是Ultralytics公司的开源项目。YOLOv5根据参数量分为了n、s、m、l、x五种类型,其参数量依次上升,当然了其效果也是越来越好。从2020...
- 超实用!50个非常实用的PS快捷键命令大全分享
-
今天,给大家介绍50个非常实用的快捷键命令大全,大家伙都是设计师,关于软件使用那是越快越好啊。一、常用的热键组合1、图层混合模式快捷键:正常(Shift+Option+N),正片叠底(Shif...
- Pohtoshop中深藏不露的小技巧(科目一考试技巧记忆口诀看完必过)
-
邢帅教育ps教程为大家总结了一些Pohtoshop中深藏不露的小技巧,可以帮助到大家在设计时减少不必要的麻烦,提高工作效率哦~~~1.设置网格线保持像素完美不在1:1分辨率下也能保持像素完美,可以...
- Ganglia监控安装总结(监控安装工作总结)
-
一、ganglia简介:Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据...
- 谁说Adobe XD做不出好看的设计?那是你没搞懂这些功能
-
AdobeXD的美化栏具有将设计视图美化的功能,它能使界面设计和原型设计更漂亮、更吸引眼球。美化栏的7个功能包括竖线布局设计、横线布局设计、重复网格、图形大小和位置设置、响应式调整大小、文字美化以及...
- 一周热门
- 最近发表
-
- Django零基础速成指南:快速打造带用户系统的博客平台
- iOS 17.0 Bootstrap 1.2.9 半越狱来啦!更新两点
- iOS 16.x Bootstrap 1.2.3 发布,支持运行清理工具
- SpringBoot整合工作流引擎Acticiti系统,适用于ERP、OA系统
- SpringCloud自定义Bootstrap配置指南
- Python使用Dash开发网页应用(三)(python网页开发教程)
- Oxygen XML Editor 27.1 中的新功能
- 【LLM-多模态】Mini-Gemini:挖掘多模态视觉语言模型的潜力
- 谐云课堂 | 一文详解分布式改造理论与实战
- 基于Abaqus的手动挡换挡机构可靠性仿真
- 标签列表
-
- HTML 基础教程 (29)
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 中级教程 (30)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)