接口自动化测试知识总结

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

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 json url = '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): @staticmethod def 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): # 校验搜索条件 q qs = [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(): @staticmethod def 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 False else: # 结果不为空,校验第一个结果 subject = response['subjects'][0] # 先校验搜索条件tag if params.get('tag'): for word in params['tag'].split(','): genres = subject['genres'] ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8'))) # 再校验搜索条件q elif 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 + directors ok_(any(word.lower() in i.lower() for i in total), 'Check {0} failed!'.format(word.encode('utf-8'))) @staticmethod def check_pageSize(response): # 判断分页结果数目是否正确 count = response.get('count') start = response.get('start') total = response.get('total') diff = total - start if diff >= count: expectPageSize = count elif count > diff > 0: expectPageSize = diff else: expectPageSize = 0 eq_(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 MIMEMultipart def 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_subjet msg['From'] = mail_user msg['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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1124265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三分钟带你看懂AI大模型(图文教程)

不废话,直接上干货—— 什么是模型? 通俗地讲,模型是一个基于神经网络构建好的处理器,比如函数yF(x),它能够根据输入x,产生相应的预测y或者输出内容y。什么是训练? 通过输入数据并监督输出结果来…

《CF1278F Cards》

题目描述 考虑如下实验。有一副共 m 张牌的牌堆,且恰好有一张是小丑牌。你将进行 n 次如下操作:将牌堆洗牌,从牌堆顶端抽出一张牌,查看后再放回牌堆。 设 x 表示在本次实验中你抽到小丑牌的次数。假设每次洗牌后,所有…

积木报表重磅更新:移动报表功能全面支持,跨设备无缝对接

在移动互联网时代,移动办公已成为企业数字化转型的重要趋势。然而,传统的报表系统往往只能在 PC 端使用,外出办公、现场数据采集、移动审批等场景下,数据查看和填报受到极大限制。如何打破设备限制,让报表随时随地可访…

【2026年最新网络安全就业方向】网络安全专业的学生毕业后可以从事什么样的工作?

岗位一:渗透测试。 模拟黑客攻击,利用黑客技术,挖掘漏洞,提出修复建议。有些的大厂,例如奇安信,会把渗透岗位分为红蓝两方,对候选人的技术要求比较高,大部分刚入行的新人&#xff0…

普源数字万用表示值不准/开机异常的7种解决方法

普源数字万用表作为电子测量中的常用工具,若出现示值不准或开机异常,会影响测量精度和效率。本文总结了7种常见问题的解决方法,帮助用户快速排查故障,恢复仪器正常功能。检查电池电量与接触 问题:电池电量不足或接触不…

自动化测试基础知识总结

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快自动化测试是指利用自动化工具和脚本,模拟人工操作进行软件测试的过程。它在软件开发中扮演着非常重要的角色,可以提高测试效率、降低成本、…

区块链 Web3 项目开发

区块链 Web3 项目的开发在 2026 年已经进入了“生产力时代”。与早期追求炒作不同,现在的开发更强调实用性(Utility-First)、合规性以及与 AI 智能体(AI Agent)的深度融合。以下是区块链 Web3 项目开发的标准流程与核心…

AbMole丨VcMMAE:从CD20到HER2,赋能多靶点ADC开发的通用平台

VcMMAE(MC-VC-PAB-MMAE,AbMole,M9216)是抗体偶联物(ADC)研究中的关键组件,由微管抑制剂MMAE(单甲基奥瑞他汀E,Monomethyl auristatin E,AbMole,M3…

Launch Template 和 ALB、Target Group、Auto Scaling Group 是什么关系?

一、Launch Template 的作用是什么? 一句话定义(面试版) Launch Template 是 EC2 实例的标准化启动配置,用来告诉 Auto Scaling“新实例该如何创建和配置”。 Launch Template 具体解决什么问题? Auto Scaling 不会“复…

软件测试之bug分析定位技巧

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快1、web前端Web前端就是通常说的网页。互联网公司的前端一般包含如下内容:JavaScript、ActionScript、CSS、HTML(..ML)、Flash、交互式设计、视觉设计web…

普源数字万用表DM3068与是德科技34461A对比分析

在现代电子测量领域,数字万用表作为基础且关键的测试仪器,广泛应用于研发、生产、维修等多个环节。普源精电(RIGOL)的DM3068与是德科技(Keysight)的34461A是两款在中高端市场中颇具代表性的6位数字万用表&a…

基于单片机控制的音乐盒

第2章 系统硬件设计 2.1单片机内部结构 STC89C52 是一种耗能低、性能高CMOS8位微控制器,它基本都是51内核的种类,是新一代增强型单片机,具有8K在系统可编程Flash存储器,加密性好,抗干扰强。STC89C52具有的可编程的Flas…

计算机网络入门必知:从信号到速率,一张图讲清通信基础!

计算机网络入门必知:从信号到速率,一张图讲清通信基础!在学习计算机网络时,很多同学会被“码元”“波特率”“比特率”这些术语绕晕。其实,只要理解了底层的通信原理,这些概念就会变得清晰又有趣。今天我们…

解读|生产级RAG系统落地的10个经验教训

本文为大家解读Contextual AI 联合创始人兼CEO,也是著名的RAG技术先驱,Douwe Kiela 分享的他在企业级 RAG 系统实施与落地中的十大经验教训 。 解读纯属个人观点,欢迎探讨。 本次分享主要针对企业AI系统转化为商业价值的关键难题:…

一文带你了解最吃香的金融类软件测试(附面试文档)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、为什么做金融类软件测试举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班少甚至基本没…

Amazon CloudWatch 的系统化汇总版

一、CloudWatch 是什么(一句话版) Amazon CloudWatch 是 AWS 的集中式监控服务,用来收集、存储、可视化和告警 AWS 资源的指标和日志。 核心关键词: 集中式(centralized) / 托管(managed&#x…

TH2851阻抗分析仪:材料测试的“一站式”技术利器

在材料研发与性能验证的全流程中,精准、高效的参数表征是关键环节。同惠电子TH2851阻抗分析仪凭借灵活的硬件适配与专业软件支持,成为覆盖多类材料的“一站式”测试方案核心,其在高校、军工、新材料领域的落地案例,正展现出强大的…

2026最新软件测试面试热点问题(含答案+文档)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 大厂面试热点问题1、测试人员需要何时参加需求分析?如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工作的…

熬走 3 任领导,从运维转行网安:原来不是我没本事,是赛道选错了

凌晨 1 点,我蹲在机房地上接服务器电源线,后背被空调外机吹得发凉。手机里老板的消息还在跳:“客户数据丢了,天亮前恢复不了你就别来了。” 那是我做运维的第 8 年,手里攥着 11K 的薪资条,看着监控屏上闪烁…

基于单片机控制的汽车电动车窗 系统的设计

2.汽车车窗简介 2.1汽车电动车窗的组成与类型 电动车窗就是在汽车上可以使车窗玻璃自动升降的一个设备。电动车窗的最大优点就是在行车过程当中可以方便的开关门窗,减轻了行驶员在操作过程当中的操作难度。过去的电动车窗一般只存在于高档轿车上,但是现阶…