资讯专栏INFORMATION COLUMN

在Shell中进行独立的集成测试

HelKyle / 3475人阅读

摘要:我可以在不同的语言和框架之间进行切换,而不需要对测试脚本做任何改变。对于它的价值,的主旨是随时愉快地运行在零单元测试的生产环境下。我只需要通过自己的基于的测试即可。

翻译:疯狂的技术宅
原文:https://zachholman.com/posts/...

本文首发微信公众号:jingchengyideng
欢迎关注,每天都给你推送新鲜的前端技术文章


我在开发 during.com 时创建了一系列的微服务,它们被用来做一些同步、导入和单调繁重数据处理之类的工作。

如果你对微服务不熟悉,那么它只是一个花哨的名词而已,意思就是“让我们把这些该死的业务逻辑散落的到处都是!”

不管怎样,我的微服务到处都是,嗯,的确是“微”。不过我绝对不是一个逗逼,我已经多次重写了自己的web服务,从Rails中的一个目录开始,然后迁移到Ruby,接着是Crystal,之后是Go,现在又回到了Ruby。这并不是在浪费时间,这只是为了以防万一而尝试新的方法。

最后我又把这些服务迁移回了Ruby。这段时间Ruby的表现真是没得说,它能很轻松的进行扩展来应对用户的请求。不过目前这个应用还没有进入beta测试阶段,在你还没有用户的时候,它的确容易扩展。实际上如果在没有用户使用的前提下,几乎任何关于软件开发的一切问题都不算什么,当然除了赚钱(当然了这也并没有成为硅谷任何一家公司的障碍)。

好吧我跑题了,我一直都很享受用Shell来测试这些服务的过程。

在POSIX shell环境下测试, 或者 UBIQUITOUSIX shell 环境也可以

我已经用Shell脚本为这些服务编写了测试,很不错。首先,不需要为基本环境操心。无论是我的AWS实例,还是我的持续集成服务器,还有我自己的开发机上都有Shell环境。所以不需要安装任何东西,也不必运行什么Docker实例(实际上用它肯定也没什么坏处)。

不过最重要的一点是,我的测试是独立的,独立于将来可能会使用的任何语言。我可以在不同的语言和框架之间进行切换,而不需要对测试脚本做任何改变。这一点非常重要,因为如果你的v1版本中有一个微妙的bug,而测试却通过了,当你开始重写v2版本的服务时,如果在无意中修正了这个bug,测试将可能失败。这意味着你暴露给其它服务的API不会因此而意外中断,你可以使用其它服务来暂时顶替,为修复bug争取时间,而不是在部署到生产环境后大吃一惊。

这些测试的工具也是相当不错的,这些年我一直在用我的好友Blake Mizerany写的一个Shell环境下的小工具roundup。最近我一直在使用Sam Stephenson的 bats,现在它已经形成了一个十分活跃的社区(哈,谁能想到呢,仅仅是一个shell测试工具而已)。我的Shell测试看起来就像这样,用bats:

@test "Responds with events within the given timespan" {
  url_params="?starts_at=2017-05-01T00:00:00-00:00&ends_at=2017-05-31T00:00:00-00:00"
  run curl "$URL$url_params" --silent -H "Authorization: Bearer:$bearer"

  assert_output --partial "Test Event 0"
  assert_output --partial "Test Event 2"
  refute_output --partial "Test Event 5"
  refute_output --partial "No location data"
  refute_output --partial "Not included in the date span"
}

测试非常简单,也容易理解。基本上就是运行curl然后检查输出结果,完成。

整合周围的一切

最后一点,这些微服务非常之小,我完全可以不用为它们写任何其它的测试,只需要写集成测试即可。全栈测试(full-stack)真的非常有趣,但是人们对此很谨慎,不知道它会成为下一个好主意还是成为世界上最差劲的想法。对于它的价值,GitHub的主旨是随时愉快地运行在零单元测试的生产环境下。总的来说我正在实践这种悬而未决的理论,不过我会悬崖勒马。如果你感兴趣的话可以阅读关于这个话题更多的文章。

但是我要说的是在这种情况下,哇,一股新鲜空气袭来。我们的测试是可移植的,如果我重写了服务,不必为它们重写新的测试。我只需要通过自己的基于 shell 的测试即可。


本文首发微信公众号:jingchengyideng

欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8927.html

相关文章

  • Zsh 开发指南(第二十一篇 测试方法以及编写可测试代码方法)

    摘要:单元测试作为一种重要的测试方法,单元测试在很多种编程语言程序测试中起到举重轻重的作用。但不幸的是,单元测试基本不适用于脚本。对单元测试的精力投入很可能会减少在功能测试的精力投入。 导读 在正式的场景,代码写完后都是需要测试的,shell 脚本也不例外。但 shell 脚本的特性导致测试方法和其他语言有所不同。 单元测试 作为一种重要的测试方法,单元测试在很多种编程语言程序测试中起到举重...

    lifefriend_007 评论0 收藏0
  • 【程序人生】做了低薪运营6年,妹纸靠什么转行拿下 20W 年薪?

    摘要:因当时项目组人手严重不足,故兼做部分功能测试的工作。年下半年,我的工作职能发生了调整,不再跟进系统相关,工作职能偏向文职,无法有更大的进步空间。后来从网上了解到自动化测试,去年下半年也开始通过视频学习自动化测试相关,决心转行做自动化测试。 本人大学专业非计算机相关,毕业六年一直从事运营相关工...

    时飞 评论0 收藏0
  • Top 10 JavaScript编辑器,你用哪个?

    摘要:在这个编辑器中,和是其中排名靠前的两个。是一个免费的轻量级编辑器和,用于和开发。对于免费的代码编辑器来说,是一个很好的选择。可以安装两个命令行实用程序,用于从启动编辑器,用于管理的软件包。 对于JavaScript程序员来说,目前有很多很棒的工具可供选择。本文将会讨论10个优秀的支持javascript,HTML5和CSS开发,并且可以使用Markdown进行文档编写的文本编辑器。为什...

    zombieda 评论0 收藏0
  • 10大工具汇总,多维度简化Kubernetes部署

    摘要:的迭代开发是谷歌为开发的工具之一,是一种为应用程序执行连续部署的方法。它可以在现有的渠道中使用,并与一些外部构建工具集成,主要是谷歌自己的。 Kubernetes已经成为大规模部署经过编辑的应用程序的标准方法(许多人会说这是标准方法)。但是,如果Kubernetes可以帮助我们控制无序和复杂的经编辑的部署,那么有什么方法可以帮助我们控制Kubernetes呢?毕竟,它也可能是复杂、混乱...

    rose 评论0 收藏0
  • Linux云计算高端架构师+DevOps高级虚拟化高级进阶视频

    摘要:课程大纲开班典礼开班典礼开班典礼操作系统系统安装及启动流程操作系统系统安装及启动流程必备命令讲解必备命令讲解必备命令讲解及系统启动流程必备命令讲解及系统启动流程启动流程和用户及用户组讲解启动流程和用户及用户组讲解用户权限讲解及编辑器用户权限 课程大纲1.开班典礼(1)_rec.mp42.开班典礼(2)_rec.mp43.开班典礼(3)_rec.flv4.Linux操作系统系统安装及启动...

    Cheng_Gang 评论0 收藏0

发表评论

0条评论

HelKyle

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<