我在场景大纲中有一个大的示例表,大约有20列
Scenario Outline: ....
Given ....
When ...
Then ....
Examples:
|col1|col2|col3|col4|col5|........|col20|
|val1|val2|val3|val4|val5|........|val20|
是否可以将示例表拆分为更小的块,如此
Examples:
|col1|col2|col3|col4|col5|
|val1|val2|val3|val4|val5|
|col6|col7|col8|col9|col10|
|val6|val7|val8|val9|val10|
....upto 20
答案 0 :(得分:1)
一种方法是使用gherkin with qaf,它支持外部文件excle / csv / xml / json或数据库中提供的示例。在这种情况下,您的方案可能如下所示:
Scenario Outline: ....
Given ....
When ...
Then ....
Examples:{'datafile':'resources/testdata.xls'}
答案 1 :(得分:0)
示例表的每一行表示一个场景运行。如果分解行,那么每个scenariooutline运行中的某些值将没有值,并且您将有更多的运行然后实际需要。所以答案是否定的。
您可以尝试将所有数据或部分数据存储在Excel文件甚至数据库中。 excel或db将具有唯一的键列,该列需要匹配示例表中的行索引。
功能文件 -
Given Data is stored in file located at //project/module/data/bigscenario.xlsx and use index <DataRowIndex>
Given
When
Then
Examples:
| DataRowIndex |
| 1 |
| 2 |
| 3 |
| 5 | //Even skip index so 4 will not run
StepDefinition代码 -
private static boolean dataFlag = false;
private static Map<Integer, DataObject> data = new HashMap<>();
private int rowindex;
@Given("^Data is stored in file located at (.*?) and use index (.*?)")
public void getData(String path, int rowindex) {
if(!dataFlag) {
//Access data from excel using apache poi or db code, and store in map as dataobjects.
dataFlag = true; //Data access runs only for first scenario run.
}
this.rowindex = rowindex; //Key to get data for scenario from map
}
这有其优点和缺点。您正在从要素文件中分离数据。在场景中引入技术细节。逐步失去数据匹配和转换的功能。主要专业数据是可管理的。
答案 2 :(得分:0)
如果您想在单个场景中处理大量数据,您可以执行以下操作
编写一个将foo_data作为单个实体进行讨论的场景
Given ...
When I bar with foo_data
Then I should see no foo_data errors
编写单个调用步骤定义来处理所有数据
When "I bar with foo_data" do
bar_with_foo_data
end
在助手方法中编写所有文件处理数据等
def bar_with_foo_data
items = import file ...
items.each do |item|
bar_with item: item
...
end
你在这里做的是将你如何运行测试的细节分解为代码和黄瓜。