接口测试(全)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快
1、什么是接口测试
顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主要分为功能测试,性能测试,稳定性测试,安全性测试等。
在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比,是每个公司开展自动化测试的首选。
下面我们以一个HTTP接口为例,完整的介绍接口自动化测试流程:从需求分析到用例设计,从脚本编写、测试执行到结果分析,并提供完整的用例设计及测试脚本。
2、基本流程
基本的接口功能自动化测试流程如下:
需求分析 -> 用例设计 -> 脚本开发 -> 测试执行 -> 结果分析
3、需求分析
需求分析是参考需求、设计等文档,在了解需求的基础上还需清楚内部的实现逻辑,并且可以在这一阶段提出需求、设计存在的不合理或遗漏之处。
如:豆瓣电影搜索接口,我理解的需求即是支持对片名,演职人员及标签的搜索,并分页返回搜索结果。
4、用例设计
用例设计是在理解接口测试需求的基础上,使用MindManager或XMind等思维导图软件编写测试用例设计,主要内容包括参数校验,功能校验、业务场景校验、安全性及性能校验等,常用的用例设计方法有等价类划分法,边界值分析法,场景分析法,因果图,正交表等。
针对豆瓣电影搜索接口功能测试部分,我们主要从参数校验,功能校验,业务场景校验三方面,设计测试用例如下:
5、脚本开发
依据上面编写的测试用例设计,我们使用python+nosetests框架编写了相关自动化测试脚本。可以完整实现接口自动化测试、自动执行及邮件发送测试报告功能。
5.1相关lib安装
必要的lib库如下,使用pip命令安装即可:
pip install nose
pip install nose-html-reporting
pip install requests
5.2接口调用
使用requests库,我们可以很方便的编写上述接口调用方法(如搜索q=刘德华,示例代码如下):
#coding=utf-8
import requests
import jsonurl = 'https://api.douban.com/v2/movie/search'
params=dict(q=u'刘德华')
r = requests.get(url, params=params)
print 'Search Params:\n', json.dumps(params, ensure_ascii=False)
print 'Search Response:\n', json.dumps(r.json(), ensure_ascii=False, indent=4)
在实际编写自动化测试脚本时,我们需要进行一些封装。如下代码中我们对豆瓣电影搜索接口进行了封装,test_q方法只需使用nosetests提供的yield方法即可很方便的循环执行列表qs中每一个测试集:
class test_doubanSearch(object):@staticmethoddef search(params, expectNum=None):url = 'https://api.douban.com/v2/movie/search'r = requests.get(url, params=params)print 'Search Params:\n', json.dumps(params, ensure_ascii=False)print 'Search Response:\n', json.dumps(r.json(), ensure_ascii=False, indent=4)def test_q(self):# 校验搜索条件 qqs = [u'白夜追凶', u'大话西游', u'周星驰', u'张艺谋', u'周星驰,吴孟达', u'张艺谋,巩俐', u'周星驰,大话西游', u'白夜追凶,潘粤明']for q in qs:params = dict(q=q)f = partial(test_doubanSearch.search, params)f.description = json.dumps(params, ensure_ascii=False).encode('utf-8')yield (f,)
我们按照测试用例设计,依次编写每个功能的自动化测试脚本即可。
5.3结果校验
在手工测试接口的时候,我们需要通过接口返回的结果判断本次测试是否通过,自动化测试也是如此。
对于本次的接口,我们搜索“q=刘德华”,我们需要判断返回的结果中是否含有“演职人员刘德华或片名刘德华”,搜索“tag=喜剧”时,需要判断返回的结果中电影类型是否为“喜剧”,结果分页时需要校验返回的结果数是否正确等。完整结果校验代码如下:
class check_response():@staticmethoddef check_result(response, params, expectNum=None):# 由于搜索结果存在模糊匹配的情况,这里简单处理只校验第一个返回结果的正确性if expectNum is not None:# 期望结果数目不为None时,只判断返回结果数目eq_(expectNum, len(response['subjects']), '{0}!={1}'.format(expectNum, len(response['subjects'])))else:if not response['subjects']:# 结果为空,直接返回失败assert Falseelse:# 结果不为空,校验第一个结果subject = response['subjects'][0]# 先校验搜索条件tagif params.get('tag'):for word in params['tag'].split(','):genres = subject['genres']ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8')))# 再校验搜索条件qelif params.get('q'):# 依次判断片名,导演或演员中是否含有搜索词,任意一个含有则返回成功for word in params['q'].split(','):title = [subject['title']]casts = [i['name'] for i in subject['casts']]directors = [i['name'] for i in subject['directors']]total = title + casts + directorsok_(any(word.lower() in i.lower() for i in total),'Check {0} failed!'.format(word.encode('utf-8')))@staticmethoddef check_pageSize(response):# 判断分页结果数目是否正确count = response.get('count')start = response.get('start')total = response.get('total')diff = total - startif diff >= count:expectPageSize = countelif count > diff > 0:expectPageSize = diffelse:expectPageSize = 0eq_(expectPageSize, len(response['subjects']), '{0}!={1}'.format(expectPageSize, len(response['subjects'])))
5.4执行测试
对于上述测试脚本,我们使用nosetests命令可以方便的运行自动化测试,并可使用nose-html-reporting插件生成html格式测试报告。
运行命令如下:
nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-report=TestReport.html
5.5发送邮件报告
测试完成之后,我们可以使用smtplib模块提供的方法发送html格式测试报告。基本流程是读取测试报告 -> 添加邮件内容及附件 -> 连接邮件服务器 -> 发送邮件 -> 退出,示例代码如下:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartdef send_mail():# 读取测试报告内容with open(report_file, 'r') as f:content = f.read().decode('utf-8')msg = MIMEMultipart('mixed')# 添加邮件内容msg_html = MIMEText(content, 'html', 'utf-8')msg.attach(msg_html)# 添加附件msg_attachment = MIMEText(content, 'html', 'utf-8')msg_attachment["Content-Disposition"] = 'attachment; filename="{0}"'.format(report_file)msg.attach(msg_attachment)msg['Subject'] = mail_subjetmsg['From'] = mail_usermsg['To'] = ';'.join(mail_to)try:# 连接邮件服务器s = smtplib.SMTP(mail_host, 25)# 登陆s.login(mail_user, mail_pwd)# 发送邮件s.sendmail(mail_user, mail_to, msg.as_string())# 退出s.quit()except Exception as e:print "Exceptioin ", e
6、结果分析
打开nosetests运行完成后生成的测试报告,可以看出本次测试共执行了51条测试用例,50条成功,1条失败。
失败的用例可以看到传入的参数是:{"count": -10, "tag": "喜剧"},此时返回的结果数与我们的期望结果不一致(count为负数时,期望结果是接口报错或使用默认值20,但实际返回的结果数目是189。)
7、完整脚本
下载完成之后,使用如下命令即可进行完整的接口自动化测试并通过邮件发送最终的测试报告:
python test_doubanSearch.py
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。
相关文章:

