我正在尝试为我正在工作的遗留网站创建一组新的测试。该网站在后端使用数据库。我打算使用SpecFlow和Selenium,但我还不确定如何最好地处理数据清理。
目前,我有一个带有样本数据集的数据库备份,每次测试运行之前都会还原该备份。然而,这很麻烦,因此我想只对发布前的关键测试运行执行此操作,并在其中间保留连续集成运行使用相同的数据库。
目前,我有大量类似于以下内容的测试:
Secenario: Test Item Creation
Given I am logged in
When I create an item with a unique name
Then an item exists with the unique name
“when” 步骤使用 GUID 来确保名称是唯一的,然后步骤通过模块变量访问它以检查其是否存在。
就像我之前说的那样,我有很多类似这样的测试,并且在同一个数据库上多次运行它们,因此测试系统会充斥着这些项目,从而减慢搜索等操作的速度。
我的问题是应该如何处理这种情况?我是否应该创建另一个测试步骤来删除这个项目:
Secenario: Test Item Creation
Given I am logged in
When I create an item with a unique name
Then an item exists with the unique name
Then delete the item with the unique name
或者我的测试框架应该如何处理这个问题?如果是这样,人们会怎么做?考虑到SpecFlow步骤的全局性质,如果有多个具有父子关系的项目,则想要按正确顺序获取拆卸步骤可能会变得棘手。
ScenarioContext.Current
(在Specflow 2.0中无法用于并行测试),但我觉得这基本上是正确的方法。 - Sam HolderScenarioContext.Current
是什么,但我认为这不是在Specflow中在步骤之间共享状态的最佳方式。基本上有3种方法,使用特定状态的显式类而不是使用通用的ScenarioContext
要好得多。在给定的示例中,我可能会创建一个ItemContext
类,并将其属性Name
设置为Guid。然后,您可以以类型安全的方式使用此类,而不是依赖于基于字符串(和强制转换)的ScenarioContext.Current
方法。 - Sam Holder