加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django可重用应用程序中的功能测试

发布时间:2020-12-16 21:31:36 所属栏目:Python 来源:网络整理
导读:我正在写一个Django可重用的应用程序.它不是一个可以单独使用的常用应用程序.它需要其他应用程序才能使用,就像 django.contrib.admin或django-dajaxice一样. 我当前的项目树看起来像这样: django-myapp/ docs/ some.rst docs.rst ... myapp/ static/ myapp/
我正在写一个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
    ...

单元测试很简单 – 我只是测试我的代码所以我不需要完整的Django环境来运行它们.简单的./setup.py测试完美无缺.

功能测试是棘手的部分.我想使用selenium所以我需要运行dev服务器,这需要整个Django环境.我正在尝试使用django.test.LiveServerTestCase但没有成功(看起来没有定义url,在设置中设置ROOT_URLCONF并且类中的urls属性没有帮助).

我发现的每一个文档,stackoverflow上的每个问题都讲述了在Django项目中测试Django应用程序.这是我的问题:在没有设置完整的Django项目的情况下,运行可重用应用程序的功能/集成测试的最佳(和工作)方法是什么?

解决方法

由于 Nathan says很难在整个堆栈中测试一个单元,没有堆栈.所以你必须有一个设置文件.看看优秀的 django-debug-toolbar应用程序是如何做到的:

它有一个带有test_selenium规则的Makefile:

test_selenium:
    DJANGO_SELENIUM_TESTS=true DJANGO_SETTINGS_MODULE=tests.settings 
        django-admin.py test tests

在其tests模块中,它有一个裸露的骨头settings.py,带有必需品:

>正在测试的应用程序INSTALLED_APPS
> ROOT_URLCONF指向urls.py
>像MIDDLEWARE_CLASSES这样的东西你可以跳过,因为你没有.

和test_integration.py

@skipUnless('DJANGO_SELENIUM_TESTS' in os.environ,"selenium tests not requested")
class DebugToolbarLiveTestCase(LiveServerTestCase):
    ...

研究他们的设置.从Makefile开始,深入挖掘,确保你理解为什么一切都在那里.

我喜欢这种设置,因为集成/功能测试往往是doglow.可以理解的是,他们用所有移动部件测试整个堆栈.他们的Makefile提供了一种简单的方法来跳过它们.如果我有一个使用Javascript的可重用应用程序,我也会看一下jasmine.或者一些other tool来测试javascript.因为运行慢速集成仅仅是为了查看js单元是否有效是一件痛苦的事.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读