LoginSignup
1
1

More than 1 year has passed since last update.

gauge run で`Error Message: Runner is not Alive`となりStacktraceに何も出力されない場合

Posted at

現象

gaugeで以下のようなエラーが出ることがあった。
困ったことにStacktraceに何も出力されないので意味がわからない。

(venv) gauge-tests-py > gauge run
Python: 3.7.6

  Error Message: error reading from server: read tcp 127.0.0.1:56868->127.0.0.1:56867: wsarecv: An existing connection was forcibly closed by the remote host.
  Stacktrace: 


  Error Message: Runner is not Alive
  Stacktrace: 

Successfully generated html-report to = ...(以下省略)

解決方法

今回は、テストコードを記述したstep_impl.pyの読み込み時にインポートエラーが出ていたのが原因だった。
step_impl.pyファイルの冒頭などでimport hogeなどとしているが、タイポなどでこれが失敗すると、上記のようなStacktraceなしのエラーになってしまう。

エラーがあったら原因箇所を特定しやすいように、以下のようにimport時例外を出力するようにした。

# gauge run からのインポートエラー時、何もでなくて困るので、try-except
try:
    from getgauge.python import step, before_scenario, Messages
    import sys
    import os
    import traceback
    import hoge
except Exception as e:
    print(traceback.format_exc())
    raise e

# --------------------------
# Gauge step implementations
# --------------------------
@step("何かする")
def do_something():
    hoge.do_something()

...

これは本件とは直接関係ないが、gaugeは、実行時にstep_implvenv等のpython環境内のパッケージしか見てくれないようで、テストコード内から、別ディレクトリにあるテストコード以外のソースを参照したい場合、sys.pathに参照先ディレクトリを追加しておく必要がある。

たとえば、ディレクトリ構造が以下のようなとき...

hoge_src/
  hoge/
    __init__.py
gauge_tests/
  step_impl
    step_impl.py

gauge_tests/をワークディレクトリとしてgauge runする前提で、step_impl.pyから正しくimport hogeするには、以下のようにする必要がある。

# gauge run からのインポートエラー時、何もでなくて困るので、try-except
try:
    from getgauge.python import step, before_scenario, Messages
    import sys
    import os
    import traceback
    # gaugeは、分散したコードまで見てくれないのでソースパスを追加
    sys.path.append(os.path.join('..', 'hoge_src'))
    import hoge
except Exception as e:
    print(traceback.format_exc())
    raise e

# --------------------------
# Gauge step implementations
# --------------------------
@step("何かする")
def do_something():
    hoge.do_something()

...
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1