首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >想要关于ruby项目中“模块”使用的帮助(使用“ruby- gem”的第三方宝石)

想要关于ruby项目中“模块”使用的帮助(使用“ruby- gem”的第三方宝石)
EN

Stack Overflow用户
提问于 2015-11-04 19:26:46
回答 1查看 147关注 0票数 0

我正试图为我的公司创建性能自动化框架。贝因伯格新手到红宝石球场,我想保持简单。这是性能框架结构

我确实有多个ruby文件,如request.rb、payload.rb等在“公共”文件夹中(因为这些文件包含一些实用程序),然后在test.rb中进行测试(在“TestFlows->SimpleFlow->test.rb”下)。

有关更多细节,请参见上述结构。

准确的代码,我现在在这些文件下面有

request.rb

代码语言:javascript
复制
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

payload.rb

代码语言:javascript
复制
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

etc文件

Test.rb

代码语言:javascript
复制
   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

当我运行这个程序,它到上面,我得到了错误的那些(第三方红宝石的功能未定义)。

有人能指出我对上述结构的问题,并建议我做这件事的正确方法吗?

编辑:我的错误在下面

代码语言:javascript
复制
     Test.rb:3:in `send_request': undefined method `visit ' for 
     company::Request:Module (NoMethodError)

编辑在这里定义了我的更改&它运行得很好调用模块方法时面临的问题(具有类的对象,包含在另一个ruby文件中)

EN

回答 1

Stack Overflow用户

发布于 2015-11-04 21:13:03

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

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

  1. “访问”方法是名为“get”在此定义的方法的别名。

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

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

从你发布的文章中还不清楚你为什么要使用模块。通常,在模块或类中使用“include”,将gem的方法混合到您的命名空间中。但是,由于您正在尝试使用模块方法,我不确定将对象方法混入其中是否会取得丰硕的成果。

  1. 由于我无法看到您的Test.rb文件是如何运行的,所以我无法确定您的测试代码是否正在加载您自己的模块。通常,“load”或“include”语句将用于加载您在request.rb和payload.rb中编写的代码

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

更新为add:,如果您希望模块方法代替前面提到的对象方法,只需在方法中调用后者:

代码语言:javascript
复制
def self.send_request()
  RubyJmeter::ExtendedDSL.new.visit '192.148.1.2'
end

这样做本质上创建了一个可支配对象,该对象在: after方法返回其数据后被销毁。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33530368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档