使用代码运行runserver命令

时间:2015-09-15 12:15:35

标签: python django python-3.x testing

我想用manage.py runserver命令启动一个服务器,我现在尝试了一段时间,但是找不到正确的方法。

from subprocess import Popen, PIPE
from django.test import TestCase
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class ExampleClass(TestCase):

  def startServer(self):
    process = Popen(['cd C:\mypath'], stdin=PIPE, stdout=PIPE)
    process.stdin.write(['python', 'manage.py runserver'])

.
.
.
  def test_examplename(self):
    self.browser.get('http://localhost:8000')

每次我开始测试时,似乎进程都是在后台启动,但是一旦弹出浏览器窗口,它就会显示“无法连接”错误。 所以服务器没有运行。

请注意,当我自己启动服务器时,测试工作正常。

2 个答案:

答案 0 :(得分:1)

这件事

process = Popen(['cd C:\mypath'], stdin=PIPE, stdout=PIPE)
process.stdin.write(['python', 'manage.py runserver'])
由于您在Popen中运行shell命令,

将无法正常工作。 当你做一个Popen时,它会尝试运行用给定参数指定的程序。 你尝试运行cd但是在它完成后(它可能因为你在调用Popen时缺少shell = True而失败)进程被关闭,你不能写入它的stdin, Popen没有打开一个shell(或者Windows中的cmd实例)它只是运行一个程序

如果您想运行服务器,请直接执行:

process = Popen(['python, 'C:\mypath\manage.py', 'runserver'], stdin=PIPE, stdout=PIPE)

答案 1 :(得分:0)

我建议您使用LiveServerTestCase代替TestCase进行使用Selenium的测试。 Django将负责启动和停止服务器,因此您不必担心它。

有关使用Selenium的测试用例的更多信息和示例,请参阅the docs