1

Behat 3の stackoverflowパラメーターに関する質問の後、 Ian は behat パラメーターへのパスの解決策を見つけました。

環境については問題ありませんが、国のパラメーターについては少し混乱しています。私はこのような機能を持っています:

Scenario Outline: Test if first link works
    Given I am on website "<country>"
    Then I visit the url "my-url"
    Then I click on first link

Examples:
    | country |
    | US      |
    | IT      |

これは私が持っているものであり、今は次のようなものを実行したい:

env="stg" country="US,IT" php53 bin/behat --suite=mySuite

しかし、シナリオのアウトラインがあれば、シナリオ全体が各国ごとに実行されます。同じことをしたいのですが、パラメーターで渡された国のリストを使用します。

たぶん、フック AfterScenario などを使用して、別の構成でシナリオ全体を再度実行できますか?

ありがとう !

4

1 に答える 1

1

残念ながら、これは標準的なツールでは不可能です。少なくとも頭痛の種であり、一からやり直す必要があります。しかし、興味深い質問です!

でスイートを構成することで、これが機能する場合がありますbehat.yml。基本構成のデフォルト スイートと、各言語のスイートが必要です。

default:
    extensions:
        Behat\MinkExtension

    suites:
        default:
            paths: […]
            contexts: […]

        US:
            paths: […]
            contexts: […]

        IT:
            paths: […]
            contexts: […]

そして@beforeSuiteフックを使用します:

/**
 * @beforeSuite
 *
 * @param BeforeSuiteScope $scope
 */
public static function setUpSuite(BeforeSuiteScope $scope)
{
    $suiteName = $scope->getSpecificationIterator()->getSuite()->getName();

    // If the suite denotes one of the languages, then set it as the main language.
}

このソリューションにはいくつかの短所があります。

  1. スイートは、言語以外には使用できません。
  2. 構成の重複が多い。
  3. フックから言語を設定するのは面倒です。サーバーが使用する言語を認識できるように、おそらく静的プロパティとして保存し、各 Mink リクエストが送信される前にそれをヘッダーに渡す必要があります。そのためには別のフックが必要です。とにかく、これは別の苦痛の話です。

頭に浮かぶ別の解決策は、国パラメーターで Behat を順次実行する別の PHP / Bash スクリプトを使用することです。また、いくつかの短所もあります。

  1. 毎回異なる Behat パラメーターを使用する場合は、おそらくそれらを渡すためのロジックを追加する必要があります。
  2. 各サブタスクの実行時に Behat の結果を正しく表示できない場合があります。
  3. 何らかの方法でその言語をアプリに渡す必要がありますが、上記の提案は機能するはずです。

ご覧のとおり、これは簡単な作業ではありません。個人的には、2 番目のソリューションの方が信頼性が高く、よりタイムリーである可能性がありますが、多くのカスタマイズの余地も与えられます。一方で、国ごとに全く異なる内容・ロジックを持たない限り、そこまで極端に突っ込む必要はないかもしれません。言語が変更可能であること、および言語が期待どおりに変更されることを対象としたいくつかのチェックを行うだけで十分です。40 か国で同じテストを再実行しても何時間もかかり、大きな価値はありません。

于 2014-10-10T14:13:03.230 に答える