【工作经历:阿里巴巴搜索技术研发中心QA ,百度新产品测试部QA】
【领域:测试分析,自动化测试,性能测试,安全测试 】
【个人定位:高级测试工程师+培训师+领域产品专家】
使用ruby DSL构造测试领域专用语言尝试
上一篇 /
下一篇 2009-10-18 02:44:21
/ 个人分类:ruby
最近对DSL感兴趣,就使用ruby简单的做了一个试验。
是为了简化p4p后台
测试的操作。让TC编写起来更容易些。
做了一个小小的demo。如果成型的话,测试人员就可以这样写TC了。
这是一段检查百度搜索,然后验证的小demo。(实际测试当然不会这样子了)
host "www.baidu.com"
port 80
page "s"
field "wd","美女"
field "sourceid","Mozilla-search"
get
check_content "美女"
check_content "淫秽词"
把以上内容存到文件里,系统就可以自动运行了。
登陆baidu,查询“美女”,然后检查里面是否有“淫秽词”。
DSL定义代码如下
# 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
|
收藏
举报
TAG: