• WebApi接口测试


     API接口测试:

      什么是接口:通过API接口实现计算机软件之间的相互通信

      为什么要做接口测试:

        不通过前端UI界面或者UI界面还没有设计出来

        需要对功能做测试,这也是测试工程师尽早介入测试的一个点

        业务的逻辑,数据的资源,安全,需要通过接口去进行测试

      接口测试的流程

        需求评审-接口评审

        需求分析-接口分析

        接口用例设计

        执行测试用例

        Bug的定位与追踪

        专项测试报告

      接口分类

        接口对象

          内部接口-集成测试,灰盒,一般开发去做

          外部接口-联调测试,方案,联调测试通过准则

        协议分类

          Web Service接口-SOAP协议

          Http Api接口-HTTP协议

        接口文档

          接口名称-功能描述

          接口地址URL

          支持的格式(xml/json)-请求数据格式

          请求方式-get/post

          请求参数-参数名称,类型,是否必填,参数说明请求头等,测试用例设计

          返回参数-返回码,返回值信息,返回json或xml信息-预期结果

      接口测试

        excel表存储接口测试用例

        postman进行接口测试

        记录测试结果,提交bug

        接口测试过程中,如果系统已经完成,验证地方:

          接口响应值

          系统对应的功能数据

          数据库的数据验证

      http协议

        http协议原理

          超文本传输协议,服务器传输文本到本地浏览器的传送协议

          基于TCP/IP通信协议传输的

        网络型协议

          OSI七层模型

            物理层

            数据链路层

            网络层

            传输层

            会话层

            表示层

            应用层

          TCP/IP四层模型

            网络接口层

            网络层IP协议

            传输层TCP/UDP协议

            应用层http、smtp、telnet协议

        http协议特点

          无连接、无状态、简单灵活

        http与https的区别

          https-有证书,密文传输,443端口,有身份证验证,完整性检验

          http-无证书,明文传输,80端口,无身份证校验,无完整性校验

        http请求报文

          请求行-包含请求方法,请求路径,请求协议/版本组成

          请求头-键值对,如数据类型,版本

          空行

          请求正文

        http响应报文

          状态行-包含协议/协议版本,状态码,状态描述符

          响应头

          空行

          响应内容

        请求方法

          GET

            向指定资源发出请求

            大小有限制,2千字符以内,提交的数据直接显示URL中,提交数据不安全

          POST

            向指定资源提交请求数据,如提交表单,上传文件

            提交的数据没有限制,数据在请求体中,数据安全,速度慢

          PUT

            向指定资源位置上上传其新内容上传文件

          DELETE

            请求服务器删除Request-URL所标识的资源

          PATCH

            更新部分资源

        响应状态码

          200-客户端请求成功

          301-永久性重定向

          302-临时重定向

          403-服务器收到请求,拒绝访问

          404-请求的资源不存在

          500-服务器发生不可预期的错误

        SSL通信过程

          SSL安全套接层,基于对称密钥与非对称密钥传递数据

          浏览器访问https网站,要求与web服务器建立SSL连接

          服务器根据客户端发的请求信息确定是否重新生成新的主密钥,若需要服务器响应给客户的信息将包含生成密钥所需信息

          客户根据收到服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器

          服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器

      Cookie、Session、Cache缓存、Token

          Cookie

            什么是Cookie

              状态的保持,辨别用户身份,保持通信状态

              Cookie保存于浏览器,来自于服务器

            Cookie包含的信息

              Key_Value值

              Path路径

              Exprises过期时间

              Secure传输格式

              HttpOnly防止XSS攻击

            Cookie类型

              持久Cookie

              会话Cookie

          Session

            服务器创建的,保存于服务器内存中

            Session标识是全局唯一的

            使用场景:记住用户名和密码登录,购物车功能

          Browser Cache浏览器缓存

            节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档存储

            当再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的浏览

          Token

            客户端可以将Token保存到任何地方

            无限制,无状态,利于分布式部署

      Cookie与Session的区别

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

        cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应使用session

        session在一定时间内保存在服务器上,当访问增多,会占用服务器性能,考虑到减轻服务器性能方面,应使用cookie

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

        一般建议,将登录信息等重要信息存放在session,其他信息如果需要保留,可以放在cookie

      Cookie与缓存的区别

        缓存只是对静态资源的处理,Cookie是一种动态机制

        缓存大小受资源和磁盘空间的限制

        Cookie本身有大小限制,一般浏览器限制大小不能超过4Kb

        缓存不会发送服务器,cookie会与请求一并发送

        作用不一样,缓存浏览器就可以从本地磁盘显示文档,可以加速页面的阅览。Cookie是服务器辨别用户身份,维持通信传输状态。

      JSON

        什么是json

          存储和交换文本信息的语法

          更快,更小,易解析

        json格式

          {“key”:"value"}

          [{},{}]

      接口测试用例

        正常场景

          功能是否按照接口文档要求实现

        异常场景

          参数为空

          参数多填

          参数少填

          参数类型错误

          参数数值取值范围错误

          异常场景下是否有正确的处理逻辑和响应提示

        必填参数

          对于必填参数要设计传参数和不传参数,接口的返回情况

          必填参数传参数

            必填参数都正确

            必填参数类型错误(非法、特殊字符)

            必填参数数值范围错误(超过边界)

            必填参数空格(前面、中间位置、尾部)

          必填参数不传参数

            必填参数全部为空

            必填参数部分为空

        选填参数

          一般接口对于非必填参数都不会做非正常性传值的判断,所以只要测试接口返回的内容是否正确即可

          如果有接口文档说明对非必填参数做了非正常的验证的话,也要对其验证

          覆盖所有参数,正向用例

          覆盖所有必填参数,正向用例

          某一必填参数为空,逆向用例

          必填参数基础上,少传一个参数

          多传一个参数,逆向用例

          必填参数数据类型错误,数据值错误,逆向用例(例如整型变字符串)

          任意组合可选参数,正向用例

          与业务逻辑相关的,用户身份认证为空或者错误,逆向用例

          字段的唯一性校验,如插入数据字段不能重复,发送两次请求,查看第二次返回结果

      Postman工具使用

        创建Collection

          Add Folder

          Add Request

        常用变量

          局部变量Variables

            对于单个请求

            比较少用

          数据变量

            txt/csv文件存储数据

            参数化,批量执行接口测试

          环境变量Environment

            一般用户测试环境的区分

            正式环境,预发布环境

          集合变量Collection

            针对于集合

            集合下edit-Varables设置集合变量

          全局变量Golable

        变量的优先级及格式

          引用格式:{{变量名}}

          局部变量--数据变量--环境变量--集合变量--全局变量

        传参脚本

          获取token及传参

    var data = JSON.parse(responseBody);
    pm.globals.set("token",data.token);

          获取响应信息中的ID及传参

    /获取前面请求的客户ID
    var data = pm.response.json(responseBody);
    pm.globals.set("Cid",data.obj.id);
    console.log("客户ID:"+pm.globals.get("Cid"));

        常用变量的脚本

          备注详情

    //1.设置环变量
    pm.environment.set("hosttest", "192.168.1.1");
    //获取环境变量
    var env = pm.environment.get("hosttest");
    console.log("1.获取设置的环境变量env:"+env);
    //2.设置全局变量
    pm.globals.set("glo", "设置全局变量glo");
    //获取全局变量
    console.log("2.获取设置的全局变量:"+pm.globals.get("glo"));
    //3.设置局部变量
    pm.variables.set("var","设置的局部变量var");
    //获取局部变量
    console.log("获取设置的局部变量var:"+pm.variables.get("var"));
    //4.集合变量在集合下edit--Varibles设置集合变量
    //5.清除全局变量
    pm.globals.unset("teID");
    //6.清除环境变量
    pm.environment.unset("env");
    //7.创建请求,发送请求,登录操作
    const echoPostRequest = {
    url: 'http://localhost/api/mgr/loginReq',
    method: 'POST',
    header: 'Content-Type:application/x-www-form-urlencoded',
    body: {
    mode: 'urlencoded',
    urlencoded: "username=auto&password=sdfsdfsdf",
    }
    };
    pm.sendRequest(echoPostRequest, function (err, res) {
    console.log(err ? err : res.json());
    });
    View Code

        常用断言脚本

          备注详情

    常用断言:
    //1.状态码断言
    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("成功");
    });
    //3.响应值中JSON值的验证
    pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.code).to.eql("0000");
    });
    //4.查看响应体中包含的内容
    pm.test("Body is correct", function () {
    pm.response.to.have.body("responsebodystring");
    });
    //5.查看响应头 Conten-Type 是否存在
    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.成功的响应状态码是否包含
    pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([200,202]);
    });
    //8.状态码包含的字符串
    pm.test("Status code name has string", function () {
    pm.response.to.have.status("OK");
    });
    //9.xml格式转换json的格式
    var jsonObject = xml2Json(responseBody);
    //10.为json数据使用tiny验证器
    var schema = {
    "items": {
    "type": "boolean"
    }
    };
    var data1 = [true, false];
    var data2 = [true, 123];
    pm.test('Schema is valid', function() {
    pm.expect(tv4.validate(data1, schema)).to.be.true;
    pm.expect(tv4.validate(data2, schema)).to.be.true;
    });
    View Code

        postman到处报告

          本地导出

            执行结合-->run-->export result

          newman run 命令导出

            安装Node.js

              node -v命令显示版本即可

            安装newman

              安装命令:npm install newman -global

                   newman -v 显示版本即可

            安装html报告格式库

              安装命令:npm install -g newman-reporter-html

                   执行命令:

                  

    newman run c.json(执行的集合文件) -g d.json(全局变量文件) -e e.json(环境变量文 件) -d csv.txt(数据文件) -n 6(迭代次数) --reporters html --reporter-html-export d: 2020webapi
    eporter.html(报告文件路径) 
    View Code

      

      Fiddler工具使用

        Fiddler抓包工作原理

          就是客户端和服务器之间建立一个代理服务器,默认地址127.0.0.1,端口:8888

          浏览器发送请求会先发送到fiddler,fiddler再发送到服务器

          服务器的响应也是先发送到fiddler,fiddler在发送到客户端

        Rules--Automatic Breakpotins

          请求前断点Before Request

            步骤

              暂停抓包,进入响应的界面输入数据

              回到页面进行数据提交

              回到fiddler,webform修改请求数据

              点击break on response -->run to completion 继续执行

            使用场景

              假设前台页面限制某个输入框只能输入20个字符

              需要测试接口该输入框长度超过20个字符接口是怎么处理的

          请求后断电After Response

            步骤

              设置请求后断点,页面操作,抓取数据

              修改相应内容

              run to completion 继续执行

              查看页面数据

            使用场景

              假设你测试某个UI功能,其中某个字段的长度最大值是200,但是你的请求获取到的内容都很小

              无法看到字段长度很长时界面的展示情况,那么,你可以修改响应报文,把返回的内容自行修改

        AutoResponder自动响应

          步骤

            抓包请求

            选择请求右击save-->response-->save response body

            修改保存数据

            启动autorespnseder

            把刚才的请求add rule-->添加刚才修改的json文件-->save

            刷新页面

          使用场景

            前端工程师设计好界面后,想调试一下页面效果,但是后端工程师接口功能还未完成,无法调试

            此时,前端工程师可以把某些请求设置为自动应答,响应返回本地测试数据

        Composer模拟器使用

          步骤

            开启抓包,发送请求(该请求要有参数)

            拖动请求到compser中,绿色状态松开即可

            修改请求参数

            执行,会有新的请求加载,点击查看inspector中响应信息

          使用场景

            模拟后端,查看相应结果

        Filters过滤器,域名过滤

          只显示特定域名记录,Filters--勾选Use Filters--Hosts

          选择Show only the following Hosts--输入需要显示的域名--点击actions生效

        https抓包设置

          tools-->option-->https-->左边选项进行勾选操作

          tools-->option-->https-->action-->export 导出证书--浏览器导入证书

        手机抓包设置

          tools-->option-->connections-->设置好端口--勾选allow remote computers to connect--点击ok

          手机设置

            设置--无线局域网WIFi--代理设置--设置代理服务器电脑的ip(就是打开fiddler那台电脑的IP)--端口

            手机浏览器--输入代理服务器电脑的ip+端口:如:192.168.3.8:8888

            下载安装证书即可

          手机弱网测试

            Rules-->Customize Rules-->查找(ctrl+f)300数值--数值向上增加改值保存

            启动Rules-->Performance-->勾选Simulte Modem Speeds

            执行发送请求,弱网测试,看响应时间

     

          

    参考地址:

    https://www.processon.com/view/5e9fdf9ff346fb177b8b7627#map

  • 相关阅读:
    oracle之is null和is not null的优化
    oracle命令导出/导入
    Linux环境下后台启动运行jar并设置内存
    阿里云手动安装git客户端
    阿里云安装maven
    python 迭代器
    ThreadPoolExecutor构造器参数详解
    CVE-2020-13957 solr未授权复现
    CVE-2020-9496 apache ofbiz xml-rpc反序列化漏洞分析
    REST API介绍
  • 原文地址:https://www.cnblogs.com/hofmann/p/12956571.html
Copyright © 2020-2023  润新知