ruby读取各种数据源中的测试参数化数据

自动化测试时常用到的技术就是参数化,不支持参数化的测试框架是痛苦的。QTP自身本来就有,但是类似ruby的watir,以及selenium等都不是天然支持的,因为这些个框架只提供了最基础的自动化驱动类库,而驱动以外的执行管理、数据管理等又是一个课题。大部分的selenium和watir类似项目用的执行框架都是单元测试的框架,天然也不支持参数化。现在只有junit4版本支持参数化,以及testNG默认支持多种参数化。如果你开始项目的话可以优先考虑兼容这些类似框架的语言来做自动化。

watir虽然本身不支持参数化,ruby的单元测试也不支持,但是参数化也要做啊,没办法只能想想变通的法子。所以单独写了一个参数化的类,来补充一下参数化功能的不足。其工作方式是提供统一的测试数据源的数据读取,在单元测试中调用这个接口,但是不指定具体的参数行,这个参数行在单独的配置文件里配置。这个就可以统一的管理每次测试执行时所取用的参数行内容了。下面的代码是用来取用各种数据源里面的测试数据的。

#encoding: utf-8
require 'DBI'
require 'odbc_utf8'

def generate_sql(table, what=nil, where=nil)
  what="*" unless what
  where="1=1" unless where
  "select %s from %s where %s" % [what, table, where]
end

def generate_hash(header, all_data)
  t_arr = []
  all_data.each do | row |
    t_hash = {}
    for i in 0..header.size-1 do
      t_hash[header[i]] = row[i]
    end
    t_arr << t_hash
  end
  t_arr
end

def select_hash_db(dsn,user,password,db,sql)
  begin
    dbh = DBI.connect(dsn, user, password)
    dbh.do("use #{db}")
    dbh.do("SET NAMES UTF8") if dsn.split(':')[1] == "Mysql"
    sth = dbh.execute(sql)
    arr = Array.new
    sth.fetch_hash do | row |
      arr << row
    end
    sth.finish
    arr
  rescue DBI::DatabaseError => e
    puts "An error occurred"
    puts "Error code: #{e.err}"
    puts "Error message: #{e.errstr}"
  ensure
    dbh.disconnect if dbh
  end
end

class Text_Adapter

  def initialize(file_path, sep=" ", col_num=nil, row_num=nil)

  end

  def get_pars(row=nil)

  end

end

class Mysql_Adapter
  def initialize(ds_connector, table_name, what=nil, where=nil)
    @sql_str = generate_sql(table_name, what, where)
    @ds_connector = ds_connector
  end

  def get_pars(row=nil)
    dsc_arr = @ds_connector.split("#")
    all_data = select_hash_db(dsc_arr[0],dsc_arr[1],dsc_arr[2],dsc_arr[3],@sql_str)
    if row.class==Fixnum
      all_data[row]
    else
      all_data
    end
  end
end

class Excel_Adapter

  def initialize(ds_connector, table_name, what=nil, where=nil)
    @connection = WIN32OLE.new('ADODB.Connection')
    @record_set = WIN32OLE.new('ADODB.Recordset')
    @ds_connector = ds_connector
    @sql_str = generate_sql(table_name, what, where)
  end

  def get_pars(row=nil)
    t_arr = []
    @connection.Open(@ds_connector)
    @record_set.Open(@sql_str, @connection)
    @record_set.Fields.count.times do | i |
      t_arr << @record_set.Fields.Item(i).name
    end
    all_data = @record_set.GetRows.transpose
    all_data = generate_hash(t_arr, all_data)
    if row.class==Fixnum
      all_data[row]
    else
      all_data
    end
  end
end


class Parameter
  def initialize(ds_connector, table_name, what=nil, where=nil)
    dsc_arr = ds_connector.split("#", 2)
    eval("@adp = #{dsc_arr[0]}.new dsc_arr[1], table_name, what, where")
  end

  def get_pars(row=nil)
    @adp.get_pars(row)
  end
end

调用方法:

par = Parameter.new(Ds_mysql_connector, 'demo')
p par.get_pars(0)

配置文件配置:

