2

我正在为 QA 工程师编写场景,现在遇到了步骤封装等问题。

这是我的场景:


  When I open connection    
  And device are ready to receive files
  I send to device file with params:
    | name | ololo |
    | type | txt   |
    | size | 123   |

每个步骤对人们来说都很重要,他们会使用我的步骤。我需要自动化这些步骤并重复 100 次。所以我决定创建一个新的步骤,运行 100 次。

  1. 第一个变体是创建带有其他步骤的步骤,例如:

  Then I open connection, check device are ready and send file with params 100 times:
    | name | ololo |
    | type | txt   |
    | size | 123   |

但是这个版本不合适,因为:

  • 会使用它的人,不会明白里面执行了哪些步骤
  • 有时像这样的步骤名称很长

    1. 第二个变体是使用参数表中的其他步骤创建步骤:

  I execute following steps 100 times:
    | When I open connection                |    
    | And device are ready to receive files | 
    | I send to device file                 | 

对于将使用我的步骤和场景的人来说,这将很容易理解。

但我也有一些带参数的步骤,

我需要创建类似两层表的东西:


  I execute following steps 100 times:
    | When I open connection                |    
    | And device are ready to receive files | 
    | I send to device file with params:    |
    |    | name | ololo |                   |
    |    | type | txt   |                   |
    |    | size | 123   |                   | 

在我的情况下,这是最好的变体。但由于黄瓜无法毫无错误地解析它(它作为黄瓜代码不正确)。

如何修复步骤的最后一个示例?(用粗体标记)

黄瓜有什么仪器,对我有帮助吗?

您能否提出一些建议您的解决方案类型?

有人有类似的问题吗?

4

1 回答 1

2

我决定更改符号“|” 参数表中的“/”,在里面。它并不完美,但它有效:

这是场景步骤:


 I execute following steps 100 times:
    | I open connection                     |    
    | device are ready to receive files     | 
    | I send to device file with params:    |
    |    / name / ololo /                   |
    |    / type / txt   /                   |
    |    / size / 123   /                   |

这是步骤定义:


And /^I execute following steps (.*) times:$/ do |number, table|

  data = table.raw.map{ |raw| raw.last }
  number.to_i.times do
    params    = []
    step_name = ''
    data.each_with_index do |line,index|
      next_is_not_param = data[index+1].nil? || ( data[index+1] && !data[index+1].include?('/') )
      if !line.include?('/')
        step_name = line
        #p step_name if next_is_not_param
        step step_name if next_is_not_param
      else
        params += [line.gsub('/','|')]
        if next_is_not_param
          step_table = Cucumber::Ast::Table.parse( params.join("\n"), nil, nil )
          #p step_name
          #p step_table
          step step_name, step_table
          params = []
        end
      end
    end
    #p '---------------------------------------------------------'
  end
end

于 2014-02-11T13:02:51.090 回答