2013-03-06 2 views
4

Я совершенно новой для функционального тестирования с использованием Python WebTest, пожалуйста, медведь со мнойФункциональное тестирование с Python WebTest

Я смотрел на https://webtest.readthedocs.org/en/latest/webtest.html, поэтому я попробовал код, как это предлагается сделать запрос:

app.get('/path', [params], [headers], [extra_environ], ...) 

Хорошо, выглядит достаточно просто для меня. Я создаю файл с именем test_demo.py в папке MYAPP:

from webtest import TestApp 

    class MyTests(): 
     def test_admin_login(self): 
      resp = self.TestApp.get('/admin') 
      print (resp.request) 

Сейчас это где я застрял с, как я должен запустить этот test_demo.py? Я пытался печатать в Баш

$ bin/python MyCart/mycart/test_demo.py test_admin_login 

Но это не показывает никакого результата.

Бьюсь об заклад, у меня что-то не так, но документы не помогают, или я просто медленно.

ответ

5

Опасайтесь, вам не хватает нескольких шагов.

Ваша программа ничего не делает, потому что вы не сказали ей ничего делать, вы просто определили класс. Итак, давайте расскажем ему что-нибудь сделать. Мы будем использовать пакет 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, который, и мы видим:

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) 

Итак, нам нужно приложение, чтобы проверить. Где его взять? Обычно вам нужно, чтобы приложение WSGI, которое вы создаете в своем main, через 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() 

Теперь все, что нужно это INI файл, похожий на ваш development.ini, но для целей тестирования. Вы можете просто скопировать development.ini, пока вам не нужно будет устанавливать какие-либо настройки только для тестирования.

Надеюсь, это даст вам отправную точку, чтобы узнать больше о пакете unittest.

+0

haha, что действительно помогает много = D – Gino

+0

Появилась новая ошибка (ImportError: No module named pyramid.paster), когда я пытался запустить $ python -m unittest -v test_demo. Я использую python 3.2 – Gino

+0

Используйте питон из virtualenv, в котором вы установили пирамиду. –