1

サブコマンドと複数のオプションを使用してコマンド ライン ツールのテストを自動化するための洗練されたソリューションを探しています。これまでのところ、私が見つけることができる最も近いものは、Mercurial のテスト インフラストラクチャです。

run_tests.py スクリプトは、シェル スクリプト テスト、Python テストを統一された方法で実行できます。テストの検証は、主にコマンドの出力を定義済みのものと比較し、コマンドの終了ステータスを確認するためのものです。

ただし、me​​rcurial で run_tests.py のソースを確認したところ、年月の進化で複雑になりすぎており、Mercurial は Python 2.4-2.7 用に設計されているため、2.5 以降の新機能は使用されておらず、コードが少し古くなっています。 、実際のすべてのコマンド実行は、自家製のPopen4にラップされます。

processlock = threading.Lock()

closefds = os.name == 'posix'
def open4(cmd, wd, timeout):
    processlock.acquire()
    p = subprocess.Popen(cmd, shell=True, bufsize=-1, cwd=wd,
                         close_fds=closefds,
                         stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)
    processlock.release()

    p.fromchild = p.stdout
    p.tochild = p.stdin
    p.childerr = p.stderr

    p.timeout = False
    if timeout:
        def t():
            start = time.time()
            while time.time() - start < timeout and p.returncode is None:
                time.sleep(.1)
            p.timeout = True
            if p.returncode is None:
                terminate(p)
        threading.Thread(target=t).start()

return p

現在、新しいバージョンでは fromchild や tochild のような属性さえありません。最新の python と同等のものは何ですか?

単純化された独自のバージョンの run_tests.py を最新の python でロールバックすることもできますが、その前に、車輪の再発明を避けるためのより良い既存のソリューションがあるかどうかを知りたいと思います。

私が必要とするのは:

  1. 一連のシェル コマンドを個別に実行するための隔離された環境
  2. コマンド出力と終了ステータスをチェックする機能
  3. 一部のテスト (副作用のあるコマンド) をさらに検証するために、いくつかのコールバックまたはフックを提供することをお勧めします。

共有できる経験やこれに関する提案があればお知らせください。

4

0 に答える 0