详细聊聊软件测试中的接口与抓包问题(中)

发表于:2021-1-04 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:敏敏小朋友    来源:博客园

  3、会话跟踪技术
  web程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
  早期为了记录用户的状态时,就在浏览器记录用户信息cookie机制,每次请求都会往服务器发送这些数据,这样服务器就知道是谁在请求了,该对应返回什么样的数据,但是久而久之,安全性就暴露出来了。
  cookie是在本地的,在本地就会有人想着去修改cookie里面的数据,从而获取别人的信息。于是就有新的处理办法,改在服务器端记录用户信息。也就出现了session机制,一切用户的身份由服务器掌控。这就是cookie机制和session机制的历史。
  在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下:
  ·请求银行主页;
  ·请求登录(请求参数是用户名和密码);
  ·请求转账(请求参数与转账相关的数据);
  ·请求信誉卡还款(请求参数与还款相关的数据)。
  在这上会话中当前用户信息必须在这个会话中共享的,因为登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。
  4、保存会话的两种技术
  ·客户端技术 Cookie
  两个经典应用场合:判定注册用户是否已经登录网站,购物车。
  ·服务端技术 Session
  经典应用场合一般就是在Session中存储了用户的登录信息,进而可以访问一些需要权限才能访问的页面。
  5、Cookie
  5.1、Cookie概念
  Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
  Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了! 原理:https://www.zhihu.com/question/31079651
  5.2、Cookie应用场景
  记录上次访问时间
  记录用户名
  显示浏览记录
  5.3、Cookie原理分析
  当浏览器进行网络请求时,如果携带当前浏览器的cookie
  服务器打给浏览器
  set-cookie:username=zhangsan;Exipres=Moday,具体时间
  浏览器打给服务器
  Cookie:username=zhangsan;
  存储到浏览器的文本中
  username=zhangsan  169.254.xxx.xxx/day09_cookie/servlet    name        value      url
  5.4、Cookie 使用细节
  一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
  一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
  (void setPath(java.lang.String uri) :设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。
  void setMaxAge(int expiry) : 设置cookie的有效时间。
  正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
  负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
  零:表示删除同名的cookie数据
  Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
  6、Session介绍
  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
  Session和Cookie的主要区别在于:
  Cookie是把数据保存在浏览器端的内存中
  Session把数据保存在服务器端的内存中
  cookie与session的联系:
  当服务器端生成一个session时就会向客户端发送一个cookie保存在客户端,这个cookie保存的是session的sessionId。。这样才能保证客户端发起请求后客户端已经登录的用户能够与服务器端成千上万的session中准确匹配到已经保存了该用户信息的session,同时也能够确保不同页面之间传值时的正确匹配。
  7、接口测试
  7.1、什么是接口
  API接口是Application Programming Interface的简称,是一些预先定义的函数,包括接口地址、传入参数和返回参数。
  可以简单理解为,当需要访问某些数据,正常状态下传入合格参数,会收到该数据范围内的返回参数。
  场景:在美团旅游频道,用户选定时间、地点后搜索航班,后台会调用搜索接口传入时间、地点等参数,接收航班类别、价格等参数,在前台页面上进行排列展示。同理,下单时会调用生单接口确认是否成单,支付时会调用支付接口完成交易,自动修改订单状态。
  7.2、什么是接口测试
  接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。
  一般我们用的多的是HTTP协议的接口、WebService协议的接口,还有RPC(Remote Procedure Call Protocol)——远程过程调用协议的接口。
  不管是哪种接口,其本质就是发送一个request,然后服务器响应后返回一个response,然后我们对response进行分析,这即是接口测试。
  接口的分类:
  1.webservice接口   2.http api接口
  webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。
  http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。
  一个URL就是一个接口:接口大致会分为一下几个部分:
  请求协议:
  http --- 普通的http请求
  https --- 加密的http请求,传输数据更加安全
  请求IP:就是指提供接口的系统所部署的服务器地址
  请求端口:如果不填端口,默认是80,否则需要填写端口号
  接口路径:指系统提供的接口在什么位置
  接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数,
  1.Charles的抓包  web/app
  2.Charles的过滤   a.filter的过滤
  b.ctrl+f的过滤  对请求头  响应体  等进行过滤
  c.可以使用过滤url的方式
  d.可以使用focus的方式过滤  只显示已经选中的url其他的进行隐藏
  3.断点替换
  4.弱网测试
  7.3、为什么要做接口测试
  随着系统越来越多,以及复杂性越来越高,为了保证系统的独立性,也为了使业务更加的独立,系统间的交互,越来越多的使用接口,这时候,为了保证数据的传输的准确性,接口测试也应运而生了,数据的错误,有可能引起系统的重大BUG。
  7.4、接口测试的重要性
  1.越底层发现bug,它的修复成本是越低的。
  2.前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。
  3.检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是通过接口可以传入-1元。
  4.如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。
  5. 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。
  6. 现在很多系统前后端架构是分离的,从安全层面来说:
  (1)、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。
  (2)、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。
  7.5、接口测试工作流程
  准备阶段(80%)
  拿到开发的接口文档,并理解每个接口的参数及含义
  了解被测试系统的业务流程
  编写接口测试用例
  执行阶段(10%)
  测试用例/测试场景执行
  测试数据/系统数据收集
  分析阶段(10%)
  数据汇总/日志分析
  测试报告
  测试报告:  1.功能性测试报告  【测试报告】
  2.接口测试报告    【测试报告】
  7.6、接口测试用例编写
  接口测试用例编写要点:
  ·测试每个参数类型不合法的情况
  ·测试每个参数取值范围不合法的情况
  ·测试参数为空的情况
  ·测试参数前后台定义的一致性
  ·测试每个参数的上下限(这里容易出致命的BUG,如果程序处理不当,可能导致崩溃)
  ·测试每个参数取值不合理的情况(包括取的值不属于自己,取值在这阶段不会出现,取值超出了自己所拥有的数量或者范围)
  如果两个请求有严格的先后顺序,需要测试调转顺序的情况,自己和自己的交易、聊天等操作(这种特别容易遗漏)。
  7.7、接口文档
  我们做接口测试,需要开发提供接口文档。最重要的有一下几点:
  1、被测接口的地址
  2、接口参数,以及各个参数的说明
  3、必要的http头与http体 ( http头是可以自定义的,可以用来校验是否是自己人访问 )
  4、接口返回什么值,以及各个返回值的说明
  5、接口是干什么的
  7.8、测试部署工作
  解压tomcat
  7.9、接口测试:Json
  ① 什么是json
  Json是一种数据载体 互联网本质就是数据传输,数据传输就需要数据载体。比如:页面信息就是存储在HTML这种数据载体中。
  ② 为什么使用json
  FasterJSON
  Gson
  Json
  Json传输数据效率更高,所以部分场景下使用HTML与XML
  但是JSON语言描述不及标签语言,所以部分场景下使用HTML与XML
  如果传递少量数据,使用JSON
  7.11、接口测试工具及原理
  ① 常见接口测试工具
  典型商业工具:loadrunner,soapui
  典型开源工具: jmeter
  扩展插件:POSTMAN
  ② 实现原理
  模拟客户端对服务器进行多连接
  单接口测试:1.测试接口通不通
  2.多场景接口测试
  3.对接口进行压力测试 [多次请求实现并发]
  7.12、接口测试工具Postman
  使用postman按照接口文档进行测试
  ① Get请求
  ② Post请求

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号