接口测试
1.什么是接口?
1. 接口有哪些类型
-
接口一般分为两种
-
程序内部的接口
方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。
-
系统对外的接口
比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。
-
-
接口的分类
-
webservice
webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
-
http接口(api)
http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
-
2. API
(Application Programming Interface)应用程序编程接口 。是一些预先定义的函数。目的是提供应用程序与开放人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
2.接口测试
2.1 什么是接口测试
百科:
接口测试
是测试系统组件间接口
的一种测试。接口测试
主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
2.2 接口测试的优点
- 接口比较稳定,维护成本是最低的
- 与UI相比,稳定、执行速度快、反馈迅速
- 比单元测试更贴近业务场景
- 接口测试可以做到更多的覆盖场景
- 接口测试可以更快的发现服务端的问题
2.3 接口文档
- 接口描述
- 请求
- 请求方式
- url
- 参数及说明
- 响应
- 响应数据参数列表解释
2.4 接口测试用例设计
- 功能测试
- 单接口功能
- 正向功能:(通过性测试)
- 仅必填参数
- 全部参数
- 参数组合
- 反向测试:(异常测试)
- 参数异常:无参、少参、多参、错误参数
- 数据异常:数据位空、长度不符、类型不符、错误数据
- 业务数据异常:结合业务功能考虑输出的各种异常返回情况
- 正向功能:(通过性测试)
- 业务场景功能(多接口):接口间的数据依赖
- 单接口功能
- 性能测试
- 响应时长
- 吞吐量
- 并发数
- 服务器资源使用率(网络、cpu、内存等的使用率)
- …
- 安全测试
- 敏感数据是否加密
- 举例:淘宝登录信息在前端进行加密后发送请求给后端
- post、get的选用
- SQL注入
- 其他
- 敏感数据是否加密
2.5 测试用例
- 单接口测试
- 场景测试(多接口)
3.Postman(接口测试工具)
3.1 Postman是什么?
是一款非常流行的http接口测试工具
3.2 Postman有几种安装方式
- Google Chrome插件安装
- 安装app(建议)
3.3 Postman的基本使用
3.3.1 请求与集合(request & collection)
-
点击+号,“create new collection” 创建一个新集合
-
在此处修改collection名称
-
点击"add a request" 或 点击collection右侧 ··· 菜单栏,然后选择"Add request"
-
在此处修改request名称
-
输入request的类型和url
-
输入request携带参数Params的"key-value"
-
或者点击右侧"Bulk Edit"批量编辑变量
-
点击上方"Save"按钮保存
-
点击右侧”Send“发送request
3.3.2 环境与变量(environment & variable)
一般我们会创建三个环境:
开发环境
、测试环境
和生产环境
- 创建环境和环境变量(Environment Variable)
-
点击右上方"小眼睛",可以查看当前所处环境、环境变量和全局变量
-
如果当前没有环境,点击右上方"add",添加一个环境,否则点击"Edit",可以编辑当前环境
-
此处修改环境名称
-
这里输入环境变量
VARIABLE
和其初始值INITIAL VALUE
-
点击“Save”保存
-
可以点击右侧 ··· 菜单栏,点击"Export"将环境变量导出
-
创建全局变量(Global Variable)
- 同环境变量,点击右上方"眼睛",如果当前没有全局变量,选择Global后的"add"添加,否则选择"Edit"编辑
-
输入全局变量VARIABLE和初始值INITIAL VALUE
-
可以通过"Export"将全局变量导出
- 创建集合变量(Collection Variable)
- 选择一个collection
- 选择Variables变量
- 输入
VARIABLE
变量名和INITIAL VALUE
初始值
- 通过脚本代码创建变量
- 还可以通过断言获取和删除变量
3.3.3 变量作用域
按从宽到窄的顺序,这些范围包括:全局、集合、环境、数据和本地
- 全局变量使您能够访问集合、请求、测试脚本和环境之间的数据。全局变量在整个
工作区
中都可用。由于全局变量在Postman中具有最广泛的可用范围,因此它们非常适合测试和原型设计。在以后的开发阶段,请使用更具体的作用域。 - 集合变量在集合中的整个请求中都可用,并且独立于环境。集合变量不会根据所选环境而更改。如果您使用的是单个环境,例如用于身份验证或 URL 详细信息,则集合变量是合适的。
- 环境变量使您能够将工作范围限定在不同的环境中,例如本地开发与测试或生产。一次可以有一个环境处于活动状态。如果您有单个环境,则使用集合变量可以提高效率,但环境允许您指定
基于角色的访问级别
。 - 数据变量来自外部 CSV 和 JSON 文件,用于定义在使用
Newman
或Collection Runner
运行集合时可以使用的数据集。数据变量具有当前值,这些值不会在请求或集合运行之后持续存在。 - 局部变量是在请求脚本中访问的临时变量。局部变量值的作用域为单个请求或集合运行,并且在运行完成后不再可用。如果需要一个值来覆盖所有其他变量作用域,但不希望该值在执行结束后保留,则局部变量是合适的。
3.3.3 环境切换和变量的使用
- 通过右上方下拉菜单栏选择所处环境
- 变量用 "{{}}"双层大括号包裹
3.3.4 批量运行 & 参数化
- 点击collection 右侧的 ··· 菜单栏
- 选择Run collection(运行集合),同时运行集合中所有的请求
- 选择文件,上传我们的数据文件,可以是
json
和csv
格式 - “application/json” 选择上传文件的类型,"Preview"预览文件内容
- 按需勾选四个选项
- 填写Iteration(迭代)次数,一般文件识别成功会自动填入
- 填写Delay延时
- 点击”Run“运行
3.3.5 Assert(断言)
**断言(assertion)**是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。
常用断言:
- Response body:contains string(响应体中是否包含某个内容)
- Response body:is equal to a string string(响应体中是否等于某个字符串)
- Response body:json value check(响应体检测某个json值)
- Response header:content-type header check(检验是否包含响应头)
- Response time is less than 200ms(响应时间小于200ms)
- Status code:code is 200(判断响应码是否是200)
3.3.6 关联
以第一个请求的响应数据作为第二个请求的入参
- 选择request1
- 选择Tests
- 在Tests中获取request1响应的值,并设置为全局变量
- 选择request2
- 调用request1中设置的变量
- 最后通过"Run Collection"同时运行
3.3.7 授权
- 输入request
- 选择"Authorization"授权
- "Type"下拉菜单栏可以选择授权的类型
- 在右侧填写每个类型对应所需的参数
-
授权类型
Type 解释 No Auth 无身份验证,请求不需要授权时可选 API Key 接口密钥,可以在请求头或查询参数中向API发送键值对 Bearer Token 持有者令牌,允许请求使用访问密钥(如JSON Web令牌(JWT))进行身份验证 Basic Auth 基本身份验证 Digest Auth 摘要式身份验证 OAuth 1.0 使客户端应用程序能够访问第三方API提供的数据 OAuth 2.0 在 OAuth 2.0 中,首先检索 API 的访问令牌,然后使用该令牌对将来的请求进行身份验证。 Hawk Authentication Hawk身份验证,能使用部分加密验证来授权请求 AWS Signature AWS签名,AWS 是 Amazon Web Services 请求的授权工作流。AWS 使用基于键控 HMAC(哈希消息身份验证代码)的自定义 HTTP 方案进行身份验证。 NTLM Authentication NTLM 身份验证,Windows 质询/响应 (NTLM) 是 Windows 操作系统和独立系统的授权流。 Akamai EdgeGrid Akamai EdgeGrid 是由 Akamai 开发和使用的授权助手。 - Basic Auth
1. "Type"下拉菜单栏中选择"Basic Auth"
2. 在用户名和密码字段中输入您的 API **用户名和密码**。为了提高安全性,请将这些存储在变量中。
3. 用户名和密码存放在请求的Header中
-
Digest Auth
使用
摘要式身份验证
,客户端向 API 发送第一个请求,服务器通过一些详细信息进行响应,包括只能使用一次的数字(随机数)、领域值和未经授权的响应。然后,发回一个加密的数据数组,包括用户名和密码,以及在第一个请求中从服务器接收的数据。服务器使用传递的数据生成加密字符串,并将其与您发送的数据进行比较,以便对您的请求进行身份验证。- “Type"下拉菜单栏中选择"Basic Auth”
- 如果不希望 Postman 自动提取数据,请选择是,在左列中禁用重试请求。如果这样做,则需要填写ADVANCED中的字段并手动运行每个请求。
- ADVANCED中的字段
Realm(领域)
:由服务器在响应标头中指定的字符串。Nonce(暂时的)
:服务器在响应标头中指定的唯一字符串。Algorithm(算法)
:一个字符串,指示一对用于生成摘要和校验和的算法。邮差支持和算法。MD5``SHA
qop
:应用于邮件的保护质量。该值必须是服务器在响应标头中指定的备选项之一Nonce Count
:客户端在此请求中使用 nonce 值发送的请求数(包括当前请求)数的十六进制计数Client Nonce
:客户端提供的不透明的带引号的字符串值,客户端和服务器都使用它来避免选择的纯文本攻击,提供相互身份验证,并提供一些消息完整性保护Opaque(不透明)
:服务器在响应标头中指定的数据字符串,该字符串将与同一保护空间中的 URI 一起使用
-
OAuth 1.0
当您完成授权设置中的所有必填字段后,Postman 会将 OAuth 1.0 信息附加到请求标头。
- `Signature Method`:API 用于对请求进行身份验证的方法。
- `Consumer Key`:用于向服务提供程序标识使用者的值。
- `Consumer Secret`:使用者用于建立密钥所有权的值。
- `Access Token`:表示使用者访问用户数据的权限的值。
- `Token Secret`:使用者用于建立给定令牌所有权的值。
- `Private Key`:用于生成身份验证签名的私钥。
- `ADVANCED`(高级参数)
- `Callback URL`:URL 服务提供商将重定向到以下用户授权。(如果您的服务器使用 OAuth 1.0 修订版 A,则为必需
- `Verifier`:用户身份验证后来自服务提供商的验证码
- `Time Stamp`:服务器用于防止时间窗外的重放攻击的时间戳
- `Nonce `:客户端生成的随机字符串
- `Version`:OAuth 身份验证协议 (1.0) 的版本
- `Realm`:由服务器在响应标头中指定的字符串
- `Include body hash`:用于对除 以外的请求正文进行完整性检查*的*哈希
-
Hawk Authentication
Hawk 身份验证使您能够使用部分加密验证来授权请求。
Hawk Auth ID
:您的 API 身份验证 ID 值Hawk Auth Key
:您的 API 身份验证密钥值Algorithm
:用于创建消息身份验证代码 (MAC) 的哈希算法ADVANCED
(高级参数)User
:用户名Nonce
:客户端生成的随机字符串ext
:与请求一起发送的任何特定于应用程序的信息app
:凭据和应用程序之间的绑定,以防止攻击者使用颁发给其他人的凭据dlg
:向其颁发凭据的应用程序的 IDTimestamp
:服务器用于防止时间窗口外的重放攻击的时间戳
3.3.8 会话
-
定义
会话(Session)
是一个客户与服务器之间的不中断的请求响应序列。对客户的每个请求,服务器能够识别出请求来自于同一个客户。当一个未知的客户向Web应用程序发送第一个请求时就开始了一个会话。当客户明确结束会话或服务器在一个预定义的时限内不从客户接受任何请求时,会话就结束了。
面试题:Cookie 和 Session 的区别
1.Cookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式
2.Session 是服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中
3.Session 会在一定时间段内存储在服务器上。当浏览器增加时会占有你服务器的性能
4.单独的Cookie存储的数据不可以超过4k,许多网页都限定一个网站最多存储20个cookie
5.将登录信息等关键信息存放在session中,别的不重要的信息如账号名、保存和缓存存放在cookie
6.Session ID:第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在Cookie里面记录一个 `Session ID`,以后每次请求把这个`Session ID`发送到服务器,服务端就能够知道是谁访问了。
- 点击右侧Cookie
- 选中要添加cookie的request,点击"+ Add Cookie"
- 填入cookie的名称和value
- 点击cookie后的“×”删除cookie
3.3.9 工作流
- 可以利用试图工具手动调整
- 在Pre-request Script中通过脚本代码调整
Node.js
-
安装node.js
-
安装newman
npm install -g newman #检查是否安装完成 newman -v npm install -g newman-reporter-html
-
导出所有数据文件(collection、环境变量、数据文件)
-
指令执行
newman run 测试脚本文件 -e 环境变量文件 -r html --reporter-html-export report.html eg: newman run demo.postman_collection.json -r html newman run demo.postman_collection -r html --reporter-html-export report.html
-
命令说明
- run xxx.json:表示要执行的postman脚本,即导出的测试集数据
- -e source:用来指定环境变量文件的路径
- -d source:用来指定测试数据文件的路径
- -r html:用来指定生成的数据结果的类型,如json、html等
- –reporter-html-export source:指定html报告生成的路径;如果不设置该参数,则会默认在当前目录下生成一个名为newman的文件夹