0

我正在尝试为我的公司创建绩效自动化框架。Beinbg 新手到 ruby​​ 领域,我想保持简单。这是 性能框架的结构

我在“common”文件夹中有多个 ruby​​ 文件,如 request.rb、payload.rb 等(因为它们包含一些实用程序),然后在 test.rb 中进行测试(在“TestFlows->SimpleFlow->test.rb”之一下)。 rb) 。
有关更多详细信息,请参见上面的结构

我现在在这些文件下的确切代码是

请求.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
end

有效载荷.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
end

等等文件

测试.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

当我运行这个程序时,它转到上面,我得到了那些错误(第 3 方 ruby​​ gem 的函数未定义)。

谁能指出我关于上述结构的问题并建议我这样做的正确方法?

编辑:我得到以下错误

     Test.rb:3:in `send_request': undefined method `visit ' for 
     company::Request:Module (NoMethodError)

编辑 在这里定义了我的更改并且工作正常 在调用模块方法时遇到问题(具有类对象,包含在另一个 ruby​​ 文件中)

4

1 回答 1

0

我假设您使用的是托管在此存储库中的 gem:https ://github.com/flood-io/ruby-jmeter ,最新版本 (2.13.8)。

查看源代码和示例,有几件事需要考虑。

  1. 'visit' 方法是此处定义 的称为 'get' 的方法的别名。

这是一个对象方法,用于 RubyJmeter::ExtendedDSL 类的对象。您正在使用模块方法,并且可能应该考虑创建一个对象并在其上调用该方法。

obj = RubyJmeter::ExtendedDSL.new
obj.visit '192.148.1.2' # 'visit' is a method alias for 'get'
  1. 但是,gem 开发人员列出的示例遵循不同的模式,从闭包(do..end 代码块,在 Ruby 中简称为“块”)中调用“访问”。您可以重写代码以构建测试计划并以这种方式运行它们。

从您发布的内容中不清楚您使用模块的原因。通常,您在模块或类中使用“包含”将 gem 的方法混合到您的命名空间中。但是由于您尝试使用模块方法,我不确定混合对象方法是否会取得成果。

  1. 由于我看不到您的 Test.rb 文件是如何运行的,因此我不能确定您的测试代码正在加载您自己的模块。通常会使用“加载”或“包含”语句来加载您在 request.rb 和 payload.rb 中编写的代码

就个人而言,我会尝试遵循 RubyJmeter 开发人员展示的模式;作为第二种方法,我将编写一个继承自 RubyJemeter 子类的类,并扩展其行为以适应。我的测试代码会初始化一个对象并直接调用它的方法。(你的旅费可能会改变。)

更新添加:如果您希望您的模块方法代替提到的对象方法,您可以简单地在您的方法中调用后者:

def self.send_request()
  RubyJmeter::ExtendedDSL.new.visit '192.148.1.2'
end

这样做实质上创建了一个一次性对象,该对象在 :visit 方法返回其数据后被销毁。

PS 始终将您的类和模块名称大写。这是Ruby 的最佳实践,您的模块名称“公司”将引发解释器的警告。

于 2015-11-04T21:13:03.537 回答