4

現在、テスト機能の次のディレクトリがあります。

Tests/
--BehaveTest1/
----BehaveTest1.feature
----steps/
------test_steps.py
--BehaveTest2/
----BehaveTest2.feature
----steps/
------test_steps.py

BehaveTest1 と BehaveTest2 のテスト ステップは共通であるため、必要なときに両方のテスト ケースで呼び出せる共通のモジュールを実装したいと考えています。現時点では、Tests/ フォルダー内に common/ ディレクトリを作成し、次のようにして (各テスト機能の test_steps.py ファイル内に) インポートしました。

import sys, os
sys.path.append('../common')
import common

しかし、私はパスを台無しにしたくないので、動作テスト機能の構造でこれを行うより良い方法があるかどうか疑問に思っていましたか?

4

4 に答える 4

9

をいじる必要はありsys.pathません。これは、使用している Python のバージョンに依存しません。これは、Python 2.7 または Python 3.x でも同様に機能します。

次のファイル構造があるとします。

Tests/
├── BehaveTest1
│   ├── BehaveTest1.feature
│   └── steps
│       └── test_steps.py
├── BehaveTest2
│   ├── BehaveTest2.feature
│   └── steps
│       └── test_steps.py
├── common.py
├── __init__.py

ディレクトリに が存在すること__init__.pyが重要です。Testsこれは空のファイルですが、これがないと、Python はモジュールをロードできTestsません。これは、パッケージと見なされないためです。

test_steps.py両方のディレクトリで次のようにすることができます:

import Tests.common

Tests/common.pyファイルには次のものが含まれます。

from behave import when, then

@when("foo")
def foo(context):
    pass

@then("bar")
def bar(context):
    pass

@when@thenBehave がサブディレクトリからロードするファイルに自動的に配置されますが、 でロードするsteps/他のモジュールからはロードされませんimport

次に、で定義された手順を呼び出す偽の機能ファイルを使用して実行できますcommon.py

$ behave Tests/BehaveTest*
Feature: BehaveTest1 # Tests/BehaveTest1/BehaveTest1.feature:1

  Scenario: foo  # Tests/BehaveTest1/BehaveTest1.feature:3
    When foo     # Tests/common.py:3 0.000s
    Then bar     # Tests/common.py:7 0.000s

Feature: BehaveTest2 # Tests/BehaveTest2/BehaveTest2.feature:1

  Scenario: foo  # Tests/BehaveTest2/BehaveTest2.feature:3
    When foo     # Tests/common.py:3 0.000s
    Then bar     # Tests/common.py:7 0.000s

2 features passed, 0 failed, 0 skipped
2 scenarios passed, 0 failed, 0 skipped
4 steps passed, 0 failed, 0 skipped, 0 undefined
Took 0m0.000s
于 2016-05-25T10:50:54.847 に答える
0

実際、あなたがやっている方法のような他の方法はありません:

ある場所からコードをインポートしたい。つまり、python にこの場所を認識させる必要があります。これは、PYTHONPATH または sys.path.append() を介して行われます。

Behave は (私が知る限り) feature-file がある "steps" ディレクトリでしかコードを見つけることができません。追加のコードがある場合は、sys.path を設定する必要があります。

Python > 3.3 では、「名前空間」パッケージ ( pep420 ) を呼び出すことができるため、少し簡単になります。

 :$ behave Tests/BehaveTest1/BehaveTest1.feature

Tests ディレクトリの親フォルダー内。それからあなたはしなければならないでしょう

import Tests.common

ステップファイル内。

これは、Tests、BehaveTests1、および BehaveTests2 が Python パッケージになるためです。

于 2016-05-24T15:37:01.517 に答える
-3

これを行う最も柔軟な方法は、ステップフォルダー内にクラスのフォルダーを作成することでした。

features/test.feature
test_steps/
test_steps/classes
test_environment.py
于 2016-06-21T03:11:22.013 に答える