9

私は自分の小さな 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

すべて正常に動作します。

私が開発したい次の機能はファイルにあります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

テストを実行すると、behavior は機能ファイルをアルファベット順に実行するため、project_management.feature最初に実行されます。

givenユーザーがまだ作成されていないため、最初の でエラーが発生します。

最初のファイルのレナミンをテストし01_user_management.featureて動作させました。

より良い解決策を知っていますか?

機能ファイルの順序を指定できる構成ファイルはありますか?

それとも、シナリオには別のシナリオを最初に実行する必要があると言えますか?

4

4 に答える 4

5

シナリオを相互に依存させるべきではありません。これを行うことは絶対に可能です。何百ものシナリオを含む大規模で複雑なテスト スイートが複数あります。私のシナリオは、その前に実行された別のシナリオに依存していません。

大規模なスイートがあり、単一のシナリオが失敗する場合、次のことができると非常に便利です。

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 ...です。) このステップでは、ユーザーをログインさせるだけです。ユーザーを作成する必要はありません。

これを行うことの副次的な利点の 1 つは、Sauce Labs や BrowserStack などのテスト サービスでスイートを実行し、Selenium を使用すると、多くのテスト時間を節約するGiven I am logged in as ...ステップを実装できることです。このような場合、Selenium コマンドごとに、Behave テストとテスト サービスで実行されているブラウザーとの間のラウンドトリップが必要になり、インターネットを通過するのにかなりの時間がかかる可能性があります。このようなやり取りの数を減らすと、スイート全体の実行にかかる時間に大きな違いが生じる可能性があります。

于 2017-01-05T11:55:18.490 に答える
2

これには2つの方法があるようです。1 つは、バックグラウンドを使用して複数のシナリオの状態をセットアップできることです。もう 1 つは、他のステップから前のステップを呼び出すことです。最初の解決策は次のようになります。

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
于 2014-08-21T21:04:07.633 に答える