热门标签 | 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



推荐阅读
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 在深入研究 React 项目的过程中,特别是在探索 react-router 源码时,我发现了其中蕴含的中间件概念。这激发了我对中间件的进一步思考与整理。本文将详细探讨 Redux 中间件的原理及其在实际项目中的应用,帮助读者更好地理解和使用这一强大工具。通过具体示例和代码解析,我们将揭示中间件如何提升应用的状态管理和异步操作处理能力。 ... [详细]
  • TensorFlow Lite在移动设备上的部署实践与优化笔记
    近期在探索如何将服务器端的模型迁移到移动设备上,并记录了一些关键问题和解决方案。本文假设读者具备以下基础知识:了解TensorFlow的计算图(Graph)、图定义(GraphDef)和元图定义(MetaGraphDef)。此外,文中还详细介绍了模型转换、性能优化和资源管理等方面的实践经验,为开发者提供有价值的参考。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文深入探讨了HTTP头部中的Expires与Cache-Control字段及其缓存机制。Cache-Control字段主要用于控制HTTP缓存行为,其在HTTP/1.1中得到了广泛应用,而HTTP/1.0中主要使用Pragma:no-cache来实现类似功能。Expires字段则定义了资源的过期时间,帮助浏览器决定是否从缓存中读取资源。文章详细解析了这两个字段的具体用法、相互关系以及在不同场景下的应用效果,为开发者提供了全面的缓存管理指南。 ... [详细]
  • 在 Ubuntu 系统中安装 Python pip 时遇到错误的解决方案 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 理解和应用HTTP请求中的转发与重定向机制
    在HTTP请求处理过程中,客户端发送请求(通常简称为req),服务器进行相应处理后返回响应(通常简称为res)。理解和应用客户端的转发与重定向机制是前端开发的重要内容。这两种机制在Web开发中具有关键作用,能够有效管理和优化用户请求的处理流程。转发机制允许服务器内部将请求传递给另一个资源,而重定向则指示客户端向新的URL发起新的请求,从而实现页面跳转或资源更新。掌握这些技术有助于提升应用的性能和用户体验。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • InnoDB当前仅支持一次创建一个FULLTEXT索引 ... [详细]
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社区 版权所有