zoukankan      html  css  js  c++  java
  • 接口还没好, 你让我怎么做测试?

      下面这个图, 我想大家都是很熟悉的, 尤其是中间那个金字塔模型. 我们看到的这三层, 自底向上是单元测试, 接口测试, UI测试.为什么它是理想模型,因为单元测试占据了大部分的内容,从数据上来讲,二八原则,单元测试能解决80%的缺陷.可以,它对测试人员的要求高啊, 贵啊, 时间少啊. 所以,它是理想模型.

      在前些年, 大家提到自动化的时候, 多数时候是在说UI自动化测试, 请看测试冰淇淋模型. 由于现在用户对页面越来越挑剔, 或者说是各大厂商越来越讨好用户, 在界面上换着花样儿让用户保持新鲜. 那对测试人员来讲, 可就是灾难了. UI天天变, 最近特别多, 根本就没法进行自动化的测试, 是吧. 所以, 不能使用测试金字塔来把整个测试行为理想化, 那我们总可以取个平衡吧, 那就是少一点UI自动化, 多一点接口测试. 嗯, 对,那就是橄榄球模型.

     

      说起接口测试,面试必备是吧,一般都会是基于协议的,大部分是基于HTTP协议,对它的各种部分各种提问,以及用什么工具之类的,大家都门儿清.面试通过,兴高采烈地进了公司,蛮正规的,倡导测试及早介入,单元测试做不了,那就做接口吧.分析完开发给的接口文档,各种工具准备妥当,使用Fiddler发个请求试试.哦豁,500!抓瞎了,咋整,你这接口都没好,可让我怎么测试!!

      如果这时候,你的业务分析以及测试用例还有各种相关的工作都妥了,还是想及早介入接口测试,也不是没有办法.技术界就是这样,不会挡住上进的孩子的,总会给你一条路,那就是Mock.

      Mock是啥呢? Mock 是测试过程中中常见的一种技术,即对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法,从而把测试与测试边界以外的对象隔离开。

      引用《淘宝网-接口测试白皮书》中的对 Mock 的定义

    在测试当中,mock 是指使用各种技术手段模拟出各种需要的资源以供测试使用。
    被 mock 的资源通常有以下特征:
    
    1.被测目标依赖该资源
    2.该资源可能因为各种原因不稳定、返回结果不断变化或者并不总是能够获取到
    3.该资源跟被测目标本身质量无关
    这些资源可能是一个外部或底层接口、一个系统、一组数据对象或者是一整套目标软件 的工作环境等。
    通过 mock 避免对外部真实资源的依赖实现对被测目标的孤立测试,从而大 大降低测试的难度,节约测试成本。

      那在什么时候用到Mock呢

    1.单元测试/接口测试中测试对象依赖其他对象,这些对象的构造复杂、耗时或者根本无法构造(未交付)
    2.我们只测试对象内部逻辑的质量,不关心依赖对象的逻辑正确性和稳定性

      那Mock要遵循什么原则才能用得恰到好处呢?我们可以基于两个原则:

    1.不需要对所有的依赖对象/服务进行mock,只对那些构造步骤复杂、构造耗时较长、不稳定的依赖对象/服务/急需测试的对象进行mock。
    2.如果做分层测试(比如分层自动化),高层的测试设计可以基于以下假设:低层的测试已保证低层对象的质量,高层对低层的依赖可以mock,
    无需关心所依赖的低层对象的质量。

      Mock又有两种, Local Mock和Remote Mock, 它们的区别在于区别在于依赖对象的行为调用是本地/远程调用

    1.Mock本地依赖对象
    如果依赖对象的调用是本地调用,就属于Local Mock。EasyMock/Mockito都可以实现对本地依赖对象的Mock。
    
    2.Remote Mock
    如果被测对象依赖对象的是一些远程服务(HTTP/RPC服务),就属于Remote Mock,Remote Mock一般实现对指定的服务/接口、客户端(消费者)进行Mock。
    可以通过Mock Server等方式去实现。

      那怎么又快又好地Mock一个接口呢? Postman可以Mock, 但是最近发现了一个更加易用的工具, rap2. 

      Rap2是啥?

    RAP是一个可视化接口管理工具 通过分析接口结构,动态生成模拟数据,校验真实接口正确性, 围绕接口定义,通过一系列自动化工具提升我们的协作效率。
    我们的口号:提高效率,回家吃晚饭! 可视化编辑,完善的版本控制,各种格式的导入导出。让前后端约定接口的工作变得十分简单 RAP会自动根据接口文档生成Mock接口,这些接口会自动生成模拟数据,支持复杂的生成逻辑。
    rap2就是一款在线模拟数据生成器,可以拦截Ajax请求,其作用在于帮助前端工程师独立于后端进行开发,实现前后端分离

      咋个操作?

      1. 邮件注册,登陆http://rap2.taobao.org/account/login

      2. 界面介绍

    a. 首页:登录后展示操作记录,仅为记录,无回溯功能
    b. 仓库:个人仓库,团队仓库列表及入口处,可以在此处新建个人仓库
    c. 团队:展示已加入团队,可新建团队,进入团队中可查看团队仓库
    d. 接口:一些接口使用信息
    e. 状态: RAP服务使用状态数据图表展示,主要是用户数量增长,仓库活跃度排名

      3. 新建仓库

     

       4. 设置请求参数和响应内容

        新建参数:

       新建响应, 可以每个键值手动输入

       也可以导入: 直接把自己需要的数据的代码格式粘贴过来

      导入之后如下所示:

       这样我们就Mock好了一个接口. 那接下来我们来测试一下, 这个接口是否能够正常按照我们需求来响应.

      我们使用Fiddler尝试一下请求的发送.

      1. 先来构建这个请求

        点击如下图如示, 即可拿到该接口的URL

    2. 发送请求

    在Composer里输入选择请求的方法Get, 输入URL以及参数: http://rap2.taobao.org:38080/app/mock/245167/api/get_event_list?eid=1

    点击Excute.

       3. 在左边的请求列表中找到刚才的请求, 查看响应

     

      这样一比对完, 发现刚才发送的请求能够正常获取到我们定制的响应. 

      Mock一个接口就这样轻松愉快地完成了. 当然, 这只是最简单的Demo, 在实际工作过程中, 一定会比这复杂. 奥力给!

      

     

     

     

  • 相关阅读:
    大数据基础文献综述
    牛客网数据库SQL实战
    Leetcode with Python
    tinyMCE
    HTTP LVS
    采坑大全
    Hadoop 解除 NameNode is in safe mode
    R语言采坑系列——Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA
    .Net中的异步编程
    知识点4
  • 原文地址:https://www.cnblogs.com/xiaowangzi1110/p/12343140.html
Copyright © 2011-2022 走看看