热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hoverfly_使用Hoverfly模拟网络

hoverfly介绍信不信由你,研究人员和学生面临的最大障碍之一就是,只能访问PDF:他们甚至在阅读他们感兴趣的内容之前,都

hoverfly

介绍

信不信由你,研究人员和学生面临的最大障碍之一就是,只能访问PDF:他们甚至在阅读他们感兴趣的内容之前,都可能浪费大量的时间和大量的精力消耗兔子的洞。Kopernio是一个网站浏览器扩展程序可以简化此繁琐的过程,使他们可以将时间花在更重要的事情上。 这样,它就可以与学术网站的很大一部分进行交互:发布者页面(其中有成千上万个页面),机构登录门户以及各种PDF的开放访问源。

这不仅是一个巨大的表面积,可以提供测试覆盖范围,而且不能保证其中任何一个看起来都一样,提供可靠的服务,或者我们甚至在出现停机时间时都会事先知道。 这带来了几个问题:

  1. 如果该服务已关闭,则很难测试Kopernio与第三方服务的集成。 在完成部署周期的测试部分之前,您要么被迫跳过测试(并放弃测试),要么等待服务恢复。
  2. 如果服务的行为发生意外更改,则Kopernio可能会崩溃。 与Kopernio本身相比,对于测试而言,这不是一个大问题。
  3. 服务可能会被速率限制或列入黑名单,因为我们对其进行了过多次测试。 对第三方服务施加不必要的负担也是一种不好的形式:QA Engineering中没有“ D”,“ o”或“ S”。
  4. 我们的测试包括自动打开文章页面等。 这可能看起来像是将网页抓取到托管它们的任何主机,因此我们无法采取措施阻止这种情况(例如CAPTCHA)。 我们还需要确保Kopernio在所有方面都符合COUNTER 。

1、3和4使我作为测试工程师的工作更加艰难。 如果只有一种方法可以通过记录我们从它们那里获得的响应来保持这些服务不变,那么就可以在我们需要的任何时候重播它们而无需接触互联网。 如果我们有一个预先记录的较旧版本的网站或API来运行测试,以与使用真实版本的结果进行比较,那么即使是第二个也更容易调试。

输入飞翔者

Hoverfly是用于模拟API的工具,它具有两种风格:基于云的解决方案和用Go编写的独立HTTP服务器。 后者是我用来测试Kopernio的工具,因此我将深入探讨。 广义上讲,它接受HTTP请求,并且可以使用对原始接收者(类似于代理服务器)的请求做出响应,也可以发送自己的可以配置的罐装响应。 它的功能由三种模式封装:

1.捕获-Hoverfly将充当代理服务器,并记录每个请求以及目标的响应。 这些请求-响应对可以随时以JSON格式导出为“模拟”。 这是一个简化的示例:

{"data" : {"pairs" : [{"request" : {"path" : [{"matcher" : "exact" ,"value" : "/r/bouldering"}],"method" : [{"matcher" : "exact" ,"value" : "GET"}],"destination" : [{"matcher" : "exact" ,"value" : "reddit.com"}]"scheme" : [{"matcher" : "exact" ,"value" : "http"}]},"response" : {"encodedBody" : true ,"status" : 502 ,"body" : "foo" ,"templated" : false ,"headers" : {"Access-Control-Allow-Origin" : ["*"]}}}]}
}

在这种模式下,您可以指定要记录的请求标头。 导出模拟后,您可以根据需要添加,删除或修改任何字段。

2.模拟-Hoverfly将基于在导入的模拟文件中找到的请求-响应对,尝试将任何入站请求与响应进行匹配。 规则是,要成功匹配,所有JSON字段都必须匹配。 这意味着您忽略的字段越多,匹配将越宽松(反之亦然)。

如果无法匹配请求,则Hoverfly将返回502错误,并显示一条消息,其中包含最接近的匹配对。 注意:没有什么可以阻止您在不导入模拟的情况下运行此模式,但这会导致每个请求都引发错误。

大致来说,还有一个“有状态”选项,它与请求的顺序以及内容相匹配。 这意味着,如果在模拟过程中未看到请求的唯一匹配项,则Hoverfly仍会发送错误。

3.间谍-类似于“模拟”,但任何无法匹配的请求都将中继到远程目标,而Hoverfly的行为将类似于代理服务器。 在我们的案例中,这确实很有用,因为该插件向后端发出请求,这是必不可少的集成测试,不应以任何方式进行模拟。

