Django中创建功能测试的辅助工具,具有统一API的WebTest和Selenium测试。
项目描述
Django中创建高级功能测试的辅助工具,具有统一API的WebTest和Selenium测试。
探索django-functest让我感到愤怒!为什么?因为我过去几年浪费了太多时间编写低级、模板化的测试,而没有使用它——jerivas
什么是WebTest?想象一个基于文本、仅HTML的浏览器,它不加载CSS、JavaScript等,以同步方式直接在WSGI接口上操作,以提高性能和健壮性,并且可以通过程序控制。
什么是Selenium?一个打开像Firefox和Chrome这样的完整浏览器(具有隔离配置文件)的工具,并为它们提供API进行控制。
要了解使用django-functest编写测试的实际情况,您可能会对交互式编写测试文档中的视频感兴趣。
文档
安装
需要 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.org或hotwire并跟上新技术!(好吧,大多数其实都很老,但我们创建的是快速网站…)
底层,基于WSGI的方法使用并构建在WebTest和django-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: `
付费支持
一些维护者能够以付费方式为这个开源项目提供支持。这包括以下几种类型的事情
支付错误修复或新功能(了解这些更改将成为项目的一部分,并且不是由付费的人“拥有”的)。
调试或其他支持,将django-functest集成到你的项目中。
从头开始使用django-functest为你编写测试套件。
如果你对此感兴趣,可以联系以下开发者
Luke Plant - 长期Django专家和贡献者 - 信息和状态。
鸣谢
这个库最初由spookylukey编写,并由Wolf & Badger的开发者进一步改进,并得到该公司的许可发布。
本包渲染所使用的工具
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。