接口测试(全)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程࿰…...

【学习】word保存图片
word中有想保存的照片 直接右键另存为的话,文件总是不清晰,截屏的话,好像也欠妥。 怎么办? 可以另存为 网页 .html 可以得到: 原图就放到了文件夹里面...

【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题
一、组件简介和问题描述 SkyWalking 简介 Apache SkyWalking 是一个开源的 APM(应用性能管理)工具,专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能,帮助开发者快速定位和解决性能瓶颈和故障。…...

三勾软件/ java+springboot+vue3玖玖云电商ERP多平台源码
玖玖云ERP系统、支持多平台订单同步,仓库发货,波次拣货,售后服务,电商ERP一站式解决方案 项目介绍 玖玖云ERP系统基于javaspringbootelement-plusuniapp打造的面向开发的电商管理ERP系统,方便二次开发或直接使用。主…...

020 elasticsearch7.10.2 elasticsearch-head kibana安装
文章目录 全文检索流程ElasticSearch介绍ElasticSearch应用场景elasticsearch安装允许远程访问设置vm.max_map_count 的值 elasticsearch-head允许跨域 kibana 商品数量超千万,数据库无法使用索引 如何使用全文检索: 使用lucene,在java中唯一…...

基于SpringBoot+Vue的蜗牛兼职网的设计与实现(带文档)
基于SpringBootVue的蜗牛兼职网的设计与实现(带文档) 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue等工具:IDEA/Ecilpse、Navicat、Maven 该系统主要分为三个角色:管理员、用户和企业,每个角色都有其独特的功能模块,以满…...
Linux 命令 chown 和 chmod 的区别
Linux 命令 chown 和 chmod 的区别 chown的作用:更改文件或目录的所有者和所属用户组chmod的作用:更改文件或目录的访问权限 chown的作用:更改文件或目录的所有者和所属用户组 $ chown [options] user:group file_pathuser:新文件…...

