我的Flask应用程序上有一个测试夹具,它启动开发服务器来测试一些用户交互。对于第一次测试,我想确保服务器正常运行。一般来说(不测试特定的响应代码)最好的方法是什么?我希望我可以使用self.assertTrue(response)
,但即使我改变了端口,这似乎也会通过。
以下是有问题的测试用例:
class TestAuth(TestCase):
def create_app(self):
db.init_app(app)
return app
@classmethod
def setUpClass(cls):
cls.server_proc = subprocess.Popen(
[sys.executable, 'run.py'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
time.sleep(5)
@classmethod
def TearDownLcass(cls):
os.kill(cls.server_proc.pid, signal.SIGINT)
def setUp(self):
selenium_logger = logging.getLogger(
'selenium.webdriver.remote.remote_connection')
selenium_logger.setLevel(logging.WARN)
self.browser = webdriver.Firefox()
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
self.browser.quit()
def test_server_up(self):
response = self.client.get('http://localhost:5000/')
self.assertTrue(response)
答案 0 :(得分:1)
您可以使用Requests向自己,甚至urllib2发送请求。启动您的开发服务器并从指向您的ip:port的另一个实例发出请求。
答案 1 :(得分:1)
您正在混合使用两种不同的方法进行测试。
Flask-Testing
公开的测试样式不需要启动单独的服务器。 self.client.get
调用并不真正从服务器请求URL,它只是将请求内部路由到运行测试的同一进程。
如果您想使用单独的服务器,则无法使用self.client
来请求URL,在这种情况下,您必须使用正确的HTTP客户端。您似乎已经实例化了Selenium浏览器,因此可以正常工作。将self.client.get()
替换为self.browser.get()
。
另一方面,如果您没有特别想要启动单独的Web服务器并且可以使用Flask和Flask-Testing提供的默认工具测试您的应用程序,那么请删除所有服务器进程启动代码和Selenium的东西,只需使用self.client
来发出请求。但请注意self.client
不是真正的Web客户端,因此测试服务器是否启动没有意义,因为在测试时没有服务器。