热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【重要】接口测试----必知常见问题解答(面试常会被问到)

业务稳定为啥要测接口?为了回归。而且接口有个好处,定位问题简单,一出问题基本都是服务端的问题,而且肯定是和这个接口相关的代码,不用花时间再去抓包->分析(->撕逼)对

业务稳定为啥要测接口?

  为了回归。而且接口有个好处,定位问题简单,一出问题基本都是服务端的问题,而且肯定是和这个接口相关的代码,不用花时间再去抓包->分析(->撕逼)

 

对于page的接口测试,测试点如何设计?

  第一页、中间页、最后一页,那么如何获取到的页数就是最后一页?让开发协助写获取最后一页的接口,测试来调用。

 

接口测试是否成功的校验点是?

  (1)从reponse中是否包含指定内容开始。

  (2)扩展到数据库的校验

 

接口测试的用例验证点(容错性验证)?

  ADD/MOD(添加/修改):

  (1)字段边界值,最大最小字符,为空以及格式校验

  (2)重复提交相同的参数

  (3)权限校验

  (4)业务逻辑

  DEL:(删除)

  (1)删除不存在的

  (2)删除无权限删除的

  (3)删除后再添加相同的

  (4)重复删除

  LST:(列表)

  (1)为空时获取

  (2)数量大时获取

  (3)分页

  (4)获取无权限获取的  

 

接口测试的本质?

  通过测试参数的排列组合验证返回值/数据库变更是否符合预期,从而确定接口相关代码是否正确。

 

接口测试的优点?

  (1)简单(对于开发基础比较好的同学来说)

  (2)稳定(成功率高,很少出现ui自动化的各种状况)

  (3)效率(1个接口下的100条用例几秒可执行完成)

  (4)可信(ui自动化测试报告天天执行,一堆fail,由于各种环境问题、兼容等问题导致排查测试报错的原因较麻烦)

  (5)时间(用例编写时间短,相对来说复用性高)

 

简单的一个接口测试(用例编写、开始执行)的步骤?

  (1)开始编写前置条件、入参、返回参数、预期结果等测试相关的信息

  (2)运用工具去执行测试用例或者执行自己写的脚本

  (3)校验返回结果是否正确

 

接口测试是什么?

  接口测试是功能测试不可或缺的一部分,抛开了前段的逻辑和限制对于服务器的功能进行了完整的测试,一个好的功能测试人员应该充分了解所测系统有多少个接口,接口的核心参数和响应,完成对接口代码的走读,接口有没有白名单,防刷,内部接口和外部接口等。

 

接口测试的作用是什么?

  从接口测发起的测试弥补了界面测试的遗漏点,能将接口测试纳入功能测试的一部分,测试的完整性得到了很大的提高,界面测试起码遗漏了如下的信息:

  (1)服务器端接口参数校验

  (2)接口是否存在安全漏洞或者逻辑漏洞,实时性,防刷

  (3)接口是否存在越权的可能

 

接口测试注意点?

  【第一步:看】

  (1)、看接口的请求参数构造是否合理

  (2)、看所传参数有无敏感参数需要加密传输。比如说用户userid、password等数据如果不使用https进行通信,最好使用加密的方式进行传输,这也是业界通用的标准,并且入库也需是加密的

  (3)、看所测服务的代码。第一看对于传入参数的校验部分,第二是看整体逻辑处理部分。举个例子,大家在测试过程中经过会遇到如图五所示,有多个必填或者选填项、输入条件特别多、每个输入条件都需要做校验。有些测试人员会对此类问题用正交的方式一项一项测试,这类效率太慢。个人认为效率最高的方式为对于接口参数的校验,以静态测试为主,review代码的过滤条件,页面控件实际输入测试为辅助。很多的输入界面,其中判空处理是必须的。开发代码中常用的一个判空函数是if(xxx.isempty())。首先界面类查找是否有控件对象未使用该函数,若未使用肯定存在bug;其次即使使用这个函数也是有bug,该函数并未完全满足需求。这个函数漏掉了输入空格的情况,正确的做法是if(xxx.trimme().isempty())。那么如果在全工程内,搜索isempty,对比发现bug,最后可以选择一个输入项进行测试,通过后所有输入控间判空测试均告完毕。

  (4)、看接口的返回体是否返回一些不必要的敏感信息,返回格式是否合理

  【第二步:改】

  (1)请求体中参数的常规修改。常规修改就是通用的边界值方法,如极大值、极小值、极长值、null、空。未对这些值做校验的后果可大可小。小的方面仅仅是服务器throw一个统一的错误提示,如网络错误等。中等一点的为前端页面会返回如图六形式的内部错误,这种错误会泄露一些敏感信息。严重的后果可能就是影响现有或者后续业务,使得业务往不可控的方向进行。

  (2)与业务强相关的参数修改。

  (3)请求消息体中的字段修改。有些人习惯在COOKIE中传输大量的信息,也是值得关注的测试点。

 

接口测试的主要关注点?

  (1)业务逻辑(业务逻辑覆盖)

  (2)响应结构

  (3)数据格式

  (4)数据正确性(依据来源:查数据库与服务器和接口返回值比较)

 

