接口测试的基本流程,接口测试的类型介绍

4747 246 2023-07-04


本文介绍了接口测试的基本流程,接口测试的类型介绍。

首先,什么是接口呢?

接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。

系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。

程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。

一、常见接口:

1、webService接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有SoapUI、jmeter、loadrunner等;

2、http api接口:是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。可以使用的工具有postman、RESTClient、jmeter、loadrunner等;

二、前端和后端:

在说接口测试之前,我们先来搞清楚这两个概念,前端和后端。

前端是什么呢,对于web端来说,咱们使用的网页,打开的网站,这都是前端,这些都是html、css写的;对于app端来说呢,它就是咱们用的app,android或者object-C(开发ios上的app)开发的,它的作用就是显示页面,让我们看到漂亮的页面,以及做一些简单的校验,比如说非空校验,咱们在页面上操作的时候,这些业务逻辑、功能,比如说你购物,发微博这些功能是由后端来实现的,后端去控制你购物的时候扣你的余额,发微博发到哪个账号下面,那前端和后端是怎么交互的呢,就是通过接口。

前面说的你可能不好理解,你只需记住:前端负责貌美如花,后端负责挣钱养家。

三、什么是接口测试:

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

OK,上面是百度百科上说的,下面才是我说的

其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人)什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求。

我为啥说接口测试比功能测试简单呢,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。

接口测试主要测哪些方面?

我们将从以下几个方面来进行详细介绍:

一、正确性测试

正确性测试是接口测试的重要组成部分,它确保接口在接收到请求时返回的是正确的结果。

测试的内容包括:

  • 接口是否能够识别请求的内容,并以正确的方式处理请求;

  • 接口是否能够按预期生成结果;

  • 接口是否能够正确的把结果传递给调用者;

二、可靠性测试

可靠性测试是评估接口是否能够在特定条件下长期正常工作的测试。

测试的内容包括:

  • 接口是否能够在高流量环境下正常工作;

  • 接口是否能够在异常状态下正常工作,例如断网,系统故障等;

  • 接口是否能够在长时间的运行后仍然保持正常工作;

三、功能测试

功能测试是评估接口是否能够提供所需的功能的测试。在进行功能测试时,需要根据需求文档编写测试用例,针对每个接口进行测试。测试用例需要覆盖所有的接口,包括正常情况和异常情况。

测试的内容包括:

  • 接口是否能够实现预期的功能;

  • 接口是否能够通过合理的方式处理不合理请求;

  • 接口是否支持预期的数据格式和数据类型;

  • 接口的输入和输出是否符合需求,是否满足业务逻辑;

四、性能测试

性能测试是评估接口的效率和效能的测试,即验证接口在负载高、并发量大的情况下是否能够正常工作。在进行性能测试时,需要模拟高并发的请求,观察接口的响应时间、吞吐量和错误率等指标。通过性能测试可以找出接口的瓶颈,并及时优化,提高系统的性能。

测试的内容包括:

  • 接口在处理请求的速度;

  • 接口的响应时间;

  • 接口的吞吐量(即每秒处理的请求数);

  • 接口的资源消耗情况(例如,内存使用情况,磁盘使用情况等);

五、安全性测试

安全性测试是评估接口的安全性的测试,即验证接口在面对各种攻击时是否能够保护系统的安全。在进行安全性测试时,需要模拟各种攻击情况,包括SQL注入、XSS攻击、CSRF攻击等。通过安全性测试可以发现接口的安全漏洞,及时修复,提高系统的安全性。

测试的内容包括:

  • 接口是否存在漏洞;

  • 接口是否能够防范常见的攻击,例如 SQL 注入攻击,跨站脚本攻击等;

  • 接口是否支持 SSL/TLS 加密;接口是否有效保护用户数据;

六、兼容性测试

兼容性测试,即验证接口在不同的操作系统、浏览器、设备上是否能够正常工作。在进行兼容性测试时,需要测试不同的操作系统、浏览器、设备组合下的接口的兼容性。通过兼容性测试可以保证接口的跨平台兼容性,提高系统的可用性和用户体验。

测试的内容包括:

  • 平台兼容性测试:测试软件在不同平台上的兼容性,例如 Windows、Mac、Linux 等。

  • 浏览器兼容性测试:测试软件在不同浏览器上的兼容性,例如C hrome、Firefox、Safari、Edge 等。

  • 操作系统兼容性测试:测试软件在不同操作系统上的兼容性,例如 Windows、iOS、Android 等。

  • 设备兼容性测试:测试软件在不同设备上的兼容性,例如 PC、手机、平板电脑等。

  • 分辨率兼容性测试:测试软件在不同分辨率下的兼容性,例如屏幕分辨率为 800x600、1024x768、1920x1080 等。

七、压力测试

压力测试,即验证接口在长时间高负载的情况下是否能够正常工作,避免因为负载过高导致系统崩溃或性能下降,影响用户体验。。在进行压力测试时,需要模拟长时间高负载的请求,观察接口的响应时间、吞吐量和错误率等指标。通过压力测试可以发现接口的稳定性问题,并及时优化,提高系统的可靠性。

测试的内容包括:

  • 负载测试:测试软件在高负载情况下的性能能力,例如并发用户数、数据量等;

  • 带宽测试:测试软件在网络带宽受限的情况下的性能能力;

  • 性能测试:测试软件在不同负载下的性能指标,例如响应时间、吞吐量、CPU 和内存使用率等;

  • 稳定性测试:测试软件在长时间高负载情况下的稳定性和可靠性;

  • 可扩展性测试:测试软件在负载增加时的可扩展性能力,例如添加更多服务器是否能够平衡负载;

1. 接口测试基本流程

基本的接口功能自动化测试流程如下:

需求分析 -> 用例设计 -> 脚本开发 -> 测试执行 -> 结果分析

2.1 示例接口

接口名称:豆瓣电影搜索

地址啥的会被屏蔽,发不出来,放在文末了

3. 需求分析

需求分析是参考需求、设计等文档,在了解需求的基础上还需清楚内部的实现逻辑,并且可以在这一阶段提出需求、设计存在的不合理或遗漏之处。

如:豆瓣电影搜索接口,我理解的需求即是支持对片名,演职人员及标签的搜索,并分页返回搜索结果。

4. 用例设计

用例设计是在理解接口测试需求的基础上,使用MindManager或XMind等思维导图软件编写测试用例设计,主要内容包括参数校验,功能校验、业务场景校验、安全性及性能校验等,常用的用例设计方法有等价类划分法,边界值分析法,场景分析法,因果图,正交表等。

针对豆瓣电影搜索接口功能测试部分,我们主要从参数校验,功能校验,业务场景校验三方面,设计测试用例如下:


image.png

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. 测试报告

最终发送测试报告邮件。

上文就是小编为大家整理的接口测试的基本流程,接口测试的类型介绍。

国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)API管理平台软件分析、比较及推荐。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实现接口的方法,实现接口需要哪些关键字?
下一篇:轻松掌握java外观模式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~