如何开始我的Selenium测试所需的另一个过程

时间:2013-02-27 11:46:12

标签: python django selenium

我正在使用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

但是当我这样做时,webserver会在命令行中接管django测试过程的执行。我假设我应该这样做的方法是在一个单独的进程中启动命令提示符,然后在该进程中触发main.py -a命令。

这是正确的想法,如果是这样,我如何修改该功能以产生新进程并启动我的命令?我试图使用Process(target=path运行'cmd.exe',但我无法让它工作。谢谢:))

1 个答案:

答案 0 :(得分: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)

可能有一种更好的做事方式。这里的东西可能不是'应该是'但是它有效(带有套接字强制关闭错误):))

我唯一突出的问题是在创建数据库表之前测试启动:(