成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

全方位解讀Ruby on Rails性能測試技巧

開發 開發工具
Ruby on Rails性能測試首先需要模仿大量的數據,才能真正掌握測試數據的真實性。在這篇文章中我們會對此做一個詳細的介紹。

Ruby on Rails是一個非常實用WEB開發框架。不過它的性能到底如何呢?這需要我們進行詳細的測試。那么如何進行Ruby on Rails性能測試呢?#t#

Ruby on Rails性能測試1.  要進行Ruby on Rails性能測試,我們首先要模仿大量的數據,我們現在知道,在test/fixtures/目錄下的yml文件里添加我們的測試數據,在運行測試時,這些數據會被加載到數據庫。但是一條兩條數據還可以,數據多的情況下,一條一條在yml文件里寫可不行,所以,我們先看看怎樣在yml文件里造大量的數據。在fixtrue目錄下創建一個子目錄performance,在里面新建order.yml文件,把內容改成下面的樣子:

 

  1. # Read about fixtures at 
    http://ar.rubyonrails.org/
    classes/Fixtures.html  
  2. <% for i in 1..100 %> 
  3. order_<%= i %>:  
  4. id: <%= i %> 
  5. name: Fred  
  6. email: fred@flintstones.com  
  7. address: 123 Rockpile Circle  
  8. pay_type: check  
  9. <% 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文件,內容如下:

 

  1. require File.dirname(__FILE__)
     + '/../test_helper'  
  2. require 'store_controller'  
  3. class OrderTest < Test::Unit::TestCase 
  4. fixtures :products  
  5. HOW_MANY = 100 
  6. def setup  
  7. @controller = StoreController.new  
  8. @request = ActionController:
    :TestRequest.new  
  9. @response = ActionController
    ::TestResponse.new  
  10. get :add_to_cart, :id => 1  
  11. end  
  12. def teardown  
  13. Order.delete_all  
  14. end  
  15. def test_save_bulk_orders  
  16. elapsedSeconds = Benchmark::realtime do  
  17. Fixtures.create_fixtures
    (File.dirname(__FILE__) +  
  18. "/../fixtures/performance", "orders")  
  19. assert_equal(HOW_MANY, Order.find_all.size)  
  20. 1.upto(HOW_MANY) do |id|  
  21. order = Order.find(id)  
  22. get :save_order, :order => order.attributes  
  23. assert_redirected_to :action => 'index'  
  24. assert_equal("Thank you for your
     order.", flash[:notice])  
  25. end  
  26. end  
  27. assert elapsedSeconds < 3.0
    "Actually took #{elapsedSeconds} seconds"  
  28. end  
  29. 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來控制。例如:

 

  1. class OrderTest 

    < Test::Unit::TestCase 
  2.  fixtures :products  
  3.  self.use_transactional
    _fixtures = true  
  4.  HOW_MANY = 100 
  5.  ……  
  6. 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)

在這里,書上寫的是兩個方法之間用“”來分割,在我的機器上是使用一個空格來分割。

責任編輯:曹凱 來源: 新客網
相關推薦

2009-12-15 10:10:42

Ruby過程對象

2009-12-15 10:48:54

Ruby局部變量

2009-12-14 17:04:13

Ruby讀寫UNIX命

2009-12-14 15:30:43

安裝Ruby on R

2010-09-25 14:39:29

Bruce Tate

2015-10-14 17:27:18

性能

2010-01-04 14:06:35

Silverlight

2015-10-10 11:00:05

RubyRails性能

2009-12-16 09:29:26

Ruby布爾表達式

2009-12-17 17:37:42

Ruby on Rai

2024-04-08 11:52:08

PromQL技術監控

2009-12-09 13:32:08

PHP zend安裝

2009-12-16 15:23:33

Ruby on rai

2009-12-21 13:06:05

WCF Address

2014-06-26 17:25:22

車聯網 ECU

2011-10-26 09:28:28

紅帽大數據Gluster

2010-01-27 13:52:15

Android多媒體框

2009-12-15 17:28:11

Ruby自動化腳本框架

2010-07-12 09:22:05

RubyRuby on rai

2009-12-18 13:13:59

Ruby on Rai
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩成人在线观看 | 超碰520| 天天av天天好逼 | 国产成人精品一区二区三区四区 | 久久久久亚洲 | 天天干视频 | 日本不卡一区二区三区在线观看 | 久久久精品影院 | 亚洲国产成人精品久久 | 青青草原精品99久久精品66 | 在线日韩视频 | 伊人伊人| 91电影 | 夜色www国产精品资源站 | 亚洲福利一区 | 秋霞在线一区二区 | 国产中文字幕在线 | 色爱综合网 | 国产精品视频一区二区三区, | 人成在线视频 | 99视频在线 | 福利网址| 亚洲天堂日韩精品 | 国产精品美女 | 国产黄色大片在线免费观看 | 久久久久国产一区二区 | 天天想天天干 | 成人国产精品免费观看 | 无人区国产成人久久三区 | 欧日韩不卡在线视频 | 麻豆亚洲 | 日韩一区二区三区四区五区 | 国产日韩精品一区二区 | 日日噜噜夜夜爽爽狠狠 | 国产欧美一区二区三区在线看 | 国产一区 | 欧美freesex黑人又粗又大 | 欧美视频在线看 | 国产玖玖| 成人免费观看网站 | 粉嫩在线 |