接口测试该怎么做

结合工作实际和学习其他人的总结,是时候对“接口测试该怎么做”来一个梳理了。
一、
对于接口测试来说,项目测试用例的重复运行首先是表现在单个测试用例的独立性方面的,也就是说,每一个测试用例的运行除了依赖被测对象和对应的数据库环境外,是不依赖于其他任何测试用例的,并且这个测试用例执行完毕后,对系统来说,也是没有任何痕迹的,这样就保证了每个测试用例运行时,都在一个干净的环境中运行。要实现测试用例的独立性,就必须对被测系统的设计有详细的了解,这样,不会出现测试用例执行后遗漏数据,环境未改变,另外,还需要对测试用例进行详细的设计。另外,要保证测试用例的重复使用,还需要做到测试用例的及时更新,在这个方面,我们是做接口测试的人会维护对应的系统的接口测试用例,要保证,代码每次更新,测试用例都必须全部执行通过。 
接口测试用例的设计方法其实和功能测试用例的设计方法是类似的,因为接口是需要满足需求的,而接口测试所依赖的也是需求说明书,但是,因为接口测试毕竟是通过代码去测试代码,所以,为了保证覆盖率,可能会使用到单元测试的方法,具体的测试用例设计,我考虑的如下,请参考,如果有错误,一起讨论。
输入参数测试:针对输入的参数进行测试,也可以说是假定接口参数的不正确性进行的测试,确保接口对任意类型的输入都做了相应的处理:输入参数合法,输入参数不合法,输入参数为空,输入参数为null,输入参数超长。
功能测试:接口是否满足了所提供的功能,相当于是正常情况测试,如果一个接口功能复杂时推荐对接口用例进行结构划分,这样子用例具有更好的可读性和维护性。
逻辑测试:逻辑测试严格讲应为单元测试,单元测试应保持内部逻辑的正确性,可单元测试和接口测试界限并不是那么清楚,所以我们也可以从给出的设计文档中考虑内部逻辑错误的分支情况和异常; 异常情况测试:接口实现是否对异常情况都进行了处理,接口输入参数虽然合法,但是在接口实现中,也会出现异常,因为内部的异常不一定是输入的数据造成的,而有可能是其他逻辑造成的,程序需要对任何的异常都进行处理。
 
二、
接口测试作为集成测试的一部分,通过直接调用被测试的接口来确定系统在功能性、可靠性、安全性和性能方面是否能达到预期,有些情况是功能测试无法覆盖的,所以接口测试是非常必要的。
接口测试分为两种,一种是webservice接口,走soap协议通过http传输,请求报文和返回报文都是xml格式的,测试时通过工具soapUI进行测试。使用情况比较少;另一种http api接口,走http传输协议,通过路径来区分调用的方法,最常用的是get和post请求。
上面说过,get和post请求是通过路径来区分的,get请求的请求参数都是写在URL里的,格式为:http://url?param1&param2。而post的请求一般都是写在body里的,可能是key-value格式,或者json串格式,也可能是上传一个文件。。。那么问题来了,get请求和post请求的区别在哪里呢?我们百度时,大多数的答案是这样的:
  1、get请求可以在浏览器中请求到,post请求的测试需要借助工具
  2、get请求使用url和cookie传参,post的数据放在body中
  3、post比get更安全,因为传递的参数在url上是看不到的
  4、get请求的url会有限制,而post请求的数据可以非常大
  5、一般get请求是来获取数据,post请求是传递数据的
其实,对于现在飞速发展的互联网来说,上面的说法已经不严谨了。首先,post请求的参数也可以写在url里,但是这种情况不多见;其次表面上看起来,post利用body传参,比get的url传参安全,但其实只要用抓包工具(fiddler,Charles等),post的参数也是一览无余;再次,现在的浏览器非常强大,可以输入支持很长的URL,所以也不再有限制一说了。这么说来,种种区别只有最后一条是最根本的了。
怎么来测试接口呢?根据什么来测呢?这就需要开发提供的接口文档了,接口文档和功能测试的需求说明书的功能是一样的。包括:接口说明、调用的url,请求方式(get or post),请求参数、参数类型、请求参数说明,返回结果说明。有了接口文档后,我们就可以设计用例了,一般接口测试的用例分为以下几种:
1、通过性验证,说白了就是传递正确的参数,是否返回正常的结果
2、参数组合,因为参数有必传和非必传,参数的类型和长度,以及传递时可能业务上的一些限制,所以在设计用例时,就要排列组合这些情况,保证所有情况都能覆盖到
3、接口的安全性,这个又分为几种情况:
  1)绕过验证,比如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我支付时,抓个包将订单金额一改,如果能以我改后的金额支付,那这个借口就有问题了。
  2)绕过身份验证,就是某个功能只有有特殊权限的用户才能操作,那我传递一个普通的用户,是不是也能操作呢
  3)参数是否加密,这个关系到一些账户的安全,比如我们在登录一些网站时,它要将我们的登录信息进行加密,如果不加密我们的信息就会暴露,危害性极大。
  4) 密码安全规则,设置密码时复杂程度的校验。
