接口测试入门基础

1.接口测试概述

1.1 什么是接口测试

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

 

1.2 为何要作接口测试

   a) 现在的系统复杂度不断上升,传统的测试方法成本急剧增长且测试效率大幅降低,接口测试能够提供这种状况下的解决方案。java

  b)  接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,能够减小人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为何能低成本高收益的根源。web

  c)   如今不少系统先后端架构是分离的,从安全层面来讲:算法

         一、只依赖前端进行限制已经彻底不能知足系统的安全要求(绕过前面实在太容易), 须要后端一样进行控制,在这种状况下就须要从接口层面进行验证。数据库

         二、先后端传输、日志打印等信息是否加密传输也是须要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。json

 

1.3 接口测试分类

接口测试大致分为两类:模块接口测试和web接口测试。后端

模块接口测试api

模块接口测试是单元测试的基础,它主要测试模块的调用与返回。常常须要编写一些桩模块与驱动模块。
主要测试要点以下:
检查接口返回的数据是否与预期结果一致。
检查接口的容错性,假如传递数据的类型错误时是否能够处理。
接口参数的边界值。例如,传递的参数足够大或为负数时,接口是否能够正常处理。
接口的性能,接口处理数据的时间也是测试的一个方法。牵扯到内部就是算法与代码的优化。
接口的安全性浏览器

 

Web接口测试安全

web接口测试又可分为两类:服务器接口测试和外部接口测试。
服务器接口测试:是测试浏览器与服务器的接口。用户输入的数据是输入到的前端页面上,怎样把这些数据传递的后台的呢?经过http协议的get与post请求来实现先后端的数据传递。这也可认为是接口测试。
外部接口测试:这个很典型的例子就是第三方支付,好比在咱们应用中在充流量时,交话费时,都会调用第三方支付接口。
主要测试要点以下:
请求是否正确,默认请求成功是200,若是请求错误也能返回40四、500等。
检查返回数据的正确性与格式;json是一种很是常见的格式。
接口的安全性,通常web都不会暴露在网上任意被调用,须要作一些限制,好比鉴权或认证。
接口的性能,这直接影响用户的使用体验。

 

1.4 测试用例设计与原则

由于在实际工做中测试的接口都是基于HTTP协议的,因此下面的测试用例及原则也是针对此类接口。

 

测试用例
正面测试用例:

a覆盖全部的必选参数

b.组合可选参数

c.参数边界值

若是参数的取值范围是枚举变量,须要覆盖全部枚举值

还应考虑实际业务应用场景,去设计输入参数的组合。(这些用例可用来测试功能,做为SMOKE用例。也可未来用于压力测试模拟实际业务场景,但要注意保证用例的独立性,由于压力测试是多线程的。好比咱们测试ACCOUNT 建立接口,NAME是不能重的,在写测试用例时,给NAME赋值时能够加一个时间戳, 这样用例在多线程并发测试时也不会有问题)


负面测试用例:

a.空数据或null

b.包含特殊的字符

c.越界的数据

d.错误的数据


验证点:

1.status code (正常状况下,全部请求都应该返回200)

2.响应信息数据结构(目前大多数状况下,返回信息都是JSON, 咱们应该验证相应的结构当数据信息发生改变时)

3.验证结点的类型

4.验证结点的值 (主要是针对固定的值或者值遵循某些规则,咱们能知道预期的结果的)

5.对于列表,应该根据请求参数,也应该验证列表的长度是否与指望值一致

6.负面测试用例,应验证ERROR INFO是否与实际相匹配

 

测试基本原则

测试用例应该是独立的、可读的、抗变的、可维护的,其实这也是全部自动测试应该遵循的

1.每一个测试用例都是独立的
2.测试用例都是可重复运行的 (这主要是说一些测试数据不能写死,不一样的环境数据可能不一样。在实际工做中,解决方案有二:自已建立所须要的数据,好比你要测试接口须要输入参数ACCOUNTID,你能够先调用建立ACCOUNT API, 而后从响应值拿到ACCOUNTID, 当你3.测试完你要测的接口后,再把新建的ACCOUNT删除,也就是说一个测试用例分了三步。另一种方法就是读取数据库,从数据库获取数据,这种方法在测试开发与测试环境还OK,但若是测线上环境就比较困难了,由于咱们不能随意更新上面的数据,也不能放过多的4.测试数据在上面。所以我我的比较推崇第一种方法,虽然增长开发用例的工做量,但一劳永逸)

