全方位解读Ruby on Rails性能测试技巧

 
   | |

导读:Ruby on Rails性能测试首先需要模仿大量的数据,才能真正掌握测试数据的真实性。在这篇文章中我们会对此做一个详细的介绍

关键词:Ruby on Rails 性能测试 WEB开发框架

 
正在加载数据...

  Ruby on Rails是一个非常实用WEB开发框架。不过它的性能到底如何呢?这需要我们进行详细的测试。那么如何进行Ruby on Rails性能测试呢?

  Ruby on Rails性能测试1.要进行Ruby on Rails性能测试,我们首先要模仿大量的数据,我们现在知道,在test/fixtures/目录下的yml文件里添加我们的测试数据,在运行测试时,这些数据会被加载到数据库。但是一条两条数据还可以,数据多的情况下,一条一条在yml文件里写可不行,所以,我们先看看怎样在yml文件里造大量的数据。在fixtrue目录下创建一个子目录performance,在里面新建order.yml文件,把内容改成下面的样子:

以下是引用片段:
# Read about fixtures at 
http://ar.rubyonrails.org/
classes/Fixtures.html   
<% for i in 1..100 %>  
order_<%= i %>:   
id: <%= i %>  
name: Fred   
email: fred@flintstones.com   
address: 123 Rockpile Circle   
pay_type: check   
<% end %>  

  然后再运行我们一个空测试,order_test.rb

以下是引用片段:
  depot>ruby test/unit/order_test.rb

  到数据库里查看下表order,里面已经初始化了100条记录了。我们之所以要新建一个performance目录,是因为我们不想运行每个测试都要初始化100条记录,我们之前在测试model和controller的时候用的那个order.yml文件中的记录就够了。

  Ruby on Rails性能测试2.在test目录下也创建一个performance目录,然后创建一个order_test.rb文件,内容如下:

以下是引用片段:
require File.dirname(__FILE__)
 + '/../test_helper'  
require 'store_controller'  
class OrderTest < Test::Unit::TestCase 
fixtures :products  
HOW_MANY = 100 
def setup  
@controller = StoreController.new  
@request = ActionController:
:TestRequest.new  
@response = ActionController:
:TestResponse.new  
get :add_to_cart, :id => 1  
end  
def teardown  
Order.delete_all  
end  
def test_save_bulk_orders  
elapsedSeconds = Benchmark::realtime do  
Fixtures.create_fixtures(
File.dirname(__FILE__) + 
 "/../fixtures/performance", "orders")  
assert_equal(HOW_MANY, Order.find_all.size)  
1.upto(HOW_MANY) do |id|  
order = Order.find(id)  
get :save_order, :order => order.attributes  
assert_redirected_to :action => 'index'  
assert_equal("Thank you for your order.", flash[:notice])  
end  
end  
assert elapsedSeconds < 3.0, "
Actually took #{elapsedSeconds} seconds"  
end  
end 

  在这里,我们没有直接加载100个order,而是在test_save_bulk_orders方法中,先使用elapsedSeconds = Benchmark::realtime来计算测试花费的时间,再通过调用create_fixtures方法指定我们要加载order的yml文件,然后对每条加载的order,进行保存,在通过断言判断是否调用了index的Action,和Flash中的内容。最后再判断elapsedSeconds是否小于3秒。

  还有一点要注意,这里实际上对每个order进行了两次Save操作,一次是在加载yml文件的时候,一次是我们调用save_order的时候。

  Ruby on Rails性能测试3.如果我们不想在每个测试运行的时候都从yml文件里加载数据,那么我们可以通过self.use_transactional_fixtures来控制。例如:

以下是引用片段:
class OrderTest < Test::Unit::TestCase  
fixtures :products   
self.use_transactional_fixtures = true   
HOW_MANY = 100  
……  
end 

  Ruby on Rails性能测试4.如果我们想知道某个方法或某句代码所花费的时间,可以通过rails的脚本script/profiler and script/benchmarker来查看,例如,我们注意到Product这个Model的search方法比较慢,为了避免盲目地进行优化,我们使用Profiler来告诉我们每句代码使用了多少时间,例如:

 

以下是引用片段:
 depot>ruby script/performance/profiler "Product.salable_items"

  注意这里的script的路径,我在instantrails里的和书上的不一致,如果提示脚本找不到,那就在自己的本地目录找找看profiler文件放在什么地方。

  Ruby on Rails性能测试5.我们还可以使用benchmarker来比较两个方法所消耗的时间,例如:

以下是引用片段:
ruby script/performance/benchmarker 10 "Product.salable_items" "Order.count_pending"

  输出结果是:

以下是引用片段:
user system totalreal
#1 0.078000  0.000000  0.078000 ( 0.078000)
#2 0.000000  0.000000  0.000000 ( 0.016000)

  在这里,书上写的是两个方法之间用“”来分割,在我的机器上是使用一个空格来分割。

原文出处:http://developer.51cto.com/art/200912/170296.htm
 
来源:51cto    
 
 
 
 
 

Ruby on Rails

 
由InfoQ中文站、敏捷方法论的领导厂商ThoughtWorks共同举AgileChina 2009的新闻发布会于今日在京举行。敏捷中国大会是国内敏捷技术领域最高水平的大会。
 
Ruby on Rails是构建在Ruby语言上的一个Web开发开源框架,有时也被称为RoR或Rails。Ruby是一个面向对象的编程语言,与Perl和Python类似。
 
很多语言被描述为“脚本语言”,这些语言可以被用来编写Web服务用户应用。“脚本语言”这个术语经常应用在像“quick and dirty”的解决方案上……
 
一个具有15年经验的开发商在设计网络书店这个项目时,从Java转移到了Rails。他所设计的项目包括实用书店,实用程序编制LLC的一种,该实用书店出售印刷物和可下载的PDF……
 
"Advanced Rails Recipes: 84 New Ways to Build Stunning Rails Apps"一书的作者Mike Clark说,Ruby语言框架的最新版本Rails 2.0意在对REST应用进行操作……

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

 

Mashup是一个非常cool的新的应用程序种类。如果你想真正的了解它们,我们需要回过头来看看你现在的计算机,其实它就是一个非常好的帮助你理解mashup的模型。现在开源的操作系统无疑是非常好的apis的集合或应用程序编程接口,帮助开发者去构建其应用程序。计算机本身也是一个很好的为用户提供接口的例子,键盘和鼠标可以被理解为你通过计算机的接口而使用的不同的应用程序。本技术手册为读者提供了一些相关信息,如果需要深入了解mashup,读者可以借助其他参考资源。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录