测试的原则?

  (1)基础配置,如域名,环境配置等,单独文件配置,方便不同环境测试,脚本维护

  (2)明确接口实现什么样的功能,实际需要什么样的功能。是否一致

  (3)接口测试数据太多,用数据驱动模式更有层次,且易维护

  (4)要众多用例中选出冒烟测试用例及可用于性能测试的用例

  (5)先单接口测试,在多接口测试

  (6)测试完成后,需要清理脏数据

 

为什么选择JMeter做为接口测试的技术方案?

   (1) 基于配置实现接口测试的自动化,免代码开发
   (2)丰富的断言能力支持,返回值校验,数据库比对校验
   (3) 比较好的支持流程控制
   (4) 比较完善的结果监听
   (5)和Jenkins易于集成,集成后支持接口性能趋势的查看能力
   (6)非标准协议或者对接方有特殊安全处理的情况可以使用JavaSample的方式处理

 

接口测试的流程?

  类似于功能测试,需求讨论--评审需求—确定需求—产出接口定义—根据需求文档及接口定义设计测试用例(测试用例主要从业务场景,功能以及异常测试几个方面考虑)—评审用例—执行测试

 

需求的频繁变化,做接口测试的测试人员应该如何应对?

  个人觉得此在于团队开发的流程,团队之间的沟通和测试人员的警觉性。

  在开发阶段,需求的变更是一件极为频繁和正常的事情,对于此点团队中的任何一个人都应该正确的心态来面对,团队需要规范的开发流程,良好的沟通方式,测试人员更需要及时跟进软件进度,和开发人员并进齐行,同时,测试与开发需要相对独立的工作环境,总结而言为知己知彼,亦敌亦友。

 

接口测试的原理?

  通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一过程(request→response)

 

接口测试的范围?

  (1)、新增接口的测试;

  (2)、新增业务功能接口测试;

  (3)、整个服务器的接口测试,所需测试接口一次增多,在测试时间足够的条件下,当然需要对所有接口进行测试用例的设计,如果测试较短的情况下,则应该首先根据用户的典型操作对测试接口进行优先级划分,对调用平凡接口需要优先进行测试。

   

 接口测试策略? 

  (1)、接口设计检查(整数型数据位数、浮点型数据精度、字符串数据范围值)
  (2)、接口依赖关系检查
  (3)、接口输入/ 输出验证
    3.1 、条件判断接口
       3.1.1、条件判断的验证:要对判断条件进行验证,则需要知道接口是根据哪些输入项来进行判断的
           3.1.2、异常数据的响应:对于密码重置接口,用户ID不存在、不合法,邮箱输入格式错误、用户邮箱信息不存在或未激活就是测试时需要考虑的异常场景,设计这类输入值,并且检查接口返回的响应码,响应码的正确才能保证客户端根据异常情况来显示相应的提示信息。
    3.2、数据查询接口
       除了像条件判断接口之外根据请求参数设计合法/不合法/正常/异常测试值之外,还需要结合数据库来对查询结果进行验证。
      3.2.1、是否根据 正确的关联数据表进行查询
      3.2.2、验证查询结果是否从数据表中正确项中获取,涉及到多表联合查询时,不同表中的相同项设计不同测试数据来进行验证。
      3.2.3、修改查询结果在数据表中对应项中的数据,使其为空值或客户端相应项的范围值的最大和最小值,查看接口输出是否正确。
    3.3、逻辑运算接口

 后端接口都测试什么?

  回答这个问题,我们可以从接口测试活动内容的角度下手,看一下面这张图,基本反应了当前我们项目后端接口测试的主要内容:

  

 

后端接口测试一遍 ,前端也测试一遍,是不是重复测试了?

 

  回答这个问题,我们可以直接对比接口测试和app端测试活动的内容,如下图为app测试时需要覆盖或考虑内容:

  

 

接口测试持续集成:  

  

 对接口测试而言,持续集成自动化是核心内容,通过持自动化的手段我们才能做到低成本高收益。目前我们已经实现了接口自动化,主要应用于回归阶段,后续还需要加强自动化的程度,包括但不限于下面的内容:

  a) 流程方面:在回归阶段加强接口异常场景的覆盖度,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化。

  b) 结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等

  c) 问题定位:报错信息、日志更精准,方便问题复现与定位。

  d) 结果校验:加强自动化校验能力,如数据库信息校验。

  e) 代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。

  f) 性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。

 

接口测试质量评估标准:

   a) 业务功能覆盖是否完整 

  b) 业务规则覆盖是否完整

  c) 参数验证是否达到要求(边界、业务规则)

  d) 接口异常场景覆盖是否完整

  e) 接口覆盖率是否达到要求

  f)  代码覆盖率是否达到要求

  g) 性能指标是否满足要求

  h) 安全指标是否满足要求

 

 

 

 


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Jenkins实例 Maven项目
    目录一.准备二.创建项目创建maven项目源码管理部分构建编译PostSteps打包构建后操作三.测试一.准备先看初始化设置,如果做完初始化,则跳过安装如下插件MavenInteg ... [详细]
author-avatar
天勤-科技
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有