5.测试能被运行在不一样的环境里(日常测试环境至少会分DEV/TEST/STAGING/ONLINE,咱们在测试过程当中,应该把域名,token/apikey等应放在一个变量里,当切换环境时,咱们只需改变变量的值便可

6.测试数据与业务相分离(测试数据包括参数接口数据/ 测试执行所须要的系统数据)

7.尽可能统一共用的测试环境变量

8.测试完成后,要删除没必要要的测试数据。

 

1.5 接口测试持续集成

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

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

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

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

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

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

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

 

1.6 接口测试质量评估标准

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

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

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

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

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

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

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

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

 

 

1.7 接口测试流程

1、需求评审,熟悉业务和需求

2、开发提供接口文档

3、编写接口测试用例

4、用例评审

5、提测后开始测试

6、提交测试报告

 

1.8 接口用例模板

接口测试用例模板 (可根据项目实际状况设计增减)

一、项目            测试针对哪一个项目

二、模块            哪一个功能模块

三、用例id

四、接口名称

五、用例标题      测试用途归纳

六、请求方式      GET/POST

七、请求url        URL地址

八、请求参数

九、前置条件       执行当前请求依赖的条件,不知足就不能正确执行

十、结果验证     预期结果

十一、请求报文     能够不写

十二、返回报文  必定要写,这里应该是你请求返回的真实结果

1三、测试结果    经过/失败

1四、测试人员   

 

2.Http协议简述

2.1 简介

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。

HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

 

2.2 请求响应结构图

 

2.3 工做流程

一次HTTP操做称为一个事务,其工做过程可分为四步:

1)首先客户端与服务器创建链接。

2)创建链接后,客户端发送一个请求给服务器。

3)服务器接到请求后,给予相应的响应信息。

4)客户端接收服务器所返回的信息经过浏览器显示在用户的显示屏上,而后客户端与服务器断开链接。

若是在以上过程当中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来讲,这些过程是由HTTP本身完成的,用户只要用鼠标点击,等待信息显示就能够了。

 

2.4 主要特色

HTTP协议的主要特色可归纳以下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。
3.灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无链接:无链接的含义是限制每次链接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。另外一方面,在服务器不须要先前信息时它的应答就较快。

HTTP的报文并不是是直接交付给用户去看的,最多见的场合是HTTP协议将超文本交付给浏览器或者其余超文本解析的软件来进行处理,超文本可使用任意的标签语言如HTML,XSL,XML,XHTML。

 

2.5 http状态码简述

每发出一个http请求以后,都会有一个响应,http自己会有一个状态码,来标示这个请求是否成功,常见的状态码有如下几种:

一、200 2开头的都表示这个请求发送成功,最多见的就是200,就表明这个请求是ok的,服务器也返回了。

二、300 3开头的表明重定向,最多见的是302,把这个请求重定向到别的地方了,302重定向,至关电话呼叫转移

点击一个页面,跳转到另一个页面

三、400 400表明客户端发送的请求有语法错误,401表明访问的页面没有受权,403表示没有权限访问这个页面,404表明没有这个页面,404路径不存在

四、500 5开头的表明服务器有异常,500表明服务器内部异常,504表明服务器端超时,没返回结果

 

2.6 cookie与session的区别:

  1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookies是服务器在本地机器上存储的小段文本并随每个请求发送至同一个服务器。Cookie最先在RFC2109中实现,后续RFC2965作了加强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并无在HTTP的协议中定义;

3)Session是针对每个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪一个用户session变量,这个值是经过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来讲:当你访问一个使用session 的站点,同时在本身机子上创建一个cookie,建议在服务器端的SESSION机制更安全些.由于它不会任意读取客户存储的信息。

 

 由以上比较,因此我的建议:

 1.将登录信息等重要信息存放为session

 2.其余信息若是须要保留,能够放在cookie中

 

2.7 GETPOST方法的区别

1.通常来讲,get是从服务器上获取数据,post是向服务器传送数据。

2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中能够看到。post是经过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一块儿传送到ACTION属性所指的URL地址。用户看不到这个过程。

3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4. get传送的数据量较小,通常不能大于2KB。post传送的数据量较大,通常被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。(IIS是一种Web(网页)服务组件)

