我对使用Python WebTest进行功能测试完全不熟悉,请耐心等待
我正在查看https://webtest.readthedocs.org/en/latest/webtest.html,因此我尝试了建议的代码来提出请求:
app.get('/path', [params], [headers], [extra_environ], ...)
好的,看起来很简单。我在myapp文件夹中创建了一个名为test_demo.py的文件:
from webtest import TestApp
class MyTests():
def test_admin_login(self):
resp = self.TestApp.get('/admin')
print (resp.request)
现在这就是我被困的地方,我应该如何运行这个test_demo.py? 我试过用bash键入
$ bin/python MyCart/mycart/test_demo.py test_admin_login
但它没有显示任何结果。
我打赌我得错了,但是文档没有多大帮助,或者我只是很慢。
答案 0 :(得分:6)
哎呀,你错过了几步。
你的程序没有做任何事情,因为你没有告诉它做任何事情,你只是定义了一个类。所以让我们告诉它做点什么。我们将使用unittest包来使事情更加自动化。
import unittest
from webtest import TestApp
class MyTests(unittest.TestCase):
def test_admin_login(self):
resp = self.TestApp.get('/admin')
print (resp.request)
if __name__ == '__main__':
unittest.main()
运行它,我们看到:
E
======================================================================
ERROR: test_admin_login (__main__.MyTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_foo.py", line 6, in test_admin_login
resp = self.TestApp.get('/admin')
AttributeError: 'MyTests' object has no attribute 'TestApp'
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
好的,我们需要一个应用来测试。从哪里得到一个?您通常需要通过main
在config.make_wsgi_app()
中创建的WSGI应用。最简单的方法是加载它,就像pserve development.ini
在您运行应用时所做的那样。我们可以通过pyramid.paster.get_app()
。
import unittest
from pyramid.paster import get_app
from webtest import TestApp
class MyTests(unittest.TestCase):
def test_admin_login(self):
app = get_app('testing.ini')
test_app = TestApp(app)
resp = test_app.get('/admin')
self.assertEqual(resp.status_code, 200)
if __name__ == '__main__':
unittest.main()
现在所需要的只是一个类似于development.ini
的INI文件,但是出于测试目的。您只需复制development.ini
,直到您需要设置任何仅用于测试的设置。
希望这为您提供了一个了解unittest
包的更多信息的起点。