我的 SpecFlow 自动化脚本对 Web 应用程序执行测试。将启动Web浏览器并输入用户名和密码进行登录,然后继续测试。
在我的钩子课上, [Before feature] 挂钩并获取所需的用户名和密码。我们将用户名命名为 userA。
[Before Scenario] 挂钩启动了浏览器。
后台关键字步骤使用网络浏览器中的用户名和密码进行登录。
但是,对于 1 个场景,用户名必须是不同的用户(userB),但由于 [Before feature] 挂钩正在调用 userA,我无法使用 userB 登录。
是否有办法让钩子仅针对该 1 个测试场景调用 userB?或者还有其他方法可以做到这一点吗?
这就是为什么我通常喜欢在场景中包含用户登录步骤:
Scenario: ...
Given ...
And ...
And ...
And ...
And user "XYZ" has logged in
When ...
Then ...
这是每个场景一根小黄瓜的成本。如果您不想在每个场景中对用户名进行硬编码,请考虑使用“登录”步骤来重点关注用户在该场景中扮演的角色。步骤定义可以处理登录所需的用户名和密码。
例如,您正在测试一个博客 Web 应用程序。您有两个用户,一个撰写博客文章,另一个对博客文章发表评论。而不是:
Given user "xxx" has logged in
表述重点关注用户在系统中扮演的角色的步骤。比如:
Given a blog post author has logged in
Given a blog post commentator has logged in
这使得场景更加明确,而且还为您提供了一个在步骤定义中放置用户名和密码的位置。如果这些角色之一需要更改用户名或密码,您可以更新步骤定义,而不是天知道有多少场景,谁知道有多少功能文件。