所有 hitch 故事都由前提条件和步骤组成。
Hitchstory 允许你使用 YAML 中的 given:
关键字定义前提条件,然后在 set_up
方法或步骤中使用 self.given['属性名']
引用这些前提条件。
给定属性名首先需要在引擎中使用 GivenDefinition 和 GivenProperty 指定。
模式使用 StrictYAML 验证器 指定。
以下示例显示了一个浏览器前提条件,用于为使用浏览器的测试设置一个模拟 selenium 对象。
代码示例
example.story
Load with chrome:
given:
browser configuration:
name: chrome
version: 22.0
platform: linux
steps:
- Load website
Load with small firefox window:
given:
browser configuration:
name: firefox
platform: linux
dimensions:
height: 200
width: 200
steps:
- Load website
from hitchstory import BaseEngine, GivenDefinition, GivenProperty
from strictyaml import Optional, Str, Map, Enum, Seq, Int, MapPattern
from mockselenium import Webdriver
class Engine(BaseEngine):
given_definition=GivenDefinition(
browser_configuration=GivenProperty(
schema=Map(
{
"name": Str(),
"platform": Enum(["linux", "osx", "windows"]),
Optional("version"): Str(),
Optional("dimensions"): Map({"height": Int(), "width": Int()}),
}
),
inherit_via=GivenProperty.OVERRIDE,
)
)
def set_up(self):
browser = self.given["browser configuration"]
self.driver = Webdriver(
name=browser['name'],
platform=browser['platform'],
version=browser.get('version'),
dimensions=browser.get('dimensions', {"height": 1000, "width": 1000}),
)
def load_website(self):
self.driver.visit("http://www.google.com")
附带代码
from hitchstory import StoryCollection
from pathlib import Path
from engine import Engine
指定
StoryCollection(Path(".").glob("*.story"), Engine()).ordered_by_name().play()
将输出
RUNNING Load with chrome in /path/to/working/example.story ...
Browser name: chrome
Platform: linux
Version: 22.0
Dimensions: 1000 x 1000
Visiting http://www.google.com
SUCCESS in 0.1 seconds.
RUNNING Load with small firefox window in /path/to/working/example.story ...
Browser name: firefox
Platform: linux
Dimensions: 200 x 200
Visiting http://www.google.com
SUCCESS in 0.1 seconds.
可执行规范
从 given.story storytests 自动生成的文档。