Jef*_*rin 15 ruby ruby-on-rails smoke-testing cucumber
一,设置......
我目前正在使用Ruby 1.8.7 MRI在Mac OS X上开发Rails 3应用程序,针对MySQL数据库运行测试和本地开发.我有3个"其他"非本地环境,我们在公司为每个名为dev,tqa和prod的应用程序使用.它们使用JRuby(1.8.7)和Oracle作为后端在Tomcat中运行.
正如你所看到的,环境是完全不同的,我们碰到的有关部署的一些错误到Oracle/JRuby的环境中不存在的本地(如日期处理,并在指定的Oracle默认模式).
我喜欢在本地运行像Cucumber/Webrat/Capybara这样的东西来点击应用程序中暴露的每个URL,以确保基本的东西正常工作(即,冒烟测试).理想情况下,它会点击每个网址,并会执行一些简单的操作,例如在表单中输入数据和点击按钮等.
理想情况下,当我部署到dev/tqa时,我会运行类似的东西,除了指向已部署的应用程序而不是本地应用程序.黄瓜似乎已经过优化,可以在本地运行的应用程序上运行,并且可以很好地与Rails集成,但是无法针对所有意图运行"外部"应用程序(或者至少我找不到实际工作的简单方法).
此外,当我部署到prod时,我想要运行一组类似的冒烟测试,除非它不会改变当前生产数据库的状态(即,只会获取GET URL).
我猜想可以使用像Selenium这样的东西,但我真的很喜欢只运行一个rake任务并像使用Cucumber那样取回结果.
是否有任何Rails/Ruby方法可以做到这一点,或者其他人是否只使用wget或Selenium推出自己的解决方案?
此处提出了类似的问题:部署后,自动对应用程序中的所有网页进行测试
不过,我不确定这个问题究竟是我的想法.
是的,您可以使用Cucumber和Capybara编写冒烟测试,并针对远程服务器运行它们.我做到了,它的确有效.我也做curl
/ wget
和一些项目等,但黄瓜+水豚允许您使用的页面(使用JavaScript甚至那些)互动,而不仅仅是刮他们.
Rack::Test
驱动程序不支持远程请求; 它的Javascript驱动程序.无论您是否确实需要Javascript来处理您正在测试的页面,您都需要使用Javascript驱动程序.根据驱动程序的文档配置Capybara使用Javascript驱动程序并标记您的测试@javascript
.(我推荐使用poltergeist/PhantomJS驱动程序;它比Selenium更快,比capybara-webkit提供更好的错误,并且易于设置.)额外奖励:你可以在你的测试中做一些需要Javascript的事情,你会被吸烟 - 测试整个堆栈,包括Javascript.Capybara.app_host = "http://your-server.yourco.com"
Capybara.run_server = false
(不是必需的,但没有必要运行你不会使用的本地服务器)简单地击败您的应用程序以查看它是否爆炸的一种方法是从生产Web服务器日志文件中获取GET请求列表,并将这些请求提供给类似curl
或wget
将尽快获取所有内容的程序.
这是一个简单的例子:
#!/usr/bin/env ruby
# rerun
require 'uri'
def extract_from_log(base_uri, log_path)
File.open(log_path) do |log|
while (line = log.gets)
if (line.match(%r{"GET (/\S+) HTTP/\d\.\d"}))
uri = URI.join(base_uri, $1)
puts uri.to_s
end
end
end
end
base_uri, log_path = ARGV
if (base_uri and log_path)
extract_from_log(ARGV[0], ARGV[1])
else
puts "Usage: #{File.basename($0)} <base_uri> <log_path>"
exit(-1)
end
Run Code Online (Sandbox Code Playgroud)
给定带有行匹配的标准Web日志文件,"GET /... HTTP/1.1"
您可以轻松地提取路径,但是必须提供基本URI:
rerun http://example.com/ example.log
Run Code Online (Sandbox Code Playgroud)
这将列出该日志文件中找到的所有URL.您可以将此管道wget
用于获取目的:
rerun http://example.com/ example.log | wget -i -
Run Code Online (Sandbox Code Playgroud)
如果您已经破坏了任何东西,您将开始在应用程序中收到错误,并且通过适当的通知系统,您将能够捕获这些并跟踪它们.