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

但是,当我这样做时,网络服务器会在命令行中接管 django 测试过程的执行。我认为我应该这样做的方式是在单独的进程中启动命令提示符,然后main.py -a在该进程中触发命令。

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

4

1 回答 1

0

我采用的方法是使用更简单的启动方法;

启动服务器.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 回答