在没有 运行 个 Bottle 服务器的情况下测试 Bottle 应用
Test bottle app without running bottle server
当我尝试下面的代码时
#filename: mywebapp.py
from bottle import Bottle, run, request
app = Bottle()
@app.get('/hello')
def hello():
return "Hello " + request.get_header('name')
if __name__ == '__main__':
run(app, host='localhost', port=80)
函数测试用例 TestApp
#filename: test_mywebapp.py
from webtest import TestApp
import mywebapp
def test_functional_hello_world():
app = TestApp(mywebapp.app)
assert app.get('/hello').status_code == 200
assert app.get('/hello', headers=dict(name='World!')).text == 'Hello World!'
当我 运行 nosetests test_mywebapp.py
我遇到了以下错误。
nosetests test_mywebapp.py
E
======================================================================
ERROR: test_mywebapp.test_functional_hello_world
----------------------------------------------------------------------
Traceback (most recent call last):
File "/private/tmp/venv/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/private/tmp/test_mywebapp.py", line 6, in test_functional_hello_world
assert app.get('/hello').status_code == 200
File "/private/tmp/venv/lib/python2.7/site-packages/webtest/app.py", line 327, in get
expect_errors=expect_errors)
File "/private/tmp/venv/lib/python2.7/site-packages/webtest/app.py", line 636, in do_request
self._check_status(status, res)
File "/private/tmp/venv/lib/python2.7/site-packages/webtest/app.py", line 668, in _check_status
res)
AppError: Bad response: 500 Internal Server Error (not 200 OK or 3xx redirect for http://localhost/hello)
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Error: 500 Internal Server Error</title>
<style type="text/css">
html {background-color: #eee; font-family: sans;}
body {background-color: #fff; border: 1px solid #ddd;
padding: 15px; margin: 15px;}
pre {background-color: #eee; border: 1px solid #ddd; padding: 5px;}
</style>
</head>
<body>
<h1>Error: 500 Internal Server Error</h1>
<p>Sorry, the requested URL <tt>'http://localhost:80/hello'</tt>
caused an error:</p>
<pre>Internal Server Error</pre>
</body>
</html>
----------------------------------------------------------------------
Ran 1 test in 0.008s
FAILED (errors=1)
QuickStart TestApp
提及。
If your WSGI application requires any configuration, you must set that
up manually in your tests.
我该如何配置?
需要,bottle server 运行ning,没有运行ning server,有没有办法测试bottle app?
感谢您发布堆栈跟踪。它清楚地表明这是导致 500:
的行
assert app.get('/hello').status_code == 200
为什么不打印 app.get('/hello').status_code
的值以便了解发生了什么?
我也很确定你应该检查 status_int
,而不是 status_code
。
assert app.get('/hello').status_int == 200
当我尝试下面的代码时
#filename: mywebapp.py
from bottle import Bottle, run, request
app = Bottle()
@app.get('/hello')
def hello():
return "Hello " + request.get_header('name')
if __name__ == '__main__':
run(app, host='localhost', port=80)
函数测试用例 TestApp
#filename: test_mywebapp.py
from webtest import TestApp
import mywebapp
def test_functional_hello_world():
app = TestApp(mywebapp.app)
assert app.get('/hello').status_code == 200
assert app.get('/hello', headers=dict(name='World!')).text == 'Hello World!'
当我 运行 nosetests test_mywebapp.py
我遇到了以下错误。
nosetests test_mywebapp.py
E
======================================================================
ERROR: test_mywebapp.test_functional_hello_world
----------------------------------------------------------------------
Traceback (most recent call last):
File "/private/tmp/venv/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/private/tmp/test_mywebapp.py", line 6, in test_functional_hello_world
assert app.get('/hello').status_code == 200
File "/private/tmp/venv/lib/python2.7/site-packages/webtest/app.py", line 327, in get
expect_errors=expect_errors)
File "/private/tmp/venv/lib/python2.7/site-packages/webtest/app.py", line 636, in do_request
self._check_status(status, res)
File "/private/tmp/venv/lib/python2.7/site-packages/webtest/app.py", line 668, in _check_status
res)
AppError: Bad response: 500 Internal Server Error (not 200 OK or 3xx redirect for http://localhost/hello)
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Error: 500 Internal Server Error</title>
<style type="text/css">
html {background-color: #eee; font-family: sans;}
body {background-color: #fff; border: 1px solid #ddd;
padding: 15px; margin: 15px;}
pre {background-color: #eee; border: 1px solid #ddd; padding: 5px;}
</style>
</head>
<body>
<h1>Error: 500 Internal Server Error</h1>
<p>Sorry, the requested URL <tt>'http://localhost:80/hello'</tt>
caused an error:</p>
<pre>Internal Server Error</pre>
</body>
</html>
----------------------------------------------------------------------
Ran 1 test in 0.008s
FAILED (errors=1)
QuickStart TestApp
提及。
If your WSGI application requires any configuration, you must set that up manually in your tests.
我该如何配置?
需要,bottle server 运行ning,没有运行ning server,有没有办法测试bottle app?
感谢您发布堆栈跟踪。它清楚地表明这是导致 500:
的行assert app.get('/hello').status_code == 200
为什么不打印 app.get('/hello').status_code
的值以便了解发生了什么?
我也很确定你应该检查 status_int
,而不是 status_code
。
assert app.get('/hello').status_int == 200