Pat*_*rek 5 testing django selenium integration-testing
我正在写一个Django可重用的应用程序.它不是一个可以单独使用的常用应用程序.它需要其他应用程序才能使用,就像django.contrib.admin或django-dajaxice一样.
我当前的项目树看起来像这样:
django-myapp/
docs/
some.rst
docs.rst
...
myapp/
static/
myapp/
some_js_stuff.js
templatetags/
some_file.py
__init__.py
base.py
manager.py
...
unit_tests/
__init__.py
test_base.py
test_manager.py
functional_tests/
__init__.py
functional_tests.py
urls.py
README.rst
LICENSE
requirements.txt
requirements-test.txt
setup.py
...
Run Code Online (Sandbox Code Playgroud)
单元测试很简单 - 我只是测试我的代码所以我不需要完整的Django环境来运行它们.简单的./setup.py test工作完美.
功能测试是棘手的部分.我想使用selenium所以我需要运行dev服务器,这需要整个Django环境.我尝试使用django.test.LiveServerTestCase,但没有成功(它看起来像没有定义的网址,设置ROOT_URLCONF在settings和urls类属性并没有帮助).
我发现的每一个文档,stackoverflow上的每个问题都讲述了在Django项目中测试Django应用程序.这是我的问题:在没有设置完整的Django项目的情况下,运行可重用应用程序的功能/集成测试的最佳(和工作)方法是什么?
正如内森所说,如果没有堆栈,很难在整个堆栈中测试一个单元。所以你必须有一个设置文件。看看优秀的django-debug-toolbar应用程序是如何做到这一点的:
它有一个带有规则的Makefiletest_selenium:
test_selenium:
DJANGO_SELENIUM_TESTS=true DJANGO_SETTINGS_MODULE=tests.settings \
django-admin.py test tests
Run Code Online (Sandbox Code Playgroud)
在它的测试模块中,它有一个简单的settings.py 和基本必需品:
INSTALLED_APPS与正在测试的应用程序ROOT_URLCONFwhich 指向 urls.pyMIDDLEWARE_CLASSES类似的东西你可以跳过,因为你没有。@skipUnless('DJANGO_SELENIUM_TESTS' in os.environ, "selenium tests not requested")
class DebugToolbarLiveTestCase(LiveServerTestCase):
...
Run Code Online (Sandbox Code Playgroud)
研究他们的设置。从 Makefile 开始深入挖掘,确保您了解所有内容为何存在。
我喜欢这种设置,因为集成/功能测试往往很慢。可以理解的是,他们测试整个堆栈及其所有移动部件。他们的 Makefile 提供了一种跳过它们的简单方法。如果我有一个使用 Javascript 的可重用应用程序,我也会看看jasmine。或者其他一些对 javascript 进行单元测试的工具。因为运行缓慢的集成测试只是为了看看 js 单元是否工作是一件痛苦的事情。
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |