怎么做接口测试的分享

1.1接口的定义

首先要分清是内部接口还是外部接口

内部接口通常是指:一个系统之间终端客户和服务端的处理事务的接口调用。例如系统开发一个用户查询接口,输入用户名,返回用户信息(性别、年龄、手机号、邮箱地址等),如果用户不存在则返回 null。 这个例子中,用户查询调用的就是用户查询接口。用户查询接口本质上就是程序开发的函数或方法,提供入参与返回值。

外部接口通常是指:一个公司多个系统或多个公司多个系统之间的系统雨系统之间的交互。例如微信、微博所提供的第三方登录接口,如果你开发的系统不想自建用户体系,那么完全可以调用这些接口来实现用户的登录。又比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。

还有下层服务和上层服务之间的接口

✔     首先是应用层

  可以认为是系统所提供的 UI 层功能。对于 Web 系统来说,就是浏览器页面上所提供的功能,如登录、注册、查询、删除等。

✔     server层

 可以理解为服务器所提供数据的处理。

✔     DB层

   数据库(DataBase)主要用来存放数据

 各层之间的调用过程:

 ✔     首先应用层实现了一个用户查询的功能,需要用户输入查询的关键字,并显示查询结果。

✔      当用户使用查询功能时,首先底层调用 Service 层所提供的查询接口,查询接口得到应用层✔     调用的查询数据;然后再通过 DAO 访问数据库,根据用户输入的查询数据,查询数据库中的数据

 ✔     最后,将查询到的数据库数据返回给应用层,用户在应用层看到查询结果

✔     在这个过程中,各层之间的交互就是通过接口,应用层与 Service 主要通过HTTP 接口,✔     ✔     Service 层与 DB 层主要通过 DAO(Data Access Object)数据库访问接口

接口的本质原理及测试

接口你可以简单的理解他就是URL,工作原理就会说URL通过get或者post请求像服务器发送一些东西,然后得到一些相应的返回值,本质就是数据的传输与接收。接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。简答的说就是通过URL像服务器或者其他模块等,传输我们想传输的数据,然后看看他们返回的是不是我们预期想要的

2.1、接口的不同协议

webService 接口:

使用 soap 协议
✔     通过 http 传输,请求报文和返回报文都是 xml 格式的
✔     通常使用的工具 SoapUI、jmeter、loadrunner 等

http api 接口:
 使用 http 协议
       ★     HTTP 是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是从万维网(www,World Wide Web)服务器传输超文本到本地浏览器的传送协议。
       ★     HTTP 基于 TCP/IP 通信协议来传递数据(HTML 文件、图片文件、媒体等)。
       ★     HTTP 协议工作于客户端-服务端架构上。浏览器作为 HTTP 客户端通过 URL向HTTP 服务端(即 Web 服务器)发送请求。

✔     通过路径来区分调用的方法,请求报文都是 key-value 形式的,返回报文一般都是 json 串
✔     最常用的两种请求方式是 get 和 post 等方法
✔     通常使用的工具有 postman、RESTClient、jmeter、loadrunner 等

3.1、接口测试的原理

是指模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端再接收应答的一个过程。

4.1、接口的请求方法和参数

参数是客户端向服务器发送的数据,有的可见,有的不可见。

请求方法常用的有两种

GET 请求
✔     发送指定参数的请求来取得服务器上的某一资源
✔     提交的数据会放在 URL 之后,以?分割 URL 和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456
✔     get 请求数据不会出现在 body 中

POST 请求
✔     向指定资源提交数据,数据被包含在请求体中(提交的数据放在 HTTP 包的 Body 中)
✔     不在 url 中出现

GET 请求和 POST 请求的区别
✔     GET 使用 URL 或 Cookie 传参,而 POST 将数据放在 BODY 中。
✔     GET 的 URL 会有长度上的限制,而 POST 的数据则可以非常大。
       ★     不同浏览器要求不同,如 IE6 要求最大 256
✔     POST 比 GET 安全。
       ★     get 请求能够被缓存,请求会保存在浏览器的浏览(历史)记录中,请求的数据会显示在地址栏中,不安全,请求的 url 能够保存为浏览器书签(收藏夹)
       ★     post 请求不能被缓存,请求不会保存在浏览器浏览记录中;请求的数据不会显示的地址栏中,相对安全;请求的 url 无法保存为浏览器书签
✔     一般 get 请求用来获取数据,post 请求用来发送数据。
✔     get 请求数据只支持 ASCII 类型,post 请求数据类型没有限制,支持二进制数据。

5.1、cookie与session的区别

✔    cookie数据存放在客户的浏览器上,session数据放在服务器上。

✔    cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗

考虑到安全应当使用session。

✔    session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用cookie。

✔    单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

6.1、header 请求头

标头 (header) 是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字串,一般存放cookie、token 等信息。
✔     header 和入参的关系
       ★     它们都是发送到服务器里的参数,但它们是有区别的,header 里存放的参数一般存放的是一些校验信息,比如 cookie,它是为了校验这个请求是否有权限请求服务器,如果有,它才能请求服务器,然后把请求地址连同入参一起发送到服务器,然后服务器会根据地址和入参来返回出参。也就是说,服务器是先接受 header 信息进行判断该请求是否有权限请求,判断有权限后,才会接受请求地址和入参的。
✔     Cookie
       ★     万维网站点使用 Cookie 来跟踪用户。
       ★     Cookie 表示在 HTTP 服务器和客户之间传递的状态信息。
       ★     使用 Cookie 的网站服务器为用户产生一个唯一的识别码。利用此识别码,网站就能够跟踪该用户在该网站的活动。
✔     Session
       ★     Session 是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间,以及如果需要的话,可能还有一定的操作空间。
       ★     Session 是用于保持状态的基于 Web 服务器的方法。
       ★     Session 允许通过将对象存储在 Web 服务器的内存中在整个用户会话过程中保持任何对象。

请求头信息
✔     请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
✔     常用的请求报头如下:
       ★     Accept:浏览器可接受的 MIME 类型。
               ■     MIME 用于设定某种扩展名的文件用哪种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
       ★     Accept-Encoding:浏览器能够进行解码的数据编码方式,比如 gzip。
       ★     Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时会用到。
       ★     Connection:表示是否需要持久连接。从 HTTP/1.1 起,默认都开启了 Keep-Alive,保持连接特性。
       ★     Host:初始 URL 中的主机和端口,它通常是从 HTTPURL 中提取出来的。
       ★     User-Agent:请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。

响应头信息
✔     响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对 Request-URI 所标识的资源进行下一步访问的信息。
✔     常用的响应报头如下:
       ★     Content-Type:表示后面的文档属于哪种 MIME 类型。
       ★     Date:当前的 GMT(国际时)时间。
       ★     Server:包含了服务器用来处理请求的软件信息。
       ★     X-Frame-Options:用来给浏览器指示允许一个页面可否在<frame>、<iframe>或者<object>中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,从而也避免了点击劫持(click jacking)的攻击。

7.1、http的响应状态码

http状态返回代码 1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码

http状态返回代码 2xx (成功)
表示成功处理了请求的状态代码。

200   (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页

http状态返回代码 3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303   (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

304   (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305   (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

http状态返回代码 4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。

400   (错误请求) 服务器不理解请求的语法。
401   (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403   (禁止) 服务器拒绝请求。
404   (未找到) 服务器找不到请求的网页。
405   (方法禁用) 禁用请求中指定的方法。

http状态返回代码 5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错

500   (服务器内部错误)  服务器遇到错误,无法完成请求。
501   (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502   (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503   (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504   (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505   (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。 

8.1、响应数据

当我们在请求一个页面的时候,会显示服务器返回的资源,其中包含了 HTML、CSS 和JavaScript,除此之外,服务器还可以返回图片、视频、字体和插件等类型的资源。这些资源全部使用 HTTP 协议传输。

如果把 HTTP 协议看作是高速公路的话,那么在高速公路上跑的各种拉满不同货物的车辆就是资源。不同的车辆装载的货物不一样,因此它们的目的地也不一样。
✔     如有些车辆拉的是生猪,是要送到屠宰场的;有些车辆拉的是西瓜,是要送到水果批发市场的。

HTTP 协议上传输的资源也是一样,类型不同,作用也不一样。数据就是其中的一种资源,数据是接口的本质。
✔     可以选择不同的运输方式,走高速公路或走铁路,这就是数据传输协议的选择(如HTTP/SOAP)。
✔     西瓜的存放方式,是直接将西瓜堆积到车厢里,还是把每个西瓜放到盒子里再装箱,这就是数据格式的选择(如 TEXT/XML/JSON/CSV)。

JSON 格式
✔     JSON(JavaScript Object Notation,即 JavaScript 对象表示法)是一种轻量级的数据交换格式。它独立于语言和平台,JSON 解析器和 JSON 库支持不同的编程语言。
✔     JSON 具有自我描述性,很容易理解。
✔     JSON 格式是当前主流的接口数据格式之一。从接口的调用方式和数据格式来看, JSON 不是直接给普通用户来使用的,它主要为其他开发者提供调用。
 

9.1、接口测试的流程

  • 熟悉业务和需求
  • 分析接口文档
  • 编写接口测试用例
  • 提测后开始测试
  • 提交测试报告

通用接口用例设计

通过性验证
✔     首先肯定要保证这个接口功能是正确的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。

参数组合
✔     现在有一个操作商品的接口,有个字段 type
       ★     type 传 1 的时候代表修改商品,商品 id、商品名称、价格有一个是必传的,这样就要测参数组合了,type 传 1 的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

接口安全
✔     绕过验证
       ★     如购买了一个商品,它的价格是 300 元,那我在提交订单时候,我把这个商品的价格改成 3 元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
✔     绕过身份授权
       ★     如修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,传一个其他的卖家能不能修改成功。
✔     参数是否加密
       ★     如登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息。
       ★     加密规则是否容易破解。
✔     密码安全规则
       ★     对密码的复杂程度校验。

异常验证
✔     就是不按照接口文档上的要求输入参数,来验证接口对异常情况的校验。
       ★     如必填的参数不填,输入整数类型的,传入字符串类型,长度是 10 的,传 11
       ★     必传非必传、参数类型、入参长度。
根据业务逻辑设计用例

✔     就是根据系统的业务来设计用例,这个每个公司的业务不一样,就得具体的看自己公司的业务了,其实这也和功能测试设计用例是一样的。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值