2023接口自动化测试,完整入门篇
1. 什么是接口测试
顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主要分为功能测试,性能测试,稳定性测试,安全性测试等。
在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比,是每个公司开展自动化测试的首选。
下面我们以一个HTTP接口为例,完整的介绍接口自动化测试流程:从需求分析到用例设计,从脚本编写、测试执行到结果分析,并提供完整的用例设计及测试脚本。
2. 基本流程
基本的接口功能自动化测试流程如下:
需求分析 -> 用例设计 -> 脚本开发 -> 测试执行 -> 结果分析
2.1 示例接口
接口名称:豆瓣电影搜索
地址啥的会被屏蔽,发不出来,放在文末了
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。赶紧去给豆瓣提bug啦- -)
7. 测试报告
最终发送测试报告邮件,截图如下:
8. 资源分享
最后,为方便大家自学软件测试,特意给大家准备了一份13G的超实用干货学习资源,涉及所有测试知识点。
这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
相关文章:

2023接口自动化测试,完整入门篇
1. 什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主…...

2023年股票代持行业研究报告
第一章 股票代持概述 1.1 基本概念 股票代持,或称委托持股,是指实际出资人与名义出资人达成以下约定:名义出资人作为名义股东,在股东名册等公司工商登记信息上出现,而实际上由实际出资人出资并享有投资权益。 股票代…...

《Netty》从零开始学netty源码(三十九)之PoolSubPage的内存分配
目录 PoolSubPage.allocategetNextAvail方法toHandle方法removeFromPool方法 PoolSubPage.allocate 上一篇我们介绍了PoolSubPage的简单知识,当我们需要PoolSubPage的内存时可调用allocate方法查找可分配二进制的位置,具体的源码过程如下: …...

【目标检测论文阅读笔记】Reducing Label Noise in Anchor-Free Object Detection
(Augmentation for small object detection) Abstract 当前的 anchor-free无锚目标检测器 将空间上落在真值框预定义中心区域内的所有特征标记为正。这种方法会在训练过程中产生 标签噪声,因为这些 正标记的特征中的一些 可能位于背景或遮挡…...

金融数字新型基础设施创新开放联合体今日成立
4月18日,“金融数字新型基础设施创新开放联合体”(以下简称:联合体)在上海成立。联合体由上海银行、复旦大学金融科技研究院、中电金信共同发起,首批成员单位汇聚产业链与供给侧的中坚力量:国泰君安证券、太…...

编程语言的发展史
编程语言处在不断的发展和变化中,从最初的机器语言发展到如今的2500种以上的高级语言,每种语言都有其特定的用途和不同的发展轨迹。编程语言并不像人类自然语言发展变化一样的缓慢而又持久,其发展是相当快速的,这主要是计算机硬件…...

巧用千寻位置GNSS软件|点测量采集技巧
点测量是测量中重要的节点,在测量工作的信息处理分析中发挥着重要作用。本期将给各位带来使用千寻位置GNSS软件采集地形点、控制点、快速点、连续点、房角点和倾斜点的操作技巧。 地形点 地形点的设置如图 5.1-9所 示,每次采集一个点,该点需要…...

DHCP原理与配置
目录 一、DHCP工作原理 1)了解DHCP服务 使用DHCP的好处 DHCP的分配方式 2)DHCP的租约过程 分为四个步骤 二、DHCP服务器的配置 1)检查并且安装dhcp有关软件包 2)查看系统的配置文件,并且利用好官方给的参考案…...

软件测试今天你被内卷了吗?
认识一个人,大专学历非计算机专业的,是前几年环境好的时候入的行,那时候软件测试的要求真的很低,他那时好像是报了个班,然后入门的,但学的都是些基础,当时的他想的也简单,反正也能拿…...

做完自动化测试,但别让不会汇报毁了你...
pytest 是一个成熟的全功能Python测试工具,可以帮助您编写更好的程序。它与 python 自带的 unittest 测试框架类似,但 pytest 使用起来更简洁和高效,并且兼容 unittest 框架。pytest 能够支持简单的单元测试和复杂的功能测试,pyte…...

企业级信息系统开发讲课笔记2.4 利用MyBatis实现条件查询
文章目录 零、本节学习目标一、查询需求二、打开MyBatisDemo项目三、对学生表实现条件查询(一)创建学生映射器配置文件(二)配置学生映射器文件(三)创建学生映射器接口(四)测试学生映…...

【天梯赛—不想坑队友系列】L2-003 月饼(java)
目录 第一题: L2-003 月饼 输入格式: 输出格式: 输入样例: 输出样例: 题目分析 题目代码 第二题:德才论 输入格式: 输出格式: 输入样例: 输出样例ÿ…...

电磁兼容(EMC)的标准与测试内容
在国际范围上,电磁兼容标准的制定已经有了70多年的发展历程,最早为了保护无线电通信和广播,国际无线电干扰特别委员会(CISPR)对各种用电设备和系统提出了相关的电磁干扰发射限值和测量方法。到了20世纪60~7…...