盘点慢查询原因及优化方法
目录 一,前言二,准备 type重点看 三,慢查询原因和解决 1,sql未加索引2,索引失效3,limit深分页问题 (1)limit深分页为什么会慢(2)深分页优化 4,in…...

【热门】智慧果园管理系统解决方案
随着科技的进步,原有农业种植方式已经不能满足社会发展的需要,必须对传统的农业进行技术更新和改造。经过多年的实践,人们总结出一种新的种植方法——温室农业,即“用人工设施控制环境因素,使作物获得最适宜的生长条件,从而延长生产季节,获得最佳的产出”。这种农业生产方式…...
torch.nn.Sequential介绍
torch.nn.Sequential 是 PyTorch 中一个模块容器,用于将一系列层或模块按顺序连接在一起,简化前向传播过程。在 Sequential 中,所有的子模块会按照添加的顺序被执行,适合那些有明确顺序的神经网络结构,比如卷积神经网络、全连接网络等。 主要特点 按顺序执行: 将多个子模…...
使用verilog设计实现的数字滤波器(低通、高通、带通)及其仿真
以下是一个简单的使用Verilog设计数字滤波器(以有限脉冲响应(FIR)滤波器为例,实现低通、高通、带通滤波器)的基本步骤和代码框架: 一、FIR滤波器原理 FIR滤波器的输出 y [ n ] y[n] y[n] 是输入信号...

KPaaS集成平台中怎么创建数据可视化大屏
KPaaS集成平台的数据可视化大屏是什么? 在KPaaS业务集成扩展平台中,数据大屏是一种数据可视化展示工具,它可以帮助企业将复杂的数据以直观、易理解的方式呈现出来,从而提高数据的可读性和价值。数据大屏的主要特点包括࿱…...
深度学习:网络压缩(Network Compression)详解
网络压缩(Network Compression)详解 网络压缩是一种旨在减小深度学习模型大小,提高其运行效率和降低计算资源消耗的技术。在移动设备和嵌入式系统等资源受限的环境中,网络压缩尤为重要。它允许这些设备利用现有的深度学习技术&am…...
Go pprof性能分析
pprof是Go语言内置的性能分析工具,它可以帮助我们分析程序的CPU使用情况、内存分配等。 pprof 包含两部分: Go语言内置的两个包 net/http/pprof 对 runtime/pprof 的二次封装,一般是服务型应用。比如 web server ,它一直运行。这…...

扬帆出海!九章云极DataCanvas公司惊艳亮相迪拜GITEX Global 2024
近日, 第44届GITEX GLOBAL展会(GITEX GLOBAL 2024)及全球领先的创业与投资盛会Expand North Star 2024在迪拜盛大启幕。九章云极DataCanvas公司惊艳亮相盛会,向全球观众展示智算领域最新研发进展与创新成果,在国际舞台…...
Qt | 元对象+元枚举+Qt自带图标案例
点击上方"蓝字"关注我们 01、QMetaObject >>> QMetaObject 是 Qt 中用于反射的一个类,提供了有关类的信息,包括属性、信号和槽等。它是 Qt 的元对象系统的核心部分,允许您在运行时获取有关 Qt 对象的详细信息。这种功能在使用 Qt 的信号与槽机制、属性系…...
linux升级cmake
如果出现如下报错,就应该升级cmake了! CMake Error at CMakeLists.txt:1 (cmake_minimum_required): CMake 3.1 or higher is required. You are running version 2.8.12.2 -- Configuring incomplete, errors occurred! 官网 可以下载各个版本的cma…...
ip a查看网卡接口信息
ip a命令是用于查看和管理网络接口信息的命令。通过执行ip a命令,可以查看当前系统上所有网络接口的配置信息,包括IP地址、子网掩码、网关、MAC地址等。该命令还可以用于配置网络接口的参数,如设置IP地址、启用或禁用接口等操作。 # ip a 1:…...
centos celery 日志管理
celery经常会产生大量日志,长时间累计下来会对服务器造成一定的压力 1 配置 logrotate 进行日志拆分 logrotate 是 Linux 系统中常用的日志管理工具。我们将使用它来管理 Celery 的日志文件,确保日志文件不会无限增长,并定期拆分、归档和删…...
深度学习(DL)实战——基本概念介绍
公众号:自学编程村,关注后,回复“书籍”,领取1000多本计算机书籍。涵盖语言语法、数据结构算法、AI相关书籍、开发相关等等各种书籍,应有尽有,你总会用到。 关注方式见主页或文章底部。想要加群可从公众号中…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...