借助工具接口自动化

一、接口测试的简介和分类

1.概念

接口API:Application Program Interface。是软件提供给外部的一种服务,用于做数据传输。

接口测试:对系统或组件之间的接口进行测试,主要校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系

分类:

        外部接口:测试被测系统和外部系统之间的接口(第三方接口如微信支付、支付宝支付,测试正例即可)

        内部接口:内部接口只提供给内部系统使用(测试正例即可);内部接口提供给外部系统使用(测试需全面)

为什么做接口测试?

        (1)系统前后端分离,开发进度不一致。前端快就做mock,后端快就接口

        (2)基于安全考虑,前端验证很容易绕过,直接请求接口,特别:身份证信息、银行卡、金钱交易

        (3)测试推崇的是测试左移,测试尽早介入

接口测试本质:测试接口能否正常的交互数据,权限控制以及异常场景

2.接口的类型

概念:Http和Web服务接口是两种不同的接口类型,它们在设计和使用上有一些区别

Web服务接口:

  • Web服务接口是一种基于标准化协议和消息格式的软件接口,用于实现不同系统之间的集成和交互
  • 使用SOAP或Restful等协议进行通信
  • 数据传输通常采用XML作为消息格式,但也可以使用其他数据格式,如JSON
  • Web服务接口通常使用WSDL描述接口和操作
  • Web服务接口提供了更严格的契约和规范,支持更复杂的功能,如事务管理、安全认证、错误处理等

HTTP接口:

  • HTTP接口是基于HTTP协议进行通信的接口,使用HTTP请求方法(如GET、POST、PUT、DELETE)对资源进行操作
  • 数据传输通常采用各种数据格式,如JSON、XML、Form表单等
  • HTTP接口通常以URL路径来表示资源,可以通过URL参数传递额外的信息
  • 对于简单的应用场景,HTTP接口提供了轻量级、直接和灵活的通信方式

二、接口返回数据和JSON详解

1、JSON格式:三组数据

{error_code:0,msg:"提现成功",data:[]}

error_code:错误码,0成功

msg:对错误码的中文说明

data:真正的返回数据

2、HTML格式

<html>

        <title></title>

        <body>

                <error_code>0</error_code>

                ...

        </body>

</html>

3、XML格式

<?xml?version="1.0"encoding="utf-8">

        <error_code>0</error_code>

        ...

</xml>

三、接口测试协议

URL:协议、主机地址、端口号、资源路径、参数

1、webservice协议:接口地址:http://...............?wsdl

     soap协议,wsdl

     restful规则:

                get获取数据,post提交数据,put修改数据,delete删除数据

2、dubbo协议:接口地址以dubbo://....

      适用于少量数据的传输。大并发。

3、http协议:接口地址:http://

      https:http+ssl安全传输协议,端口443

      http:  端口80

      什么是http传输协议?

       http是超文本传输协议,主要用于浏览器和服务器之间交互数据,交互有两个部分:

      请求:get,post,put,delete

      响应:1XX信息,2XX成功,3XX重定向(跳转不跳值),4XX客户端错误,5XX服务器错误

        https和http的区别

        https是以安全为目标的http通道,简单讲是http的安全版。https相当于在http下加入SSL层,https的安全基础是SSL,因此加密的详细内容就需要SSL。

接口请求四要素:请求URL、请求方法、请求参数、响应数据

请求三部分:请求行、请求头、请求体

响应三部分:状态行、响应头、响应正文

请求:

请求行(Request):请求方式,请求地址,协议及版本

请求头(RequestHeaders):

        Host                         请求的主机地址

        Connection              连接方式(keep-alive保持活跃),控制网络连接是否保持打开状态。

        Origin                       用于指明当前请求来自于哪个站点,仅仅包含站点信息,

                                        不包含任何路径信息

        Accept-Encoding     压缩方式

        Accept-Language    告知服务器,本地支持的语言

        Accept                     客户端接收到的数据格式(告知服务器期望返回的数据)

        X-Requested-With   异步请求方式,判定request来自Ajax请求还是传统请求,

                                        为 XMLHttpRequest 则为Ajax请求

        User-Agent              客户端的用户类型(告知服务器,客户端的配置信息)

        Referer                    来源,告诉服务器该网页是从哪个页面链接过来的

        Cookie                     Cookie信息(请求的)

        Content-Type           请求内容的格式(上传的数据类型)

        Content-Length        内容长度

