Ward 是一个注重生产力和可读性的 Python 测试框架。它为您提供编写文档完善和可扩展测试所需的工具。
[!重要]
我不再积极维护这个项目。
特性
在文档中查看完整的特性列表。
描述性测试名称: 使用字符串而不是函数名来描述您的测试内容。
@test("简单加法") # 您可以在这些描述中使用 markdown!
def _():
assert 1 + 2 == 3 # 您可以使用普通的 assert 语句!
模块化测试依赖: 使用依赖于 Python 导入系统而不是名称匹配的 fixture 来管理测试的设置/清理代码。
@fixture
def user():
return User(name="darren")
@test("用户名叫 darren")
def _(u=user):
assert u.name == "darren"
支持 asyncio:使用 async def
定义测试和 fixture,并在其中调用异步代码。
@fixture
async def user():
u = await create_user()
return await u.login()
@test("登录用户有最后会话日期")
async def _(user=user):
last_session = await get_last_session_date(user.id)
assert is_recent(last_session, get_last_session_date)
强大的测试选择: 不仅可以通过匹配测试名称/描述来限制测试运行,还可以通过测试主体中包含的代码来限制。
ward --search "Database.get_all_users"
或使用标签表达式进行更强大的筛选。
ward --tags "(unit or integration) and not slow"
参数化测试: 通过在循环中编写测试,只需编写一次测试,就可以使用不同的输入多次运行。
for lhs, rhs, res in [
(1, 1, 2),
(2, 3, 5),
]:
@test("简单加法")
def _(left=lhs, right=rhs, result=res):
assert left + right == result
跨平台: 在 Mac OS、Linux 和 Windows 上经过测试。
速度快: 在我的机器上,Ward 的约 320 个测试套件运行时间不到半秒。
零配置: 合理的默认设置意味着无需任何参数即可运行 ward
。如果需要,可以使用 pyproject.toml
或命令行进行配置。
可扩展: Ward 使用 pluggy 构建了插件系统,这是与 pytest 使用的相同框架。
色彩丰富、人类可读的输出: 通过失败测试的详细输出快速定位并修复问题。
入门
请查看文档!
如何贡献
非常欢迎并鼓励贡献!
有关如何参与 Ward 开发的信息,请参阅贡献指南。