0

我是 ruby​​ 的新手,正在使用“ruby-jmeter”gem(由 flood.io 提供)制作性能自动化框架

我制作了以下文件结构,其中 payload.rb 和 request.rb 包含我常用的实用方法。我从 test.rb 调用的(test.rb 将由 QA ppl 编写)

性能自动化框架结构

request.rb (位于“common”文件夹下)

require 'ruby-jmeter' #(Consider any 3rd party gem )
require 'rubygems'

 module RubyJmeter
   class ExtendedDSL < DSL     #'ruby-jmeter' class extending
      def get_common_headers()   
         commonHeaderHashMap = {
        'tns' => 'urn:',
        'Content-Type' => 'text/xml; charset=utf-8',
        'Accept-Language' => 'en-US,en;q=0.5',
        'Accept-Encoding' => 'gzip, deflate'
      }
    return commonHeaderHashMap
    end
   end
 end

 class Request
  def initialize(dsl)
  @dsl = dsl
  end

   def soap_post_web_request(name,rawBody)
      endPoint = '/SoapEndPoint'

      post name: name, url: endPoint , raw_body: rawBody do
      tempHeaderHashMap = get_common_headers.merge( {'SOAPAction' =>    
                                'urn:'+name} )
      finalHeaderArray = []

      tempHeaderHashMap.each {|key, value|
      localHashMap = Hash.new
      localHashMap = {:name => key, :value => value}
      finalHeaderArray << localHashMap
    }

   header finalHeaderArray

    end # End of soapCall
  end  #end of soap_post_web_request

  # Passes method calls through to the underlying DSL (ruby-jmeter).
 def method_missing method, *args, &block
    @dsl.__send__ method, *args, &block
  end

end

wrappingclasses_under_single_module.rb(位于“common”文件夹下)

  require 'rubygems'
  require 'ruby-jmeter'
  require 'require_all'

 require_all './'

 module PerformanceAutomation
    def self.MyRequest 
       Request.new(self) 
    end
 end

test.rb (位于“testflow->simpleflow”文件夹下)

require 'ruby-jmeter' #(Consider any 3rd party gem )
require 'rubygems'
require 'require_all'  #(another 3rd party gem)

require_all '../../common/' 

include PerformanceAutomation
test name:'JiraAnalyticsPerformanceFlow' do
   threads name: 'NoOfUsers',scheduler: false,continue_forever: false,                
       count: 1 do
                PerformanceAutomation.MyRequest.soap_post_web_request('soapRequestmethodName',rawdata)# End of Soap request 'soapRequestmethodName'

 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")

运行 test.rb 时,出现以下错误

 `<top (required)>': uninitialized constant PerformanceAutomation (NameError)

编辑 (现在工作正常)通过使用更新了常用实用程序文件

请求.rb

module RubyJmeter
class ExtendedDSL < DSL
    def get_admin_common_headers()
      commonHeaderHashMap = {
        'X-XSRF-TOKEN' => '${COOKIE_XSRF-TOKEN}',
        'Content-Type' => 'text/xml; charset=utf-8',
        'Accept-Language' => 'en-US,en;q=0.5',
        'Accept-Encoding' => 'gzip, deflate'
      }
      return commonHeaderHashMap
    end
  end
end

module API
  class AdminWebService
    def initialize(dsl)
      @dsl = dsl
    end

    ## Admin request for 'get_space_properties'
    def get_space_properties(rawBody)
      endPoint = "/AdminService.asmx"
      post name: "admin_GetSpaceProperties", url: endPoint ,     
            raw_body:rawBody do
    tempHeaderHashMap = get_admin_common_headers.merge( {'SOAPAction' =>  
    'http://example.com/GetSpaceProperties'} )
    finalHeaderArray = []

    tempHeaderHashMap.each {|key, value|
      localHashMap = Hash.new
      localHashMap = {:name => key, :value => value}
      finalHeaderArray << localHashMap
    }

    header finalHeaderArray

  end # End get_space_properties
end

测试.rb

require 'rubygems'
require 'ruby-jmeter'
require 'require_all'

require_all '../../../common/'

  defaults domain: 'example.com', protocol: 'http', connect_timeout:   
                   '2000', response_timeout: '3000'
  cookies policy: 'compatibility', clear_each_iteration: true   
                   #'cookies' is method defined under 'ruby-jmeter'
  cache clear_each_iteration: true    # 'cache' is method defined under 
     'ruby-jmeter'

# starting testPlan 'JiraAnalyticsPerformanceFlow'
test name:"testFlowName" do
    adminwebservice = API::AdminWebService.new(self)  
adminwebservice.get_space_properties(Payload.get_local_payload("get_space_properties.xml")) 
       #Payload is another common utility class for fetching payload     stuff
 end
 puts "JMX FILE IS GONNA SAVED @       
        "+Dir.pwd+"/CreatedJMeter_DB2Navigation.jmx"
end.jmx(file: Dir.pwd+"/CreatedJMeter_DB2Navigation.jmx")
4

0 回答 0