##链接excel中数据库的串
EXCEL_DSN = %{Excel_Adapter#Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties=Excel 5.0;}
EXCEL_FILE = %{D:\\1.xlsx}
##链接mysql的串
Ds_mysql_connector = %{Mysql_Adapter#DBI:Mysql:shoppingcart:127.0.0.1#root#password#shoppingcart}
##指定当次运行侧事故参数的行号,从0开始
PAR_ROW = 1

相应的文件指向路径、ip地址、数据库名、用户名、密码等需要修改

### 回答1: 您好!在 Logstash 使用 Ruby 代码访问 Redis 数据库并实现持久化功能,您可以这样写: ``` filter { ruby { code => " require 'redis' redis = Redis.new # 将数据存入 Redis event.set('my_field', 'my_value') redis.set('my_key', event.get('my_field')) # 从 Redis 读取数据 value = redis.get('my_key') event.set('my_field_from_redis', value) " } } ``` 希望这些代码对您有所帮助! ### 回答2: 要使用Logstash、Ruby和Redis进行持久化的代码写法,可以按照以下步骤进行: 首先,确保已经安装好Logstash、Ruby和Redis的相关组件和依赖。 1. 导入所需的Ruby库文件: ``` require 'redis' ``` 2. 创建Redis连接,并准备持久化数据: ``` redis = Redis.new(host: 'localhost', port: 6379) ``` 3. 在Logstash的配置文件使用Ruby filter插件来处理数据并进行持久化。例如: ``` input { # 设置Logstash输入源,如kafka、file等 } filter { ruby { code => " # 在这里添加数据处理逻辑 # 在处理过程,将数据存储到Redis redis.rpush('mylist', event.get('field_name')) " } } output { # 设置Logstash输出目标,如Elasticsearch、stdout等 } ``` 在Ruby filter的代码块,可以根据需要进行数据处理,并通过redis.rpush方法将数据存储到Redis的列表(示例使用的列表名为'mylist')。 4. 运行Logstash并加载配置文件: ``` logstash -f your_config_file.conf ``` 这样,当Logstash获取到输入数据后,Ruby filter插件将按照配置的数据处理逻辑来处理数据,并将处理后的数据存储到Redis。 需要注意的是,上述代码只是简单示例,实际应用可能需要根据具体需求进行适当的修改和扩展。 ### 回答3: 在使用Logstash的Ruby插件和Redis进行持久化时,可以通过以下步骤来编写代码: 1. 首先,确保已经安装并配置好了Logstash、Ruby和Redis环境。 2. 创建一个新的Logstash配置文件,例如`logstash.conf`,并在其定义输入、过滤和输出插件。 3. 在输出插件部分,选择Redis作为输出目标。添加以下配置代码: ``` output { redis { host => "localhost" # Redis服务器地址 data_type => "list" # 存储数据类型 key => "my_key" # 存储数据的键名 codec => "json" # 数据编码格式 } } ``` 根据自己的实际需求修改相应的参数值,确保正确与Redis建立连接。 4. 在Logstash的安装目录下创建一个新的Ruby脚本文件,例如`persist.rb`。 5. 在该脚本引入Redis和Logstash的Ruby库: ```ruby require 'redis' require 'logstash/config/mixin' class Persist include LogStash::Config::Mixin def initialize config_init('logstash.conf') @redis = Redis.new(host: 'localhost') end end persist = Persist.new ``` 6. 在脚本的`initialize`方法,首先调用`config_init`方法来读取`logstash.conf`配置文件,以便获取Redis服务器地址等信息。然后,创建一个Redis实例。 7. 可以添加一些自定义的方法来执行持久化操作。例如,可以使用Logstash的`filter_matched`方法来获得经过过滤的事件数据,并使用Redis的`rpush`方法将数据存储到指定的键名: ```ruby def persist_event(event) filter_matched(event) @redis.rpush('my_key', event.to_json) end ``` 按照自己的需求修改键名和数据格式,确保正确存储到Redis。 8. 最后,在Logstash的配置文件使用Ruby插件的执行器来调用上述的持久化方法。在`output`插件添加以下代码: ``` ruby { code => 'persist.persist_event(event)' } ``` 这样,当有新的事件数据经过过滤后,会自动调用`persist_event`方法将数据持久化到Redis。 以上是一个简单的示例,根据实际需求可以进行更多的定制和优化。在实际应用,还需要注意异常处理和数据处理的效率等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上帝De助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值