我正在使用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',但我无法让它工作。谢谢:))
答案 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)
可能有一种更好的做事方式。这里的东西可能不是'应该是'但是它有效(带有套接字强制关闭错误):))
我唯一突出的问题是在创建数据库表之前测试启动:(