百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

如何做接口自动化测试? 如何做接口自动化测试题

zhezhongyun 2024-12-15 17:55 58 浏览

通过用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)

相关推荐

Excel高效技巧:批量合并重复数据的实用指南

在日常数据处理中,我们常会遇到需要合并相邻重复单元格的场景。无论是整理分类标签、统计重复项还是优化报表格式,手动逐个合并不仅耗时且容易出错。本文将详细介绍三种专业高效的批量合并方法,助您轻松应对各种复...

自主研发高速动车组列车又添新成员(新时代画卷)

数据来源:国铁集团">数据来源:国铁集团CR400AF—S型列车驶过重庆。龙帆摄(人民视觉)">CR400AF—S型列车驶过重庆。龙帆摄(人民视觉)CR400BF—GZ型列车行驶在京...

福彩双色球幻圆图的VBA程序(第一部分)

很多朋友喜欢玩福彩双色球彩票,都知道下面的这张图——福彩双色球红球幻圆图和篮球幻方图。图2是福彩双色球2024104期(红色)和2024105期(黄色)的幻圆图。图3是福彩双色球2024105期(红色...

技巧 | 往MCP服务器添加提示词模板

在我的上一篇文章[1]中,我已经构建了一个本地MCP服务器并向其添加了一些工具。在本文中,我们将向该MCP服务器添加提示词。这是如同上一篇博客的文件结构。但在这里,我为此创建了两个新文件。.├──...

Avalonia日志组件实现与优化指南

背景Avalonia目前没有富文本框可实现日志输出显示,但提供了SelectableTextBlock控件可以替换,这是站长实现的一个日志组件效果:可展示日志时间、日志级别、日志详细内容等,后台除输...

vim编辑器最后几行@代表什么意思

使用vim编辑文本时,屏幕下方会出现一些@符号,这些符号代表什么意思?当vim设置了wrap属性时,若一行太长则就会发生折行现象,此时一个逻辑行就会显示多个屏幕行,如下图由于文件的第2行太长,一个真实...

浅色AI云食堂APP完整代码(二)

以下是整合后的浅色AI云食堂APP完整代码,包含后端核心功能、前端界面以及优化增强功能。项目采用Django框架开发,支持库存管理、订单处理、财务管理等核心功能,并包含库存预警、数据导出、权限管理等增...

QML控件:TextInput, TextField, TextEdit, TextArea用法及自定义

本文主要介绍基本元素TextInput,TextField,TextEdit,TextArea等的基本属性。Textlnput与TextField为行编辑控件,TextEdit与T...

WPF - 10.特殊容器控件

摘要这里我们要介绍的特殊容器空间是ScrollViewer,该控件与其他控件不同的是,可以支持滚动显示容器内的元素。下面我们举例说明如何在WPF中使用ScrollViewer控件。新建一个WPF程...

rhino6.0 python中ETO的组件案例

1.按钮组件按钮几乎放置在每个对话框上。创建一个新的按钮很简单。使用forms.Button并指定Text显示在按钮面上。除了创建新按钮外,通常还通过.Click事件附加一个操作。使用+=语法,如下...

Rhino6.0 窗口开发使用角本说明

第1个:生成窗口代码第2点:Eto界面主要由Dialog(主程序界面)、Layout(界面布局)和Controls(控件)三个部分构成,逻辑简单且清晰。这个脚本被分为三个主要部分。该import...

手把手教你搭建属于自己的服务器!

最近总是想搭建自己的网站,奈何皮夹里空空如也,服务器也租不起,更别说域名了。于是我就寻思能否自己搭建个服务器,还不要钱呢?还真行!!!经过几天的冲浪,我发现有两个免费的建站工具:Apache和Ng...

HEAT杂志《欧美猛男》排行!“雷神”居然没进前三!

提到猛男的必备条件,应该就是要有着让人看了会流口水的大块肌肉,而一说到猛男,小编第一个想到的就是spanstyle="text-transform:none;background-color:...

Power Query 表格列历遍函数Table.TransformColumns函数

PowerQuery提取数字应该是非常方便的,EH有这样一道题:一看到这题首先想的是PowerQuery,可能中毒有点深,思路挺简单的,PowerQuery有一个从数字到非数字的分列分列后再提取...

自学前端踩了30个坑,终于整理出这份新手避坑指南

这是我在自学前端的第37天,对着一个简单的HTML页面卡了整整一下午。不是逻辑错误,不是语法问题,只是我不知道为什么,一个div死活居中不了。那时候的我,以为前端就是写写页面、调调样式,直到后来才...