滑动平均算法
class Solution { public static int[] maxSlidingWindow(int[] nums, int k) { int right 0; int[] res new int[nums.length -k 1]; int index0; LinkedList<Integer> list new LinkedList<>(); // 开始构造窗口 …...

个人职业发展
职业的本质就是人和社会的交换关系。选择什么职业,等于选择了用什么方式和世界交换。 比如,快递员、小时工靠“体力”;大多数打工者靠“体力智力”;网红靠“资源、平台”;各领域的大神、科学家、艺术家靠“天赋”。 这…...

剑指 Offer 51. 数组中的逆序对
剑指 Offer 51. 数组中的逆序对 难度:hard\color{red}{hard}hard 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7…...

数字化转型迫在眉睫!药企如何应用AI技术加速创新?
导语 | 近年来,随着 AI 等技术的发展应用,数字化、智能化日渐成为各行各业转型升级的新兴力量,其与医药产业的融合创新也逐渐成为当前的新趋势,众多医药制造企业蓄势待发,搭乘数字化的快车,驶入高速发展的快…...

电脑显示屏是怎么显示出图像的?CPU与GPU又是什么关系?
文章目录电脑显示屏是怎么显示出图像的?CPU与GPU又是什么关系?显卡作用明明有了CPU为什么还要GPU?电脑显示屏是怎么显示出图像的?内存与显存所有运算都交给GPU处理可以吗?参考:电脑显示屏是怎么显示出图像的ÿ…...

报名截至在即 | “泰迪杯”挑战赛最后一场赛前指导直播!
为推广我国高校数据挖掘实践教学,培养学生数据挖掘的应用和创新能力,增加校企交流合作和信息共享,提升我国高校的教学质量和企业的竞争能力,第十一届“泰迪杯”数据挖掘挑战赛(以下简称挑战赛)已于2023年3月…...

经验分享:如何有效应对Facebook广告数据波动问题?
Facebook广告作为一种重要的数字营销工具,可以帮助企业和品牌快速获得目标受众的关注和转化。然而,由于广告投放过程的不稳定性,Facebook广告数据波动问题也经常出现。 对于广告主而言,如何应对Facebook广告数据波动问题…...

【Python】逆向解析js代码
目录 1. 打开百度翻译网页,查找翻译结果的网络资源包 2. 获取翻译结果网络资源包的url、请求头、请求体,解析json文件数据 3. 观察请求体字段,发现 query 字段便是我们输入的需要翻译的值 4. ctrl F 快捷键搜索sign值的网络资源包&#x…...

websorm启动vue项目修改内容后自动运行内存溢出
手动启动vue项目正常运行,修改部分内容保存后会自动重新run一下, 这个时候就报错内存溢出,然后很悲伤的需要再手动重启一下。 (在网上查了好多方法就不单独加链接了) 前3个方法都试过对于我的项目无效,第4…...

第05章_数组
第05章_数组 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 数组的概述 1.1 为什么需要数组 需求分析1: 需要统计某公司50个员工的工资情况,例如计…...

Spring Security --- 快速入门
概念 Spring Security是一个功能强大且高度可定制的,主要负责为Java程序提供声明式的 身份验证和访问控制 的安全框架Spring Security的底层主要是 基于 Spring AOP 和 Servlet 过滤器 来实现安全控制它提供了全面的安全解决方案同时授权粒度可以在 Web请求级和方法…...

程序员挣够了钱,到中年失业真的很可怕吗?
借用最近很火的一张图,看看没有工作,你手里的存款够用几年(按每年年化3.5%,利息继续放入理财计算): 如果每年花销在10万左右(折合每个月8333元,应该是比较富足的)&#x…...

【Log and Dump Summary】
开各模块log前,建议先关闭selinux权限,并确定camera logD是已经有打印的,如果没有打印可以用如下命令开启: adb shell setenforce 0adb shell setprop persist.vendor.mtk.camera.log_level 3 adb shell pkill camera*再按以下方法开对应模块的 log: 1. 开MTK Camera2 …...

软考证书找工作有用吗?软考找工作用处大吗
软考证书是衡量IT技术人才能力的一种重要评价标准。 一、软考高级证书对找工作的帮助 1. 竞争力增强 软考高级证书具有一定难度和较高的专业技能要求,拥有该证书的人的技术水平和专业能力会得到认可和尊重,从而增强求职者的竞争力。 2. 拓宽职业发展…...

JavaWeb之谈论项目编码规范_Java版
1. 关于DDD项目结构约定 1.1 项目结构使用DDD整洁架构进行分包 maven项目结构遵从DDD整洁架构分为如下四个顶级包: application - 应用层代码,一般为接口层定义API的实现类和一些结构转化,application不应该承载业务逻辑 domain - 领域层&a…...

Map排序
(一)treeHap 特点:treeMap中的元素根据键的大小自然排序(默认是升序) 1、treeHap遍历测试 import java.io.IOException; import java.util.*; public class Main {public static void main(String[] args)throws IOException {…...

mycat读写分离
1.准备工作 tar包 http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.20.zip jar包 http://dl.mycat.org.cn/2.0/1.21-release/ (下载最新的jar包) 将下载好的jar放到tar中的lib目录下并放入linux系统中 2.创建逻辑库 连接mycat端口8066 账号root 密码12…...