快速的远程服务测试

测试与远程服务交互的代码通常很困难。 有很多折衷因素会影响您可以编写哪些测试以及要编写的测试数量。 在大多数情况下,您对从服务中获取的数据的控制为零,这使得断言至少很难说。

不久前,我使用VCR库针对远程服务编写了一些Ruby测试。 VCR解决了上述问题。 它记录了测试套件的HTTP交互,以便在以后的运行中重播它们。 快速和可重复的测试是显而易见的好处。

这个星期,我想知道Java是否也是如此。 事实证明,有Betamax可以做到这一点。 实际上,Betamax是VCR的Groovy端口,可以与任何JVM语言一起使用。

Betamax在您和目标主机之间安装代理,在tape上记录每个请求和响应,并为已知请求重放tape 。 它适用于任何遵守Java代理设置的HTTP客户端,也适用于诸如Apache HttpClient和WSLite之类的不兼容的客户端。

在JUnit测试中,可以将Betamax用作方法级别的TestRule 。 在应该记录和重放的每个测试方法上,您都放置了@Betamax记录器并设置了磁带。

请考虑以下示例,在该示例中,我使用Spotify Metadata API来获得艺术家的欢迎。 在此示例中,我使用Apache HttpClient库并将其配置为Betamax。

public class SpotifyTest {@Rule public final Recorder recorder = new Recorder();private final DefaultHttpClient http = new DefaultHttpClient();@Betamax(tape = "fixtures/popularity")@Testpublic void get_popularity() throws Exception {Spotify spotify = new Spotify(http);assertThat(spotify.popularity("The Beatles"), is(.55f));}@Beforepublic void setUp() throws Exception {BetamaxRoutePlanner.configure(http);}
}

在编写此代码时,甲壳虫乐队的流行度为.55,但由于此数字是基于用户的意见,因此很有可能会发生变化。 使用Betamax磁带将获得相同的响应(只要请求不发生更改),并允许声明0.55以使其受欢迎。

HTTPS

正如我向您展示的那样,Betamax使用代理或包装器类正确记录并重放任何HTTP通信(如示例中所示)。 还支持HTTPS,但是当您在基于代理的设置中使用Betamax时,HTTPS可能会更有趣。 使用包装器就可以了。

HTTPS和基于代理的设置的问题显然是代理无法在标准HTTPS通信中拦截数据。 这就是为什么我们信任HTTPS。

Betamax可以解决这个问题。 您可以在Betamax Recorder上启用sslSupport 。 如果您的客户端代码可以使用SSL证书链断开了,则可以进行此操作。

同样,当您使用基于代理的设置时,这实际上只是一个问题。 使用客户端包装程序可以直接在API调用上启用Betamax,从而简化HTTPS通信。

自己尝试

Betamax可以帮助您为远程服务的客户端编写快速且可重复的单元测试。 对我最有益的是,由于消除了远程通信,因此测试速度非常快。 虽然我个人比较喜欢这些测试的基于属性的样式(例如,流行度必须是> = 0和<= 5的数字),但声明特定的值可能会有所帮助。

下次您与远程服务进行交互时,请尝试使用Betamax。

参考:来自Software Craft博客的JCG合作伙伴 Bart Bakker的快速远程服务测试 。

翻译自: https://www.javacodegeeks.com/2014/03/fast-remote-service-tests.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树-二叉树、满二叉树和完全二叉树

树-二叉树、满二叉树和完全二叉树 二叉树的定义&#xff1a; &#xff08;1&#xff09;当n0时&#xff0c;为空树&#xff1b; &#xff08;2&#xff09;当n>0时&#xff0c;是由一个根结点和称为根结点的左、右子树构成&#xff0c;并且两颗子树互不相交。 满二叉树&…

Codrops 优秀教程:基于 CSS3 的全屏网页过渡特效

向大家分享一个来自 Codrops 的基于 CSS3 实现的全屏网页过渡特效。页面初始布局是四个盒子&#xff0c;点击其中一个会扩张到全屏&#xff0c;其它的会淡出隐藏&#xff1b;关闭当前视图的时候又恢复到初始状态。 您可能感兴趣的相关文章-prefix-free&#xff1a;帮你从 CSS 前…

上海职称英语计算机取消,小编简析2017年职称英语考试是否取消

近日出台的《关于深化人才发展体制机制改革的意见》(以下简称《意见》)直接提出了我国将改革职称制度和职业资格制度&#xff0c;对职称外语和计算机应用能力考试不作统一要求&#xff1b;探索高层次人才等职称直聘办法。《意见》出台的是2016年职称英语考试前几天&#xff0c;…

elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...

这一节笔记还是聚合查询&#xff0c;以下是本节目录&#xff1a;去重统计 cardinality基础统计 stats百分位 percentiles字符串统计 string_stats1、去重统计 cardinality去重统计&#xff0c;就是统计某个字段的值&#xff0c;去重后的数量。先导入如下数据&#xff1a;PUT /e…

openstack基础环境

主机环境&#xff1a; centos7.5 ip:192.168.2.11 修改主机名&#xff0c;修改后主机名不得再更改 yum install chrony -y &#xff08;控制节点和计算节点都要装&#xff09;编辑 vi /etc/chrony.conf 文件&#xff0c;按照你环境的要求&#xff0c;对下面的键进行添加&#x…

Java内存模型又回来了

Java内存模型已经被遗忘了九年多了&#xff0c;但是大多数开放源代码Java支持者都希望对其进行现代化&#xff0c;并专注于并发&#xff0c;因为Java内存模型中引入的过程仅朝现代化迈出了一步 。 一个JEP&#xff08;JDK增强建议&#xff09;&#xff0c;编号188 &#xff0c…

Redis缓存设计模式与失效策略