4、根据业务逻辑来设计用例
用例设计完了,用什么来测试接口呢?我们可以借助一些工具,比如postman和jmeter。postman使用比较简单,可以在列表中选择请求方式,在输入框中输入URL,如果是get请求,直接点击send就可以看返回结果了。
 
三、
1、什么是接口测试?
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等
2、为什么要做接口测试
  a)互联网的快速发展,公司内部系统或与外部系统的关联越来越多,一个业务流程关联多个后端系统,它们的关联都是基于接口来实现,接口测试可以将复杂的系统关联进行简化,只要做好每个接口的测试就能够较好的保证系统质量。
  b)单个系统的变更,是否会影响到关联业务系统,比较难用常规的测试方面来覆盖相关的应用系统(例如使用此接口的外部 系统有N个,不可能每个做功能兼容性测试),但可以通过对接口功能的覆盖来验证是否影响它人对接口的调用。
  c)接口功能比较单一,能够比较好的进行测试覆盖,也相对容易实现自动化持续集成,,可以减少人工回归成本与时间,缩短测试周期。
  d)接口相对于界面功能,会更底层一些,测试覆盖会更容易(如业务在调用接口时做了判断,当不满足条件时链接就不显示,此时从界面无法测试相关功能是否做好判断,通过接口就比较容易)
3、接口测试范围
  a)业务功能(包括正常、异常场景是否实现)
  b)业务规则(覆盖度是否全面)
  c)参数验证(边界、业务规则是否达到要求)
  d)异常场景(重复提交、并发提交、事务中断、多机环境、大数据量测试)
  e)性能测试(响应时间、吞吐量、并发数、资源要求)
  f)安全测试(权限验证、SQL注入等)
4、接口测试的重点
  1、检查接口返回的数据是否与预期结果一致。
  2、检查接口的容错性,假如传递数据的类型错误时是否可以处理。
  3、接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否可以正常处理。
  4、接口的性能,http请求接口大多与后端执行的SQL语句性能、算法等比较相关。
  5、接口的安全性,外部调用的接口尤为重要。
做好接口测试的前提:
1、系统化的接口文档
  传统的接口文档,一般采用word或wiki等系统来记录,从单次使用上似乎比较简单,因为大家会更习惯这样的操作,但这种形式存在比较大的问题:
  a、接口文档非标准化,无法直接与接口测试工具接口使用
  b、接口维护困难,接口有变化时比较难标识清楚,沟通成本很高
系统化接口文档,例如rap(淘宝分源的一个系统),具备接口维护标准化、版本化管理、MOCK测试等功能;对标准化的接口内容做二次开发,可以直接导出Soapui等工具使用的格式,直接导入工具中使用,有以下好处:
  A、接口测试时不再需要手工输入相关字段,节省时间成本
  B、版本化管理,能够清晰的知道哪些接口有变化
  Rap参考 http://rapapi.org/org/index.do
2、标准化的接口规范
接口管理是做好接口测试很重要的前提,如果一个系统有哪些接口都不太清楚,测试就很难覆盖到,接口管理建议采用以下方式:
  A、按接口提供方为单位进行首次划分,按接口使用方进行二次划分,再按业务模块进行细分,分类原则根据内容多少进行优化,不需要固定,如本身接口较少就没有必要分得过细,较多时就需要多划分模块
  如:系统A,提供有 1、2、3、4、5、6、7、8、9 这9个接口,接口分别给B系统、C系统使用,其中1、2为公用接口,3、4、5为B专用,6、7、8、9为C系统专用,划分如下:

  B、按接口链接URL做为唯一,不同的接口参数做为接口变量,接口有参数变更时在原来接口上进行维护,而不是新增加接口

  C、为接口增加版本号,方便清楚哪些接口本次有变更,易于维护用例