请求方法:

        GET                         请求指定的页面信息,并返回实体主体

        POST                      向指定资源提交数据进行处理请求(如提交数据或上传文件)。

                                        数据包含在请求体中(body),post请求可能会导致新的资源

                                        的建立或已有资源的修改

        HEAD                      类似于get请求,只不过返回的响应中没有具体的内容,用于获取响应头

        PUT                         从客户端向服务器传送的数据取代指定的文档的内容

        DELETE                  请求服务器删除指定的页面

        CONNECT               http/1.1协议中用来给能够将连接改为管道方式的代理服务器

        OPTIONS                运行客户端查看服务器的性能

        TRACE                     回显服务器收到的请求,主要用于测试或诊断 

请求体(RequestBody,跟请求头Content-Type一一对应):

GET \ POST 它们的区别是什么?

1.POST请求,参数一般不会放在url当中,而是在请求体当中;GET请求参数一般放在URL当中

2.POST请求数据放在body,所以不会有长度的限制,但是GET是放在URL中会有长度的限制

3.GET请求的安全性比POST低,GET请求的参数直接暴露在URL当中

4.GET从服务器获取数据,POST是从服务器传输数据

响应:

        响应行:协议、响应码、响应信息

        响应头:set-cookie(响应的),基本不会太多的关注,基本关注对应的Content-Type,请求的Content-Type是告诉服务器我参数的数据类型,响应的Content-Type是告诉客户端我给你的数据是什么格式

        响应正文:就是具体的数据,然后通过浏览器去进行渲染显示

        状态码:

                1**:信息,服务器收到请求,需要请求者继续执行操作

                2**:成功,操作被成功接收并处理

                3**:重定向,需要进一步的操作以完成请求

                4**:客户端错误,请求包含语法错误或无法完成请求

                5**:服务器错误,服务器在处理请求的过程中发生了错误

常见状态码:常见状态码 【最全状态码展示】-CSDN博客

四、HTTP之cookie、session、token解析

解决http协议无连接、无状态的情况

