自动化工具 [译] Mimic, 轻量级 Web Service 测试桩

超爱fitnesse · June 27, 2015 · Last by AItestwork replied at July 06, 2018 · 1008 hits
本帖已被设为精华帖!

原文标题:Mimic, simple web service stubs for testing

原文: https://github.com/lukeredpath/mimic/blob/develop/README.md

译者注:

fake, stub, mock三个测试概念老是被混用,它们中文意思分别是

  • fake——假的,伪,(形容词),例句:a fake web service
  • stub——桩,(名词),例句:a web service stub,稻草人,充气娃娃等都是stub。
  • mock——模拟,(动词),例句:mock a web service

很多技术文章中出现的 存根 的英文原文就是"stub",本文把stub翻译成 测试桩

Mimic, 轻量级Web Service测试桩

Mimic是什么?

Mimc是一个测试工具,当你在对访问web service的应用或库做集成测试时,可用来模拟那些web service实现。

为什么不用stub?

目前已经有些比较好的工具,比如 FakeWeb,允许你在做单元测试或功能测试时,在低层次模拟请求响应。但是我们在对代码做集成测试时,希望能做到面面俱到的测试。

Mimic启动一个能响应http请求的真实Web服务器,替换你的网络应用程序实际运行所需的web service。这让你能在接近真实环境的情况下,对各种服务响应作出测试。

当然,因为Mimic会对真实http请求作出响应,它也能测试Ruby语言之外开发的网络应用。

例子

定义一个请求测试桩:

Mimic.mimic.get("/some/path").returning("hello world")

使用RestClient访问上述请求:

$ RestClient.get("http://www.example.com:11988/some/path") # => 200 | hello world

定义多个请求测试桩; 注意你可以用不同的方法为同一个url定义多个请求。

Mimic.mimic do
get("/some/path").returning("Hello World", 200)
get("/some/other/path").returning("Redirecting...", 301, {"Location" => "somewhere else"})
post("/some/path").returning("Created!", 201)
end

你甚至可以使用中间件Rack,比如应付身份验证之类的公共测试场景:

Mimic.mimic do
use Rack::Auth::Basic do |user, pass|
user == 'theuser' and pass == 'thepass'
end

get("/some/path")
end

最后,因为Mimic是用Sinatra处理请求的,你可以像Sinatra应用代码那样定义请求测试桩:

Mimic.mimic do
get "/some/path" do
[200, {}, "hello world"]
end
end

非Ruby环境下使用Mimic

Mimic支持通过HTTP REST API 配置生成请求测试桩。所以,只要能发出http请求,就能使用Mimic。

首先,你需要后台启动Mimic。你只需要一个简单的Ruby脚本和Ruby gem库 daemons :

#!/usr/bin/env ruby
require 'mimic'
require 'daemons'

Daemons.run_proc("mimic") do
Mimic.mimic(:port => 11988, :fork => false, :remote_configuration_path => '/api') do
# configure your stubs here
end
end

设置Ruby脚本的可执行权限,并启动:

$ your_mimic_script.rb start (or run)

启动后,远程配置api(/api/get或/api/post)就将生效——这也是可以配置的,因为你要模拟的请求url都不能与远程配置api的url相同,也不能作为远程配置api的下级url。

远程配置api支持JSON和PList请求头格式, 默认为JSON。你需要为Plist格式请求设置Content-Type为 application/plist。

下面Mimic请求桩定义配置(使用Ruby DSL):

Mimic.mimic.get("/some/path").returning("hello world")

对应的REST API配置方式为:

$ curl -d'{"path":"/some/path", "body":"hello world"}' http://localhost:11988/api/get

类似的,一个POST请求要如下配置:

$ curl -d'{"path":"/some/path", "body":"hello world"}' http://localhost:11988/api/post

远程配置api的最后面的动词就是你模拟的http请求的方法,http请求的路径,响应主体,响应状态码,响应头在POST数据(使用JSON或PList格式)中定义。更多例子请看github代码中附带的Cucumber测试文件。

对上述REST API的 Objective-C 封装 也已提供, 你可以用来测试OSX and iOS 应用。

贡献者

License

作为惯例, github仓库中的代码使用MIT license发布。

共收到 7 条回复 时间 点赞

赞!特别是 fake,stub,mock 这三个名词的解释让我终于搞清楚了这三个词的正确翻译。

我也顺便查了一下 fake,stub,mock 的详细解释,结果找到这个(英文):http://googletesting.blogspot.com/2013/07/testing-on-toilet-know-your-test-doubles.html,解释得很详细,后面我会试着把这篇文章翻译一下。

#1楼 @chenhengjie123
chenhengjie123 就是那位第一个到教室坐第一排的同学。翻译文章比写文章累啊!
拭目以待你的更多翻译!

能用来做单请求或并发接口轻量级压测么?

 赞,好好学习一下,@htmlbiji留个联系方式请教一下

#5楼 @kendydrm
htmlbiji@qq.com

Author only
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up