5. get安全性很是低,post安全性较高。可是执行效率却比Post方法好。

 

由以上比较,提供建议以下:

一、      get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式

二、      在作数据查询时,建议用Get方式;而在作数据添加、修改或删除时,建议用Post方式;

 

 

3. 接口测试工具简述

3.1 jmeter工具

3.1.1 简介

Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序);能知足接口功能自动化、批量数据准备、性能测试等多重需求;当前业界最主流的接口测试工具之一,不少公司的接口自动化平台和性能测试平台都是基于其内核扩展的,不只适合我的学习和使用,更适合规模化和团队化使用。

 

3.1.2 jmeter优点与缺点

  优点:

  1. 开源,他是一款开源的免费软件,使用它你不须要支付任何费用
  2. 小巧,相比LR的庞大(最新LR12将近4GB),它很是小巧,不须要安装,但须要JDK环境,由于它是使用java开发的工具。
  3. 支持功能扩展开发。
  4. 学习成本比较低,容易上手。
  5. 验证功能时候,可以跳过前端页面数据限制,验证服务端对数据是否有限制等

缺点:

  1. 支持想协议没有loadrunner多,不过目前主流协议基本上都支持
  2. 压测的结果分析报表没有loadrunner详细丰富,不过一些主要的性能指标都支持生成展现了,好比TPS,QPS,吞吐量等

 

 

3.1.3 jmeter简单使用步骤

前置条件:由于jmeter是纯java语言编写的一款工具,因此运行此工具须要先配置好jdk,具体怎么配置此处不讲解,本身搜索一下配置步骤便可。

 

1.打开jmeter工具后,右击Test Plane(测试计划),新建一个线程组(Thread Group),以下图所示(此步骤说明以中文形式界面,须要英文形式的请自行修改语言配置)

 

2.根据收集到的接口信息(此处以HTTP协议接口为例子讲解),右击线程组,新建个HTTP请求,并填写请求相关信息:

 

 

 3.根据实际须要,增长配置文件。

右击线程组,添加HTTP请求默认值(假如一个线程组中全部接口的协议,ip和端口等数据是同样的,能够添加这个配置,而后线程组的那些接口请求就能够不用每一个单独去写协议,ip,端口等数据了,由于它们默认使用了这个HTTP请求默认值配置中的数据);

还能够增长CSV数据文件设置(给请求中的参数进行参数化的一个配置文件,具体如何配置请自行搜索,很简单,此处不作讲解)

HTTP信息头管理器(这个配置文件通常都必须添加的,在此配置文件对请求头信息进行配置)以下图所示:

 

4.新增监听器配置文件

能够右击线程组或右击HTTP请求新增查看结果树(察看结果树在HTTP请求下面,则只显示该请求的请求响应状况,在线程组下面,则显示整个线程组下全部HTTP请求响应结果)

还能够右击线程组新增聚合报告(用来查看压测结果的监听器)

也能够右击HTTP请求,添加保存响应文件(能够根据实际须要,保存请求失败的响应结构到指定文件中,压测完成后便于对失败请求进行分析查看)

 

 

5.添加响应断言

右击HTTP请求,添加响应断言(判断请求是否成功),便于查看请求是否成功以及统计压测事后的失败率。响应断言仅仅是判断响应中是否包含某字符串,至于其余断言能够根据实际须要进行选择。

 

 

 6.其余经常使用插件简介

逻辑控制器:有时候脚本可能会比较复杂,这时候咱们能够利用逻辑控制器,使脚本可以顺利开发出来。

 

 

 

脚本调试请求:

有时候咱们开发脚本过程当中,存在许多参数,咱们要查看参数的取值是否按照咱们但愿的进行取值,这时候咱们能够添加个Debug Sampler:请求,查看每一个参数的取值状况。

 

 

其余的插件,建议根据实际开发过程当中须要用到的时候再去自行查询用法,反正也是比较简单的,这里就不一一说明了。

 

 

3.2 badboy录制工具

有时候咱们须要开发大量接口,这时候咱们能够先利用badboy工具录制脚本,而后保存成.jmx文件,再把这个文件导入到jmeter中去,进行必定修改而后便可完成大量脚本的开发工做。

具体使用方法此处就不介绍了,至关简单,须要用到的时候自行查找教程就行了。

相关文章
相关标签/搜索