使用Python WebTest进行功能测试

Gin*_*ino 4 python webtest pyramid

我对使用Python WebTest进行功能测试完全不熟悉,请耐心等待

我正在查看https://webtest.readthedocs.org/en/latest/webtest.html,因此我尝试了建议的代码来提出请求:

    app.get('/path', [params], [headers], [extra_environ], ...)
Run Code Online (Sandbox Code Playgroud)

好的,看起来很简单.我在myapp文件夹中创建了一个名为test_demo.py的文件:

    from webtest import TestApp

    class MyTests():
        def test_admin_login(self):
           resp = self.TestApp.get('/admin')
           print (resp.request)
Run Code Online (Sandbox Code Playgroud)

现在这是我坚持的地方,我该如何运行这个test_demo.py?我试过用bash打字

    $ bin/python MyCart/mycart/test_demo.py test_admin_login
Run Code Online (Sandbox Code Playgroud)

但它没有显示任何结果.

我敢打赌,我得到了一些错误的东西,但是文档没有多大帮助,或者我只是很慢.

Mic*_*kel 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()
Run Code Online (Sandbox Code Playgroud)

运行它,我们看到:

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)
Run Code Online (Sandbox Code Playgroud)

好的,我们需要一个应用程序来测试.从哪里得到一个?您通常需要在mainvia 中创建的WSGI应用程序config.make_wsgi_app().最简单的方法是加载它,就像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()
Run Code Online (Sandbox Code Playgroud)

现在所需要的只是一个类似于你的INI文件development.ini,但是出于测试目的.您只需复制,development.ini直到您需要设置任何设置仅用于测试.

希望这为您提供了一个了解该unittest包的更多信息的起点.