2011-12-13 12 views
8

हम यूनिट परीक्षण के लिए रेल परियोजना में आरएसपीसी का उपयोग कर रहे हैं। मैं आरएसपीईसी में कुछ प्रदर्शन परीक्षण स्थापित करना चाहता हूं, लेकिन इसे 'नियमित' सुविधाओं और फिक्स्चर को बाधित न करने के तरीके से ऐसा करें।मैं 'पक्ष पर' प्रदर्शन परीक्षण के लिए आरएसपीसी कैसे स्थापित कर सकता हूं

आदर्श रूप में मैं अपने प्रदर्शन चश्मे को एक निश्चित तरीके से टैग करने में सक्षम हूं जैसे कि वे डिफ़ॉल्ट रूप से नहीं चलते हैं। फिर जब मैं इन चश्मे को स्पष्ट रूप से चलाने के लिए निर्दिष्ट करता हूं तो यह फिक्स्चर के एक अलग सेट को लोड करेगा (यह एक बहुत बड़ा और अधिक 'उत्पादन-जैसी' डेटासेट के साथ प्रदर्शन परीक्षण करने के लिए समझ में आता है)।

क्या यह संभव है? ऐसा लगता है कि यह होना चाहिए।

क्या कोई इस तरह कुछ स्थापित करता है? आप इसके बारे में कैसे गए?

उत्तर

20

मैं क्या मैं निम्नलिखित के माध्यम से लिए देख रहा था पाने में कामयाब रहे।

0

यदि आप प्रदर्शन परीक्षण करना चाहते हैं, तो नए रिलिक या उत्पादन डेटा के स्नैपशॉट के साथ कुछ क्यों न चलाएं? मुझे लगता है कि इसके लिए आपको वास्तव में अलग-अलग चश्मे की ज़रूरत नहीं है।

# Exclude :performance tagged specs by default 
config.filter_run_excluding :performance => true 

# When we're running a performance test load the test fixures: 
config.before(:all, :performance => true) do 
    # load performance fixtures 
    require 'active_record/fixtures' 
    ActiveRecord::Fixtures.reset_cache 
    ActiveRecord::Fixtures.create_fixtures('spec/perf_fixtures', File.basename("products.yml", '.*')) 
    ActiveRecord::Fixtures.create_fixtures('spec/perf_fixtures', File.basename("ingredients.yml", '.*')) 
end 

# define an rspec helper for takes_less_than 
require 'benchmark' 
RSpec::Matchers.define :take_less_than do |n| 
    chain :seconds do; end 
    match do |block| 
    @elapsed = Benchmark.realtime do 
     block.call 
    end 
    @elapsed <= n 
    end 
end 

# example of a performance test 
describe Api::ProductsController, "API Products controller", :performance do 
    it "should fetch all the products reasonably quickly" do 
    expect do 
     get :index, :format => :json 
    end.to take_less_than(60).seconds 
    end 
end 

लेकिन मैं Marnen की बात यह है कि यह वास्तव में प्रदर्शन के परीक्षण के लिए सबसे अच्छा विचार नहीं है के साथ सहमत करने के लिए जाते:

+0

मुख्य रूप से मैं सोच रहा था कि प्रदर्शन परीक्षण स्वचालित करने के लिए यह कितना संभव होगा। ताकि एक कोड परिवर्तन जो महत्वपूर्ण नकारात्मक प्रदर्शन प्रभाव पेश करता है, एक परीक्षण को 'परीक्षण' करेगा, यह दावा करता है कि एक निश्चित फ़ंक्शन 30 सेकंड से कम समय में चलाया जा सकता है। –

+0

आप यह कर सकते हैं, लेकिन मुझे यकीन नहीं है कि यह वास्तव में उपयोगी कैसे होगा, खासकर जब से आरएसपीईसी उपयोगकर्ता के सामने आने वाली सामग्री का परीक्षण नहीं कर रहा है, और प्रदर्शन उपयोगकर्ता का सामना कर रहा है। मुझे लगता है कि आप अपने प्रदर्शन परीक्षणों के लिए आरएसपीसी के बजाय ककड़ी का उपयोग कर सकते हैं, लेकिन मुझे लगता है कि यह नई अवशेष के लिए सबसे अच्छा है। –

+1

जिसे प्रोफाइलिंग कहा जाता है, प्रदर्शन परीक्षण नहीं। निष्पादन परीक्षण यह सुनिश्चित करना चाहिए कि कोड का एक टुकड़ा वांछित समय के भीतर चलता है, एक निश्चित संदर्भ के साथ, नए कोड उत्पादन में आने से पहले। – aledalgrande

संबंधित मुद्दे