文章转自:<https://blog.csdn.net/u012062310/article/details/72475904>
          < https://www.cnblogs.com/yu2000/p/7053089.htm>

原文地址:https://www.cnblogs.com/yinrw/p/9449409.html

时间: 2024-10-02 07:24:33

接口测试该怎么做的相关文章

学习总结--用Postman做http接口测试

Postman做各种类型的http接口测试 首先,做接口测试前要有明确的接口文档(e.g. http://test.nnzhp.cn/wiki/index.php?doc-view-59) ,假设已经在PC上安装好了Postman. 1. 普通的以key-value传参的get请求 e.g. 获取用户信息 Get请求,写入url拼好参数,发送请求,查看结果. 2. 以Json串传参的post请求 e.g. 获取用户余额 Post请求,写入url,点击Body->raw, 写入Json串参数,发送

JMeter学习笔记15-如何用JMeter做接口测试

本文介绍JMeter如何做web service测试,一般来说web服务,一般指的是HTTP请求相关的内容.这里就介绍一下如何利用JMeter做基于HTTP的web接口测试.接口也叫API(Application Programming Interface),很多我们使用的各种APP,上面的内容显示大部分都调用后台web服务器的接口,有些是网站的接口,有些是solr的接口. 什么是接口? 我们这里举例一个生活中场景来帮助你理解接口.加入你去餐馆点餐,看了菜单,告诉服务员,你要一个宫爆鸡丁,过一会

[转]在做自动化测试之前你需要知道的

[转]在做自动化测试之前你需要知道的 2015-06-09 转自:在做自动化测试之前你需要知道的 什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner.jmeter),或自己所写的一段程序,用于生成1到100个测试数据.

(转)在做自动化测试之前你需要知道的

什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner.jmeter),或自己所写的一段程序,用于生成1到100个测试数据.狭义上来讲,通工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代

在做自动化测试前需要知道的

转自: http://www.cnblogs.com/fnng/p/3653793.html 什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner.jmeter),或自己所写的一段程序,用于生成1到100个测试数据.狭义

接口测试学习总结

以下为博主学习接口测试时所做的总结 使用工具以及编程语言根据个人擅长选择,工具与编程语言只是达到目的的辅助,主要是测试的思想以及对业务的熟悉程度,其中或有遗漏持续丰富填补中,欢迎指正. 版权声明:本文为博主原创文章,未经博主允许不得转载.

随感反思20150928

很多时候听被人说到经验,到底经验从何而来,从我自己理解,你会了就是经验,我们做真实的项目也好,虚拟项目.练习项目,都是经验的来源,不要在抱怨自己没有机会参加很多项目,想学什么,自己练习,深入研究,学会了,掌握了,就是你的经验: 我也经常问自己:你现在能做什么?能看懂需求么,能分析需求么,能写测试用例么,能发现bug 么,能管控项目么?貌似有点答不上来,又有点觉得都做过:那么我想做什么么,天天加班,天天点击鼠标发现bug,感觉都不是:多次考虑自己适合做什么,从 开发到测试,从手动测试到自动化.性能

自动化测试的层次化!

单元测试:这一层主要由产品开发同学负责, 比如使用Junit开发方法的单元测试用例, 通常这些用例都是静态的, 测试数据通过各种Mock技术产生. 接口测试:这一层主要由测试同学负责,比如我们需要对Http, HSF, TOP/MTOP等接口进行业务上的功能测试, 验证是否符合接口定义和业务需求,因为是基于业务测试,所以测试数据都是真实地,需要我们调用其他业务方提供的接口生成测试用的数据. UI测试:这一层主要由测试同学负责,使用各种UI自动化工具进行测试脚本的开发,我们可以使用AutomanX

链接库DLL的概念,加载方式的区别

使用LR进行基于windows socket协议做接口测试,只提供了lr_load_dll方法来动态加载动态链接库.之前学习阶段,对TinyXML的学习,使用的静态链接库,当时在程序调用的时候方法也跟LR里的不一样,那问题来了:lib和dll的区别是什么,每种链接库有多少种加载方式,怎么加载呢. 链接库可以向应用程序提供一些函数,变量和类.动态链接库的动态调用(也叫显式调用,手工加载)我是可以运用了,但是静态调用(也叫隐式调用,自动加载).静态链接库:lib中的函数不仅被连接,全部实现都被直接包