大家好&#xff0c;我是升仔 引言 Redis作为一个灵活的键值数据库&#xff0c;广泛用于实现高性能缓存解决方案。理解其缓存设计模式和失效策略对于开发高效、可靠的应用程序至关重要。 缓存设计模式 缓存 aside&#xff08;旁路缓存&#xff09;: 基本原理&#xff1a;应用…

【Python 19】BMR计算器3.0(字符串分割与格式化输出)

1.案例描述 基础代谢率&#xff08;BMR&#xff09;&#xff1a;我们安静状态下&#xff08;通常为静卧状态&#xff09;消耗的最低热量&#xff0c;人的其他活动都建立在这个基础上。 计算公式&#xff1a; BMR&#xff08;男&#xff09; &#xff08;13.7*体重kg&#xff0…

经典案例:2012年最佳25个响应式网站设计作品《下篇》

2012年&#xff0c;响应式网站设计成为主流&#xff0c;这个概念由著名网页设计师 Ethan Marcotte 在2010年5月份提出&#xff0c;其目标是要让设计的网站能够响应用户的行为&#xff0c;根据不同终端设备自动调整尺寸。 响应式设计不再只是一个概念&#xff0c;众多大公司也把…

发布Akka Toolkit 2.3

最近宣布了Akka工具包 2.3.0版本的发布。 Akka是一个非常有用的工具包和运行时&#xff0c;用于在JVM上构建高度并发&#xff0c;分布式和容错的事件驱动应用程序。 它是分布式的&#xff0c;并提供了Actor&#xff0c;Future和STM等高级抽象。 它的新版本在2.2.0发布之后八个…

npm git 遇到的问题解决笔记

npm 报错 在无可奈何时可以试一试这个命令 npm cache clean --force commit 是如果报这样的错 删掉项目中.git/index.lock文件再commit即可解决问题 1.git config --global user.email xxx163.com 2.git config --global user.name xxx 3.ssh-keygen -t rsa -C xxx163.com(邮箱…

计算机技术应用广泛 属于科学计算方面的是,中国大学MOOC: 计算机技术应用广泛,以下属于科学计算方面的是哪个? 答案:火箭轨道计算...

相关问题端口的作用是什么&#xff1f;基于冰山模型的人才选拔模式&#xff0c;在应届生招聘、员工晋升等工作中都会应用&#xff0c;以下属于冰山模型中提到的考察因素的是创意的结果和过程不一定能够准确面对商业应用&#xff0c;创新则更需要( )和( )的保障。: 创意 结果 过…

新风系统风速推荐表_新风系统风速标准及与噪音的关系

原标题&#xff1a;新风系统风速标准及与噪音的关系如今&#xff0c;新风系统不仅能够对室内空气进行净化&#xff0c;还能够为室内提供源源不断的新鲜空气&#xff0c;真可谓空净产品的实力担当。新风系统不同于其它空气净化设备&#xff0c;只有进行合理的选择安装才能够更好…

Docverter – 文本文件轻松转换为 PDF,Docx 和 ePub 文件

Docverter 让你无需建立自己的文档转换工具就能够进行文件转换。Docverter 包装了几个开源项目&#xff0c;使您的文档能够进行完美的转换。借助一个简单的 HTTP API &#xff0c;把使用 HTML&#xff0c;Markdown, 或者 LaTeX 编写的纯文本文件转换为 DOCX&#xff0c;PDF&…

MoreUnit与MoreUnit

就在一年多以前&#xff0c;我写了一篇关于在Eclipse中使用JUnit的文章。 评论者之一推荐MoreUnit &#xff0c;以进一步提高测试效率。 尝试一下让我感到很高兴&#xff0c;并且我的自主神经系统立即记住了该插件的键盘快捷键…… 另外&#xff0c;在使用MoreUnit一段时间后&…

常见的虚拟机需要配置的服务

ssh服务&#xff1a;通过shell远程登录 ftp服务&#xff1a;通过ftp上传下载 samba服务&#xff1a;将磁盘映射到本地&#xff0c;一般调试可以代替ftp服务 nfs服务&#xff1a;目标板可以通过远程mount根文件系统&#xff0c;或者下载文件到目标板 转载于:https://www.cnblogs…

js html 导出word 不用activexobject,javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页...

javascript下用ActiveXObject控件替换word书签&#xff0c;将内容导出到word后打印第2/2页更新时间&#xff1a;2008年06月21日 22:57:31 作者&#xff1a;由于时间比较紧&#xff0c;没多的时候去学习研究上述工具包&#xff0c;现在用javascript操作ActiveXObject控件&…

平时二十三测

昨日AK&#xff0c; 今日垫底&#xff0c; 我简直是在坐过山车&#xff1b; 以后记住有返回值的函数一定要写返回值&#xff0c;不然全部输出0 题解: 第一题&#xff1a;全是-1&#xff0c; 是2^(n-1)-1,不会证&#xff0c;样例很明显&#xff1b; 对于有X个跟班的人&#xff0…

jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)

一直想摆脱windows环境&#xff0c;在纯linux下进行arm裸机开发&#xff0c;但是由于一直不知道JLink如何在linux下运行和配置&#xff0c;一直无法进行下去。以前都是windowsAXD调试。包括本人用的FL2440开发板和JLink调试器也没有提供在linux调试的文档。前些天由于想研究下U…

CSS3 实用技巧:制作三角形

您可能感兴趣的相关文章 2012年最酷的25个 CSS3 学习教程35个让人惊讶的 CSS3 动画效果演示推荐12个漂亮的 CSS3 按钮实现方案20个非常绚丽的 CSS3 特性应用演示24款非常实用的 CSS3 工具终极收藏 /* create an arrow that points up */div.arrow-up {width:0px; height:0px; b…