我正在使用表现来测试我的小Django应用程序。
我已经创建了包含此场景的文件user_management.feature
:
Scenario: register
Given I can access registration form
When I put "doctor" in "username" field
And I put "tardisBlue" in "password" field
And I put "doctor@tardis.com" in "email" field
And I press the "Register" button
Then the registration is successful
And I am logged in
Everythig工作正常。
我想要开发的下一个功能是文件project_management.feature
:
Scenario: create a project
Given I am logged in
When I go to the home page
And I click on "Create new Project" link
And I fill the fields
| field | text |
| name | Save Gallifrey |
And I click on "Save" button
And I go to the home page
Then I see the project name in the project list
现在,当我执行测试时,表现为按字母顺序执行要素文件,因此首先执行project_management.feature
。
它在第一个given
中引发错误,因为尚未创建用户。
我已经在01_user_management.feature
中测试了renamin第一个文件以使其正常工作。
您知道更好的解决方案吗?
是否有一些配置文件可以指定功能文件的顺序?
或者我可以告诉Scenario需要先运行另一个场景吗?
答案 0 :(得分:4)
您不应该让场景彼此依赖。绝对可以这样做。我有多个大型复杂的测试套件,有数百个场景。我没有任何情景取决于之前运行的另一种情况。
当你有一个大套件并且单个场景失败时,能够做到这一点非常有用:
behave -n 'failing scenario name'
这使得Behave只运行失败的场景。或者,@wip
标签可以做同样的事情。但是,如果您要测试的方案依赖于另一个方案,则Behave将不会自动知道它应该运行其他方案,因此您有a)知道依赖关系并且b)手动负责选择所有方案。真想运行取决于。
我在你的情况下做的事情(这是我过去所做的)是实施步骤Given I am logged in as ...
。我使用正则表达式实现它,以便我可以使用
Given I am logged in as an administrator
Given I am logged in as a regular user
Given I am logged in as a user with permissions to delete articles
我正在测试的应用程序的数据库预先加载了一些与上述情况相对应的测试用户。 (仍然有一个测试用于注册新用户但是独立来自预加载的用户。)Given I am logged in as ...
步骤只记录用户。它不需要创建用户。
这样做的一个好处是,如果您在Sauce Labs或BrowserStack等测试服务上运行套件并使用Selenium,您可以实施Given I am logged in as ...
步骤保存大量测试时间即可。在这种情况下,每个Selenium命令都需要在您的Behave测试和运行在测试服务上的浏览器之间往返,这可能需要花费大量时间通过Internet。减少此类交互的数量可能会导致运行整个套件所需的时间存在巨大的差异。
答案 1 :(得分:1)
似乎有两种方法可以做到这一点。一个是您可以使用Background为多个场景设置状态。另一个是call previous steps from other steps。第一个解决方案看起来像这样:
Feature: logins
Test login functionality
Background: login
Given I can access registration form
And I put "doctor" in "username" field
And I put "tardisBlue" in "password" field
And I put "doctor@tardis.com" in "email" field
And I press the "Register" button
Scenario: successful login
Then the registration is successful
And I am logged in
Scenario: create a project
When I go to the home page
And I click on "Create new Project" link
And I fill the fields
| field | text |
| name | Save Gallifrey |
And I click on "Save" button
And I go to the home page
Then I see the project name in the project list
答案 2 :(得分:1)
使用feature-listfiles,例如:
behave @my_foo.featureset …
使用:
# -- FILE: my_foo.featureset
features/alice.feature
features/bob.feature:10
答案 3 :(得分:1)
@Andrew Johnson和jenisys的答案提供了三种方法来指定步骤/场景/功能的顺序。在这里,我还要添加几个: