跳转到主要内容

Django中创建功能测试的辅助工具,具有统一API的WebTest和Selenium测试。

项目描述

https://github.com/django-functest/django-functest/workflows/Python%20package/badge.svg https://readthedocs.org/projects/django-functest/badge/?version=latest

Django中创建高级功能测试的辅助工具,具有统一API的WebTest和Selenium测试。

探索django-functest让我感到愤怒!为什么?因为我过去几年浪费了太多时间编写低级、模板化的测试,而没有使用它——jerivas

什么是WebTest?想象一个基于文本、仅HTML的浏览器,它不加载CSS、JavaScript等,以同步方式直接在WSGI接口上操作,以提高性能和健壮性,并且可以通过程序控制。

什么是Selenium?一个打开像Firefox和Chrome这样的完整浏览器(具有隔离配置文件)的工具,并为它们提供API进行控制。

要了解使用django-functest编写测试的实际情况,您可能会对交互式编写测试文档中的视频感兴趣。

文档

完整文档位于 https://django-functest.readthedocs.org

安装

需要 Python 3.7 及以上版本,Django 2.0 及以上版本。

pip install django-functest

有关重要兼容性信息,请参阅依赖项文档

特性

  • 提供简化API,用于在Django中编写功能测试(检查整个视图或视图集的行为,例如结账流程)。

  • 统一API,可以同时抽象WebTest和Selenium - 一次编写两个测试!

  • 为使用WebTest和Selenium时遇到的大部分问题和困难提供了解决方案。

  • 经过良好测试 - 除了自己的测试套件,它还在Firefox和Chrome上运行,还被Wolf & Badger用于测试许多业务关键功能。

  • 支持使用pytest(使用pytest-django)以及Django的manage.py test运行。

典型用法

在你的tests.py中

from django.test import LiveServerTestCase, TestCase
from django_functest import FuncWebTestMixin, FuncSeleniumMixin, FuncBaseMixin


class ContactTestBase(FuncBaseMixin):
    # Abstract class, doesn't inherit from TestCase

    def test_contact_form(self):
        self.get_url("contact_form")
        self.fill(
            {
                "#id_name": "Joe",
                "#id_message": "Hello",
            }
        )
        self.submit("input[type=submit]")
        self.assertTextPresent("Thanks for your message")


class ContactWebTest(ContactTestBase, FuncWebTestMixin, TestCase):
    pass


class ContactSeleniumTest(ContactTestBase, FuncSeleniumMixin, LiveServerTestCase):
    pass

这种方式,你可以使用高级API编写单个测试,并以两种方式运行它 - 使用快速、基于WSGI的方法模拟浏览器典型的HTTP使用,以及使用完整浏览器执行JavaScript(如果存在)等。

django-functest采用的方法非常适合你的Web应用主要是“经典”应用,即服务器端渲染的HTML,结合少量JavaScript来增强UI,你也需要能够测试这种情况。如果你认为这种做法过时了,请查看htmx.orghotwire并跟上新技术!(好吧,大多数其实都很老,但我们创建的是快速网站…)

底层,基于WSGI的方法使用并构建在WebTestdjango-webtest之上。

django-functest以其功能混合形式提供功能,这样你可以有自己的测试基类。

贡献和测试

有关运行测试套件和为django-functest做出贡献的信息,请参阅CONTRIBUTING.rst

在Mac OS上构建

由于这个lxml错误仍在生效,lxml无法处理HTML(或XML!)文档中的某些Unicode字符,包括测试套件中一个文件的emoji。

因此,如果你受到此错误的影响,你会发现某些测试会因为错误 lxml.etree.ParserError: Document is empty 而失败。

你还会发现lxml的自己的测试套件在你的机器上也会失败。

一种解决方案是自行编译libxml2,lxml将为你处理。为此,请运行以下命令

` STATICBUILD=true python -m pip install lxml --force-reinstall --no-binary=:all: `

鸣谢

这个库最初由spookylukey编写,并由Wolf & Badger的开发者进一步改进,并得到该公司的许可发布。

本包渲染所使用的工具

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

django-functest-1.6.1.tar.gz (78.5 kB 查看哈希值)

上传时间 源代码

构建分发

django_functest-1.6.1-py3-none-any.whl (40.6 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面