使用hoverctl CLI工具,进行快速概念验证的设置非常简单:

hoverctl start开始启动Hoverfly监听端口8500, hoverctl mode 设置模式, hoverctl 用于加载/创建模拟文件。 在后台,这会将HTTP请求发送到Hoverfly服务器的REST API,可以代替使用-如果要使用自定义配置(例如,使用非标准端口)运行Hoverfly,则这是必需的。

Hoverfly的API文档不完整,但您可以使用诸如Wireshark之类的网络流量监视工具来反向工程差距,以查看hoverctl发送的请求。

在Kopernio使用

我们有一个测试,它会打开一个开放访问文章页面,以验证该插件可以检索PDF并将其显示给用户。 首次运行时,我们将Hoverfly设置为捕获模式,以记录来自网站的真实响应。 如果测试通过,我们将导出模拟。 如果没有,我们再试一次。

此后,只要测试再次运行,我们就会导入仿真,并且在打开文章页面时,它将获得原始记录的响应。 该网站可能会因为我们所关心的一切而倒闭,或者为该特定文章(该Kopernio可以提供帮助,但更改了测试的参数)抛出了付费壁垒,但Hoverfly每次仍会提供完全相同的网页。 确实,我们在测试期间使用的一项外部服务在一个星期五下午变得不可用,直到我尝试在测试之外访问它之前,我什至没有注意到,因为Hoverfly在测试运行期间完全是伪造的。

如果您已经准备好模拟,那么它甚至不需要互联网连接就具有额外的好处! 如果您在伦敦地铁上做一些工作,非常方便。

相反,我们也可以使用Hoverfly来按需模拟服务中断,以测试Kopernio如何处理这些中断。 这需要更多的思考,但可以归结为从头开始制作JSON或修改现有的模拟以将200个状态代码更改为50倍。

我们还进行了涉及插件向公共API发出请求的测试。 此测试有两种版本:一种接收真实的响应,另一种从Hoverfly接收模拟的响应。 如果后者成功但前者失败而没有任何明显的服务器错误,则表明该API已更改,我们需要相应地更新代码。

Hoverfly还可以兼作网络监视工具:它存储包含所有请求和响应的“新闻”。 即使测试不使用模拟,我们也将Hoverfly设置为间谍模式并建立网络日志。 为此,还有其他基于代理的解决方案可能会更适合,但是不必链接代理并使事情保持简单就很好。

更重要的是,这是一个与平台无关的解决方案:我们已经针对Firefox和Chrome进行了测试,但是截至撰写本文时,仅前者提供的网络日志涵盖了网页和浏览器扩展活动。

注意事项

如前所述,确保我们模拟对某些服务的请求很重要,但是如果匹配由于任何原因而失败并且我们处于间谍模式,Hoverfly将以静默方式代理请求,这有点问题。 我们想要的最后一件事是在假设请求永远不会到达真实网站的前提下,通过运行1000次测试来意外地向该网站发送垃圾邮件!

Hoverfly会在其服务的所有响应上设置一个“ Hoverfly”标头,无论其来源如何,但了解给定的响应是来自模拟还是真实的对第三方的请求通常很有用。 我们采用的解决方案是修改仿真,使其包含代理响应所没有的额外标题。 然后我们可以在日志中查找该标题。

如果您在模拟中记录COOKIE,则请求匹配逻辑可能会很脆弱:如果一个网站有一些Javascript,每次加载页面时,Javascript都会设置不同Javascript,则这意味着来自浏览器的任何请求都无法匹配,因为COOKIE是不同的到第一次创建模拟时使用的那个。 在我们的测试中,如果模拟仍然有用,则可以通过编辑模拟以忽略COOKIE来解决此问题。

结论

在为Kopernio编写测试以确保我们不引入针对外部服务的回归时,Hoverfly已成为我军械库中必不可少的工具。 随着我们与越来越多的用户接触,该表面积只会增加,因此,我很高兴能早日发现它。 这里没有涉及到一些很酷的功能,例如在响应之前引入延迟的功能。

如果您有兴趣了解如何将Hoverfly集成到测试中,请下载并安装我们在自己的框架中使用的pytest插件 :它提供了本文中提到的其他功能(例如添加用于确定响应来源的其他标头)。

对于其他用法,请转至Hoverfly 令人印象深刻的文档 ,然后亲自尝试-或联系 !

翻译自: https://hackernoon.com/using-hoverfly-to-mock-out-the-web-s3433ycw

hoverfly



推荐阅读
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
author-avatar
i89379844
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有