掌握Ruby DSL測(cè)試技巧
我們?cè)谶@里做了一個(gè)簡(jiǎn)單的代碼示例,是關(guān)于Ruby DSL測(cè)試的一個(gè)小的實(shí)驗(yàn)。希望通過對(duì)這段代碼的解讀,大家可以進(jìn)一步了解Ruby語言的含義。#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)方法介紹。