有没有一种很好的方法将Cucumber / Watir / Ruby测试结果写入数据库?

时间:2016-09-01 19:26:09

标签: ruby testing cucumber pageobjects page-object-gem

我正在使用带有PageObjects的Cucumber / Watir / Ruby堆栈。 我想将所有测试结果存储在数据库中,而不是像Pretyface gem那样制作prety报告。 有没有人这样做过?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以定义在每个方案写入数据库后执行的hook。我曾使用sequel gem进行数据库连接,但也有很多其他人。

After do |scenario|
 begin
   //Get values for the scenario
   scenario.name 
   scenario.failed?
 //  <database code to add values>
 end
end

答案 1 :(得分:0)

因此有两种尝试方法。 1是编写自己的格式化程序。我还没有尝试过,但这将是我的下一个项目。 第二种方法是在After Hook部分中破解您关注的场景对象中的所有字段。 我已经为Pre-2.0版黄瓜做了这个。当我查看Post-2.0时,该对象似乎没有公开我想要的所有数据,我认为这是Pretyface gem尚未更新到1.9.3左右的原因的部分原因。 下面的代码根本不是很漂亮,但确实有效。只需从After Hooks方法中调用它

def read_and_export_scenario_results(scenario)
    set1 = scenario.instance_variable_get(:@current_visitor)

    feature_loc = scenario.feature.location
    feature_name = scenario.feature.title
    feature_desc = scenario.feature.description
    scenario_name = scenario.title
    profile = set1.configuration.options.send(:profiles)[0]
    #get data from Listeners

    results_loc = set1.configuration.options.send(:expanded_args)[set1.configuration.options.send(:expanded_args).size-1]
    run = results_loc.split('/')[2]

    steps = Array.new(set1.runtime.results.steps.count)
    i=0
    set1.runtime.results.steps.each do |step|
      step_hash = Hash.new
      step_hash['StepName'] = step.name
      step_hash['ReportedException'] = step.reported_exception
      step_hash['Status'] = step.status
      step_hash['Message'] = step.multiline_arg
      steps[i] = step_hash
      i += 1
    end

  if scenario.failed?
    pic_dir = 'screenshots'
    pic_name = "ERR_#{run}_#{@current_page.class}_#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}.png"
    pic_src = "#{pic_dir}\\#{pic_name}"

    unless File.directory?(pic_dir)
      Dir.mkdir(pic_dir)
    end

    @current_page.save_screenshot(pic_src)
    embed(pic_src, 'image/png')
  else
    pic_src = ''
  end
  sql_object = Sql.new
  sql_load_scenario = "AddScenario '#{feature_loc}', '#{feature_name}', '#{feature_desc}', '#{scenario_name}', '#{profile}', '#{run}', '#{pic_src}', '#{results_loc}', '#{FigNewton.application}', '#{FigNewton.base_location}'"
  feature_ID = sql_object.execute_query(sql_load_scenario).to_a[0]
  steps.each do |step|
    sql_load_steps = "AddScenarioStep #{feature_ID}, '#{step['StepName']}', '#{step['Status']}', '#{step['ReportedException']}', '#{step['Message']}'"
    sql_object.execute_query(sql_load_steps)
end