0

django-seleniumを使用して、Selenium テスト機能を既存の単体テストに追加しています。

私の Selenium テストは、私のマシンで実行されている Web サーバーに依存しており、django アプリをこのように実行するとトリガーされます。main.py -a

したがって、Selenium テストで最初にやりたいことは、このようにセットアップしたこのサーバーを起動することです。

def start_server():
    path = os.path.join(os.getcwd(), 'main.py -a')
    server_running = is_server_running()
    if server_running is False:
        server = subprocess.Popen('cmd.exe', stdin= subprocess.PIPE, stdout= subprocess.PIPE)
        stdout, stderr = server.communicate(input='%s\n' % path)
        print 'Server error:\n{0}\n'.format(stderr)
    server_running = is_server_running()

    return server_running

ただし、これを行うと、Webサーバーがコマンドラインでdjangoテストプロセスの実行を引き継ぎます。これを行うべき方法は、別のプロセスでコマンドプロンプトを起動し、main.py -aそのプロセスでコマンドをトリガーすることだと思います。

これは正しい考えですか?もしそうなら、その関数を変更して新しいプロセスを生成し、コマンドを起動するにはどうすればよいですか? を使用して「cmd.exe」を実行しようとしましたが、動作させるProcess(target=pathことができませんでした。ありがとう :)

4

1 に答える 1

0

私がこれを行った方法は、はるかに単純な起動方法です。

startServer.py

def run():
    path = os.path.join(os.getcwd(), 'main.py')
    server_running = is_server_running()
    if server_running is False:
        subprocess.Popen(['python', path, '-a'])

if __name__ == '__main__':
    run()

その後、テストのセットアップと分解で開始および停止できます。

def setUp(self):
    self.server = Process(target= startServer.run)
    self.server.start()

def test(self):
    # run test process

def tearDown(self):
    utils.closeBrowser(self.ff)

物事を行うためのより良い方法があるかもしれません&ここで何かが「あるべきである」ではないかもしれませんが、それは機能します(ソケットを強制的に閉じたエラーで):)

私の唯一の未解決の問題は、データベーステーブルが作成される前にテストを開始することです:(

于 2013-03-01T10:05:11.170 に答える