跳至内容

所有 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
engine.py

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 自动生成的文档。