我想用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')
每次我开始测试时,似乎进程都是在后台启动,但是一旦弹出浏览器窗口,它就会显示“无法连接”错误。 所以服务器没有运行。
请注意,当我自己启动服务器时,测试工作正常。
答案 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。