日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
全方位解讀RubyonRails性能測(cè)試技巧

Ruby on Rails是一個(gè)非常實(shí)用WEB開發(fā)框架。不過它的性能到底如何呢?這需要我們進(jìn)行詳細(xì)的測(cè)試。那么如何進(jìn)行Ruby on Rails性能測(cè)試呢?#t#

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),楚雄州網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:楚雄州等地區(qū)。楚雄州做網(wǎng)站價(jià)格咨詢:18982081108

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

  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 %>

然后再運(yùn)行我們一個(gè)空測(cè)試,order_test.rb

depot>ruby test/unit/order_test.rb

到數(shù)據(jù)庫里查看下表order,里面已經(jīng)初始化了100條記錄了。我們之所以要新建一個(gè)performance目錄,是因?yàn)槲覀儾幌脒\(yùn)行每個(gè)測(cè)試都要初始化100條記錄,我們之前在測(cè)試model和controller的時(shí)候用的那個(gè)order.yml文件中的記錄就夠了。

Ruby on Rails性能測(cè)試2.  在test目錄下也創(chuàng)建一個(gè)performance目錄,然后創(chuàng)建一個(gè)order_test.rb文件,內(nèi)容如下:

 
 
 
  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個(gè)order,而是在test_save_bulk_orders方法中,先使用elapsedSeconds = Benchmark::realtime來計(jì)算測(cè)試花費(fèi)的時(shí)間,再通過調(diào)用create_fixtures方法指定我們要加載order的yml文件,然后對(duì)每條加載的order,進(jìn)行保存,在通過斷言判斷是否調(diào)用了index的Action,和Flash中的內(nèi)容。***再判斷elapsedSeconds是否小于3秒。

還有一點(diǎn)要注意,這里實(shí)際上對(duì)每個(gè)order進(jìn)行了兩次Save操作,一次是在加載yml文件的時(shí)候,一次是我們調(diào)用save_order的時(shí)候。

Ruby on Rails性能測(cè)試3.  如果我們不想在每個(gè)測(cè)試運(yùn)行的時(shí)候都從yml文件里加載數(shù)據(jù),那么我們可以通過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性能測(cè)試4.  如果我們想知道某個(gè)方法或某句代碼所花費(fèi)的時(shí)間,可以通過rails的腳本script/profiler and script/benchmarker來查看,例如,我們注意到Product這個(gè)Model的search方法比較慢,為了避免盲目地進(jìn)行優(yōu)化,我們使用Profiler來告訴我們每句代碼使用了多少時(shí)間,例如:

depot>ruby script/performance/profiler "Product.salable_items"

注意這里的script的路徑,我在instantrails里的和書上的不一致,如果提示腳本找不到,那就在自己的本地目錄找找看profiler文件放在什么地方。

Ruby on Rails性能測(cè)試5.  我們還可以使用benchmarker來比較兩個(gè)方法所消耗的時(shí)間,例如:

ruby script/performance/benchmarker 10 "Product.salable_items" "Order.count_pending"

輸出結(jié)果是:

user system totalreal
#1 0.078000  0.000000  0.078000 ( 0.078000)
#2 0.000000  0.000000  0.000000 ( 0.016000)

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


分享文章:全方位解讀RubyonRails性能測(cè)試技巧
標(biāo)題URL:http://m.5511xx.com/article/cdcdpje.html