cookie:

        存储在客户端(本地)中的一串字符,一般不超过4KB。由服务器生成,发给浏览器,把字符保存在本地(cookie存储在本地,安全性较低

session:

        session=secret+cookie

        校验:当我们做登录操作的时候,给服务器发送一个请求,服务器就会给你一个session,secret保存在服务器上。下次登录的时候,服务器会进行反向解码,以确定你的数据都是正确的(session存储在服务器上,加重服务器的压力

token:

        数据客户端能进行保存,并且不影响服务器,也可以不让外面的人去进行伪造

        访问令牌access_token,用于接口中,用于标识接口调用者的身份、凭证。

        1.access_token 不是唯一性,由开发确定(不同的客户端可能拥有不同的 Access Token,用于访问同一个用户资源。同一个客户端可能在不同时间获取多个 Access Token,用于刷新授权或延长有效期。)

        2.token一般放在请求头中

        3.要获取某个账号的数据,必须带上token

        4.token也有时效性

五、接口测试的流程及用例设计

流程:

        1.分析测试接口文档

        2.编写接口测试用例

        3.准备接口测试数据

        4.执行接口测试用例--通过工具去执行(填写对应的请求数据,查看对应的响应数据)

        5.得到对应的测试结果--测试报告--工具自动生成        

1、API文档(抓包工具获取):熟悉接口业务,接口地址,鉴权方式,入参,出参、错误码

2、编写接口用例以及评审

3、使用接口测试工具执行接口测试

4、持续集成Postman+Newman+Jenkins,输出测试报告并发送邮件

设计:

        接口测试组成:功能模块、用例ID、接口名称、前置条件、用例标题、操作步骤(URL、请求方式、请求数据)、预期结果、实际响应数据、测试结果、测试人员

        接口测试设计方法:同功能测试设计方法基本一致。边界值、等价类、决策表、判定表、因果图、场景法

  • 通过性验证

        按照接口文档上的参数,正常传入,是否可以返回正确的结果

  • 异常情况的验证

        不按照接口文档上的要求输入参数,验证接口对异常情况的校验。从必填、参数类型、入参长度等方面来考虑。

  • 参数组合

        如果接口文档中,说明不同的参数组合有不同的结果显示,则我们在测试接口时,一定要考虑到不同的组合情况。

  • 根据业务逻辑来设计用例

        场景法

        例如:

   需求如下:

          1.登录失败5次,就需要等待15分钟之后再登录

          2.新注册的用户需要过了实习期才能发帖

          3.删除帖子扣除积分

   设计思路:

          新注册的用户,没过实习期能否发帖?删除帖子积分是否相应扣除?没登录的时候能否删帖?

       检查点:检查接口的响应数据同接口文档一致,并且一一对应。

        正例:输入正常入参,接口能够成功返回数据

        反例:

                鉴权反例:鉴权码为空,鉴权码错误,鉴权码失效。。。

                参数反例:参数为空,参数类型异常,参数长度异常

                                错误码覆盖:根据业务而定

                其他错误场景:接口黑名单,接口调用次数限制,分页场景

六、Postman界面介绍

Home主页

workspace工作空间

  •         Collections集合,项目集合
  •         Apis api文档
  •         Environments 环境变量,全局变量
  •         Mock Server 虚拟服务器
  •         Monitors 监听器
  •         History 历史记录

请求页签

        Params:get请求传参

        authorization:鉴权

        headers:请求头

        Body:post请求传参

                none 没有参数

                form-data 既可以传键值对参数也可以传文件(批量上传时1、需开启设置Settings—General—Read files outside working directory2、将文件传至对应文件目录下)

                x-www-form-urlencoded:只能够传键值对参数

                raw:json、text、xml、html、javascript

                binary:把文件以二进制的方式传参

        pre-request:请求之前的脚本

        tests:请求之后的断言 

        cookies:用于管理cookie信息

响应页签

        Body:接口返回的数据

                Pretty:以json,html,xml...不同的格式查看返回的数据

                Raw:以文本的方式查看返回的数据

                Preview:以网页的方式查看返回的数据

        Cookies:响应的Cookie信息

        Headers:响应头

        Test Results:断言的结果 

全局变量和环境变量

        环境变量:参数要一致(测试时选中相应环境)

        全局变量:在任何接口都可访问到

        获取变量方式:{{变量名}}

  • 接口关联

        从接口响应中提取变量,以便其他接口使用

        1、JSON提取器实现接口关联

--第一个接口
console.log(responseBody)
//使用 JSON提取器提取access_token值
//把返回的字符串格式的数据转换成对象的形式
var result=JSON.pares(respnseBody);
console.log(result.access_token);
//把access_token设置为全局变量
pm.globals.set("access_token",result.access_token);

--第二个接口
{{access_token}}

        2、使用正则表达式提取器实现接口关联

--第一个接口
//使用正则表达式提取器实现接口关联,match匹配
var result=responseBody.match(new RegExp('"access_token":"(.+?)"'))
console.log(result[1]);
//设置为全局变量
pm.globals.set("access_token",result[1]);
--第二个接口
{{access_token}}

        3、使用Cookie提取器实现接口关联

var csrf_token=postman.getResponseCookie('csrf_token').value;
pm.globals.set("csrf_token",csrf_token);
  • 数据驱动

Postman内置动态参数:

{{$timestamp}} 生成当前时间的时间戳

{{$randomInt}} 生成0—100之间的随机数

{{$guid}}          生成随机guid字符串

JSON文件和CSV文件处理:

断言
//1.断言返回的状态码为200,用于状态断言
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
//2.断言返回的结果中包括有一个指定的字符串,用于业务断言
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
//3.对返回的结果做JSON字段检查,用于业务断言
pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});
//4.断言返回的结果等于一个字符串,用于业务断言
pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});
//5.断言响应头中包含有指定的响应头
pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});
//6.断言接口请求的时间少于200毫秒,用于性能断言
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});
//7.断言一个post请求的返回的状态码是否在指定的范围里面
pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
//8.断言返回的状态码信息中包含指定的字符串
pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
});

 一个接口里面要有业务断言和状态断言,性能断言根据需求来。其中状态断言放至全局中。

断言取文件中的值,通过data.文件中的属性名


 

Postman接口Mock Server服务器

mock模拟:后端的接口还没有开发完成,前端的业务需要调用后端的接口

Postman的Cookie鉴权

什么是cookie?cookie是一小段文本,格式key=value。

cookie鉴权的原理:

1、当客户端第一次访问服务器的时候,那么服务器就会生成Cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端

2、当客户端第2-N次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权

cookie的分类:

1、会话cookie:保存在内存,当浏览器关闭之后就会自动清楚cookie

2、持久cookie:保存在硬盘,浏览器关闭后不会清楚,有时效性,失效就清楚

Postman实现接口的加密和解密

1、目前市面上的加密方式

对称加密:DES、AES、Base64加密算法

非对称加密:双钥(公钥、私钥、公钥加密私钥解密、私钥加密公钥解密)加密、RSA加密算法

不考虑解密:MD5、SHA1、SHA3

2、Postman如何实现加密和解密

MD5最广泛

Newman

postman是专为接口测试而生,Newman是专为postman而生。Newman可以让postman的脚本通过非GUI的方式去运行脚本。

运行命令:newman run

常用参数:

        -e        引用环境变量

        -g        引用全局变量

        -d        引用数据文件

        -n        指定测试用例迭代次数

        -r        cli,html,json,junit --reporter-html-export        指定生成HTML测试报告

Postman+Newman+Jenkins实现持续集成

1、新建一个项目

2、设置自定义工作空间

3、执行Windows的批处理命令

4、执行系统的grovvy脚本(保证样式不丢失)

5、构建后操作,生成报告集成到Jenkins中

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值