掌握Ruby DSL測(cè)試技巧
我們?cè)谶@里做了一個(gè)簡(jiǎn)單的代碼示例,是關(guān)于Ruby DSL測(cè)試的一個(gè)小的實(shí)驗(yàn)。希望通過(guò)對(duì)這段代碼的解讀,大家可以進(jìn)一步了解Ruby語(yǔ)言的含義。#t#
做了一個(gè)小小的demo。如果成型的話,測(cè)試人員就可以這樣寫TC了。
這是一段檢查百度搜索,然后驗(yàn)證的小demo。(實(shí)際測(cè)試當(dāng)然不會(huì)這樣子了)
host "www.baidu.com" 
port 80
page "s"
field "wd","足球"
field "sourceid","Mozilla-search"
get
check_content "足球"
check_content "體育"
把以上內(nèi)容存到文件里,系統(tǒng)就可以自動(dòng)運(yùn)行了。
登陸baidu,查詢“足球”,然后檢查里面是否有“體育”。
Ruby DSL測(cè)試定義代碼如下
- # To change this template,
 
choose Tools | Templates- # and open the template in the editor.
 - require 'open-uri'
 - class MyDSL
 - def self.dsl_accessor(*symbols)
 - symbols.each { |sym|
 - class_eval %{
 - def #{sym}(*val)
 - if val.empty?
 - @#{sym}
 - else
 - @#{sym} = val.size == 1 ? val[0] : val
 - end
 - end
 - }
 - }
 - end
 - def method_missing(sym, *args)
 - self.class.dsl_accessor sym
 - puts "method missing #{sym}, #{args}"
 - send(sym, *args)
 - end
 - attr_accessor :query
 - dsl_accessor :test
 - def self.load(filename)
 - dsl = new
 - dsl.instance_eval(File.read
 
(filename), filename)- puts File.read(filename)
 - dsl
 - end
 - def self.loads(filename)
 - dsl = new
 - dsl.instance_eval(filename)
 - dsl
 - end
 - def field(field_string,value)
 - puts "#{field_string}=#{value}"
 - if ! @query
 - @query="#{field_string}=#{value}"
 - else
 - @query="#{@query}&#{field_string
 
}=#{value}"- end
 - puts @query
 - end
 - def get
 - puts 'get'
 - @request="http://#{@host}:#
 
{@port}/#{@page}?#{@query}"- puts @request
 - @result=open(@request)
 - end
 - def check_content(s)
 - tmp=@result.read.scan(s).uniq
 - if tmp.length!=0
 - puts "found"
 - puts tmp
 - else
 - puts "not found"
 - end
 - end
 - def post
 - puts 'post'
 - end
 - end#class MyDSL
 - dsl=MyDSL.loads('
 - host "www.baidu.com"
 - port 80
 - page "s"
 - field "wd","xxxxxxx"
 - field "sourceid","Mozilla-search"
 - field "yy",0.222
 - parameter 0.55,2.1,[2,3,4],
 
{:a=>7,:b=>8,:c=>9}- get
 - check_content "xxx"
 - check_content "ffffffffffffff"
 - ')
 - p dsl
 - p dsl.instance_variables
 
以上這段代碼示例就是Ruby DSL測(cè)試的相關(guān)方法介紹。















 
 
 
 
 
 
 