我正试图为我的公司创建性能自动化框架。贝因伯格新手到红宝石球场,我想保持简单。这是性能框架结构
我确实有多个ruby文件,如request.rb、payload.rb等在“公共”文件夹中(因为这些文件包含一些实用程序),然后在test.rb中进行测试(在“TestFlows->SimpleFlow->test.rb”下)。
有关更多细节,请参见上述结构。
准确的代码,我现在在这些文件下面有
request.rb
require 'ruby-jmeter' #(Consider any 3rd party gem )
require 'rubygems'
module Company #Note that i am using same module name 'company'
module Request
def self.send_request()
visit '192.148.1.2' # this is function defined under ruby-jmeter
end
end
endpayload.rb
require 'ruby-jmeter' #(Consider any 3rd party gem )
require 'rubygems'
module Company #Note that i am using same module 'company'
module Payload
def self.get_payload()
------- Again some 'ruby-jmeter' function calls
end
end
endetc文件
Test.rb
require 'ruby-jmeter' #(Consider any 3rd party gem )
require 'rubygems'
require 'require_all' #(gem to load all files from folder)
require_all '../../common/'
module Company #Note that i am using same module 'company'
test name:'GooglePerformanceTest' do
defaults domain: 'http://google.com' ,protocol: http
threads name: 'NoOfUsers',scheduler: false,continue_forever:
false, count: 2 do
Request.send_request()
end
end #end of testPlan
view_results_tree
puts "JMX FILE IS GONNA SAVED @
"+Dir.pwd+"/CreatedJMeter_DB2Navigation.jmx"
end.jmx(file: Dir.pwd+"/CreatedJMeter_DB2Navigation.jmx")
end当我运行这个程序,它到上面,我得到了错误的那些(第三方红宝石的功能未定义)。
有人能指出我对上述结构的问题,并建议我做这件事的正确方法吗?
编辑:我的错误在下面
Test.rb:3:in `send_request': undefined method `visit ' for
company::Request:Module (NoMethodError)编辑在这里定义了我的更改&它运行得很好调用模块方法时面临的问题(具有类的对象,包含在另一个ruby文件中)
发布于 2015-11-04 21:13:03
我假设您使用的是托管在这个存储库中的gem:https://github.com/flood-io/ruby-jmeter,最新版本(2.13.8)。
纵观源代码和示例,有几件事需要考虑。
这是一个对象方法,用于RubyJmeter::ExtendedDSL类的对象。您正在使用模块方法,并且可能应该考虑创建一个对象并对其调用该方法。
obj = RubyJmeter::ExtendedDSL.new
obj.visit '192.148.1.2' # 'visit' is a method alias for 'get'从你发布的文章中还不清楚你为什么要使用模块。通常,在模块或类中使用“include”,将gem的方法混合到您的命名空间中。但是,由于您正在尝试使用模块方法,我不确定将对象方法混入其中是否会取得丰硕的成果。
就我个人而言,我会尝试遵循RubyJmeter开发人员所展示的模式;作为第二种方法,我会编写一个继承RubyJemeter子类的类,并扩展它的行为以适应它的需要。我的测试代码将初始化一个对象并直接调用它的方法。(你的里程可能不同。)
更新为add:,如果您希望模块方法代替前面提到的对象方法,只需在方法中调用后者:
def self.send_request()
RubyJmeter::ExtendedDSL.new.visit '192.148.1.2'
end这样做本质上创建了一个可支配对象,该对象在: after方法返回其数据后被销毁。
始终将类名和模块名大写。这是一个Ruby最佳实践,您的模块名“公司”将向解释器发出警告。
https://stackoverflow.com/questions/33530368
复制相似问题