基于Type-safe YAML的Python示例驱动开发框架。
项目描述
HitchStory
类型安全的StrictYAML Python集成测试框架。使用此框架,您的测试可以
从程序输出(命令行测试示例)中重新编写自己
自动生成文档(网站测试示例)
测试可以单独运行,也可以作为pytest测试运行。
包含示例测试的演示项目
项目 | 故事测试 | Python代码 | 文档模板 | 自动生成的文档 |
---|---|---|---|---|
网站 | 添加待办事项, 纠正拼写 | engine.py | docstory.yml | 添加待办事项, 纠正我的拼写 |
REST API | 添加待办事项, 纠正拼写 | engine.py | docstory.yml | 添加待办事项,纠正我的拼写 |
交互式命令行应用程序 | 添加待办事项,纠正拼写 | test_integration.py | docstory.yml | 添加待办事项,纠正我的拼写 |
Python API | 添加待办事项,纠正拼写 | test_integration.py | docstory.yml | 添加待办事项,纠正我的拼写 |
代码示例
example.story
Logged in:
given:
website: /login # preconditions
steps:
- Form filled:
username: AzureDiamond
password: hunter2
- Clicked: login
Email sent:
about: |
The most basic email with no subject, cc or bcc
set.
based on: logged in # inherits from and continues from test above
following steps:
- Clicked: new email
- Form filled:
to: Cthon98@aol.com
contents: | # long form text
Hey guys,
I think I got hacked!
- Clicked: send email
- Email was sent
engine.py
from hitchstory import BaseEngine, GivenDefinition, GivenProperty
from hitchstory import Failure, strings_match
from strictyaml import Str
class Engine(BaseEngine):
given_definition = GivenDefinition(
website=GivenProperty(Str()),
)
def __init__(self, rewrite=False):
self._rewrite = rewrite
def set_up(self):
print(f"Load web page at {self.given['website']}")
def form_filled(self, **textboxes):
for name, contents in sorted(textboxes.items()):
print(f"Put {contents} in name")
def clicked(self, name):
print(f"Click on {name}")
def failing_step(self):
raise Failure("This was not supposed to happen")
def error_message_displayed(self, expected_message):
"""Demonstrates steps that can rewrite themselves."""
actual_message = "error message!"
try:
strings_match(expected_message, actual_message)
except Failure:
if self._rewrite:
self.current_step.rewrite("expected_message").to(actual_message)
else:
raise
def email_was_sent(self):
print("Check email was sent!")
>>> from hitchstory import StoryCollection
>>> from pathlib import Path
>>> from engine import Engine
>>>
>>> StoryCollection(Path(".").glob("*.story"), Engine()).named("Email sent").play()
RUNNING Email sent in /path/to/working/example.story ... Load web page at /login
Put hunter2 in name
Put AzureDiamond in name
Click on login
Click on new email
Put Hey guys,
I think I got hacked!
in name
Put Cthon98@aol.com in name
Click on send email
Check email was sent!
SUCCESS in 0.1 seconds.
安装
$ pip install hitchstory
社区
如果您在这些地方提出问题,可以获得帮助:GitHub 讨论区 | GitHub 问题(不仅限于错误)| Slack 频道
使用 HitchStory
本库的每个功能都有文档,并列在下面。它与其自身一起进行了测试和文档化。
使用 HitchStory:与 Pytest 一起使用
如果您已经设置了 pytest,则可以快速轻松地使用 hitchstory 编写一个测试,该测试可以与您的其他 pytest 测试一起运行
使用 HitchStory:引擎
如何使用故事引擎的不同功能
- 隐藏预期异常的堆栈跟踪
- 给定先决条件
- 故事步骤的逐步类型化
- 匹配两个 JSON 片段
- 匹配两个字符串,并在失败时显示 diff
- 额外的故事元数据 - 例如,将 JIRA 工作单编号添加到故事中
- 带有参数的故事
- 重新编写给定先决条件的故事
- 重新编写自己的故事
- 重新编写参数的子键的故事
- 引发失败异常以隐藏堆栈跟踪
- 步骤的参数
- 强类型
使用 HitchStory:文档生成
如何从您的测试中自动生成文档
使用 HitchStory:继承
相互继承故事
使用 HitchStory:运行器
以不同方式运行故事
使用 HitchStory 的方法
最佳实践,如何使用此工具,等等。
- HitchStory 是 BDD 工具吗?如何使用 hitchstory 进行 BDD?
- 互补工具
- 域适当场景语言 (DASL)
- 可执行规范
- 易变测试
- 赫米特端到端测试模式
- 反模式 - 分析师为开发人员编写故事
- 快照测试驱动开发 (STDD)
- 测试工件环境隔离
- 测试关注点泄露
- 测试作为一项投资
- 测试和故事之间的区别是什么?
- 测试现实性的重要性
- 测试非确定性代码
- 规范文档测试三重性
设计决策和原则
设计决策在这里得到证明
- 声明式用户故事
- 为什么 hitchstory 强制使用给定而不是当和然后?
- 为什么继承是 hitchstory 故事的一个特性?
- 为什么HitchStory没有关于“商业”认为什么有趣的具体看法?
- 为什么HitchStory没有命令行界面?
- 原则
- 为什么HitchStory没有CLI运行器,只有纯Python API?
- 为什么是可重写测试驱动开发(RTDD)?
- 为什么HitchStory使用StrictYAML?
为什么不使用X?
HitchStory不是唯一的集成测试框架。这是它与其它框架的比较。
- 为什么使用HitchStory而不是Behave、Lettuce或Cucumber(Gherkin)?
- 为什么不使用Robot Framework?
- 为什么使用HitchStory而不是单元测试框架?
使用HitchStory:独立设置
如果你想在没有pytest的情况下使用HitchStory
使用HitchStory:行为
关于框架行为的杂项文档
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
hitchstory-0.24.0.tar.gz (33.0 kB 查看哈希值)
构建分布
hitchstory-0.24.0-py3-none-any.whl (30.3 kB 查看哈希值)
关闭
hitchstory-0.24.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c3f1317c0674ba05eda8d07f454d00d3b580162fb52ceae99553058d586b34da |
|
MD5 | 3f5116d07e51b35f9496f6aa59623f63 |
|
BLAKE2b-256 | 3b6abda7033e595ff3e1d0a44d40403a0d823839a100405fbd41735ff75269ed |
关闭
hitchstory-0.24.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6178277c896427b2fb7c44b2c2979e884757e66f6d7e36c59995b3f151d7ba15 |
|
MD5 | ec2e4e2d2d66e5b3fc7ef086b444d2e8 |
|
BLAKE2b-256 | 59e069c4dc74b1e7205d61a369723158a004f56ffcb9168467d4fdcd97110563 |