一、什么是接口?
软件开发,既要做前端,也要做后端,并且后端是整个业务的核心,用于处理业务请求,实现具体的功能;而前端只是提供一个页面给用户看结果以及提供页面给用户做输入。所以整个业务的处理逻辑都在后端。而后端逻辑相对很复杂,所以在开发的时候,会由架构师确定接口,然后再针对这个接口实现其具体的功能。
接口也可以认为是我们要做多少事情,因为在技术层面,如果要实现登录、注册、增、删、改、查等操作,就会先设计好一个模块,说明具体实现哪些功能点,这个功能点应该有哪些输入项,有哪些方法。这个东西就是我们所谓的接口,在java里,接口里包含属性名和方法,所有的方法都是抽象方法,只有方法名,而没有这个方法的具体实现。也就是说:我知道这是一个登录功能,但是登录怎么实现,这完全是不知道的,需要开发人员具体去实现。那么作为我们的开发人员,他就会领到一个任务去实现这个接口。比如,实现登录接口,注册接口等。我们可以认为,虽然他是在实现登录接口、注册接口。也就相当于我们根据这个接口去实现登录功能,注册功能。所以这个接口实际上也就是后台一个具体的功能。
二、什么是接口测试?
实际上我们所说的接口测试就是开发人员把这个接口实现了,他需要去验证这个接口的实现是否正确。但是这是一个后台的功能,这个开发也是一个后台开发,他去验证接口的时候,他不会想让前端人员介入,因为让前台人员介入的话会比较麻烦。那么他就需要一个工具来模拟前端界面。(前端其实就是提供一个窗口,既能让用户输入数据,并且还可以查看结果。)
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及系统内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等.
三、为什么需要进行接口测试?
主要有以下几点:
1. 越底层发现bug,它的修复成本是越低的。
2. 前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。
3. 检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是通过接口可以传入-1元。
4. 如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。
5. 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。
6.现在很多系统前后端架构是分离的,从安全层面来说:
(1)、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。
(2)、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等
四、接口测试分类
软件接口测试主要分为:模块接口测试和web接口测试
1)模块接口测试是单元测试的基础。它主要测试模块的调用与返回
如下例:
def add(a,b):
return(a+b)
class Testadd():
def test_add(result):
if (result == 10):
print("success!")
else:
print("fail!")
result=add(4,6)
Testadd.test_add(result)
这其实就是一个没有使用单元测试框架的单元测试!其实我们也可以把add()方法看成一个接口,这个接口接收两个整数并返回两个整数的和。通过这个例子放大了来看,假如几个开发人员去完成一个系统,他们分别开发一些功能模块,最终数据会在这些功能模块之间传递。当A开发好自己负责的功能模块后会提供相应的接口(类方法、函数),B肯定需要模拟数据调用A写的接口,检查返回值是否正确。
模块接口测试的一些要点如下:
1、检查接口返回的数据是否与预期结果一致。
2、检查接口的容错性,假如传递数据的类型错误时是否可以处理。例如上面的例子是支持整数,传递的是小数或字符串呢?
3、接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否可以正常处理。
4、接口的性能,接口处理数据的时间也是测试的一个方法。牵扯到内部就是算法与代码的优化。
5、接口的安全性,如果是外部接口的话,这点尤为重要。
模块接口测试其实就是单元测试
2)web接口测试又可划分为两类:服务器接口测试和外部接口测试
服务器接口测试:是测试浏览器与服务器的接口。这个很容易理解,我们知道web开发一般分前端和后端,前端开发人员用html/css/javascript等技术。后端开发人用php/java/python/ruby等各种语言。用户输入的数据是输入到的前端页面上,怎样把这些数据传递的后台的呢?通过http协议的get与post请求来实现前后端的数据传递。这也可认为是接口测试,调用的登录接口还是查询接口,传参的是用户密码还是搜索关键字
外部接口测试:这个很典型的例子就是第三方登录,比如你做的新系统免于新用户重新注册的麻烦会提供第三方登录,那用户在登录的时候调用的就是第三方登录的接口,由第三方验证用户名和密码并且返回给当前系统
对于web接口测试来说有以下测试要点:
1、请求是否正确,默认请求成功是200,如果请求错误也能返回404、500等。
2、检查返回数据的正确性与格式;json是一种非常常见的格式。
3、接口的安全性,一般web都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证。
4、接口的性能,web接口同样注重性能,这直接影响用户的使用体验。如果我搜索一个关键字半天结果都没返回,果断弃用。
接下来我讲的都是web接口的测试。
五、web接口分类
web接口主要分为以下两类:
1)http接口:http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式
2)webservices接口:webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍稍加工可以转换成其他语言的数据类型,比如可以转换成Python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等。)
六、接口测试流程
1)需求评审,熟悉业务与需求
2)开发提供接口文档
3)制定接口测试计划
4)编写接口测试用例并评审
5)准备接口测试数据
6)执行接口测试
7)输出接口测试报告
七、接口测试测什么
1.单一接口的测试:接口的输入输出,数据合法性,异常处理
2.多接口组合测试:业务逻辑,业务场景
3. 结构检查
(1)检查返回值的结构是否正确,如是json类型还是xml类型的数据
(2)字段名称是否正确等
八、标准接口文档要素
接口测试文档的主要包括:接口说明、调用url、请求方法(如get\post)、请求参数,参数类型,参数说明,返回参数说明
九、接口测试用例设计
1.通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口上的参数,正常传入,是否可以返回正确的结果。
2.参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称和价格有一个是必传的,这时候就要参数组合了。
3.接口安全
4.根据业务逻辑设计用例:列出测试点,造数据测试对应的测试点
十.接口测试用例模板
测试用例主要包含以下内容:模块,用例编号,用例标题,请求类型,接口地址,请求头,请求参数,前置条件,步骤,预期结果,优先级等
十一、没有接口文档时如何获取接口信息进行接口测试
一般情况下,做接口测试是有接口文档的,但是如果没有接口文档我们怎么做接口测试?这就需要抓包,抓取需要的接口信息,一般如果不想用抓包工具的话则可直接使用浏览器自带的F12开发者模式下的网络标签也可以抓取到接口对应信息,如下图1,如果使用抓包工具则推荐fiddler,Fiddler的具体使用请查看我写的Fiddler相关文章,如下图2是我用Fiddler抓取到的一个登录接口的信息
图1:浏览器F12获取接口信息
图2:Fiddler抓包获取接口信息
上面两种方式都能捕获到接口相关信息,捕获到的信息里面我们发现该接口请求类型为post、请求头和响应头的content-type都是application/json、接口地址为/user/login、不需要添加cookie(token)、以及服务器地址Host、请求参数、返回结果等接口i测试必要信息
虽然上面两种方式都可以获取接口相关信息,建议使用抓包工具,因为抓包工具可以准确知道参数类型
原文:https://www.cnblogs.com/xnancy/p/14626941.html