A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications.
pip install pytest-tornado
import pytest
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
@pytest.fixture
def app():
return application
@pytest.mark.gen_test
def test_hello_world(http_client, base_url):
response = yield http_client.fetch(base_url)
assert response.code == 200
py.test
- io_loop
- creates an instance of the tornado.ioloop.IOLoop for each test case
- http_port
- get a port used by the test server
- base_url
- get an absolute base url for the test server,
for example,
http://localhost:59828
- http_server
- start a tornado HTTP server, you must create an
app
fixture, which returns the tornado.web.Application to be tested - http_client
- get an asynchronous HTTP client
Show fixtures provided by the plugin:
py.test --fixtures
A gen_test
marker lets you write a coroutine-style tests used with the
tornado.gen module:
@pytest.mark.gen_test
def test_tornado(http_client):
response = yield http_client.fetch('http://www.tornadoweb.org/')
assert response.code == 200
Marked tests will time out after 5 seconds. The timeout can be modified by
setting an ASYNC_TEST_TIMEOUT
environment variable,
--async-test-timeout
command line argument or a marker argument.
@pytest.mark.gen_test(timeout=5)
def test_tornado(http_client):
yield http_client.fetch('http://www.tornadoweb.org/')
Show markers provided by the plugin:
py.test --markers