【工作经历:阿里巴巴搜索技术研发中心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:

 

评分:0

我来说两句

Open Toolbar