跳转到主要内容

一些优秀的BDD组件的不错组合

项目描述

沙拉是lettuce和splinter等一些优秀的BDD包的混合,加入了一些常见的模块。其目标是让编写验收测试变得非常有趣。

[![构建状态](https://secure.travis-ci.org/wieden-kennedy/salad.png?branch=master)](http://travis-ci.org/wieden-kennedy/salad)

安装
==========

我们喜欢简单的事情。

(注意:在lettuce上有一个挂起的pull request。直到它完成,您将必须手动安装它。)
```bash
pip install git+https://github.com/skoczen/lettuce.git#egg=lettuce
pip install salad
```

如果您想要django集成,

```bash
pip install django django-extensions
```

```python
INSTALLED_APPS += ("lettuce.django",)
```


使用方法
=====

Salad主要基于lettuce。
------------------------

沙拉主要包括[生菜](http://lettuce.it/)。因此,你应该热情地使用他们的[优秀文档](http://lettuce.it/contents.html)。如果你在与浏览器交互,你将通过令人惊叹的[splinter](http://splinter.cobrateam.info/)来完成,他们的[文档](http://splinter.cobrateam.info/docs/)同样出色。


沙拉包括有用的步骤和地形。
------------------------------------------

下面详细介绍了所有包含的模块,但如果你只想快速启动,你可以

*steps.py*

```python
from salad.steps.everything import *
```

*terrains.py*

```python
from salad.terrains.everything import *
```

这样就完成了。


沙拉 101
=========

编写你的第一个 lettuce 功能
----------------------------------

1. 在你的应用程序中创建一个 "features" 目录。

```bash
mkdir features
```

1. 在 features 目录内,创建一个名为 `our-website-is-up.feature` 的文件,内容如下

```gherkin
Feature: 确保Lettuce运行正常,W+K的网站可以加载
为了确保Lettuce可以正常工作
作为一名开发者
我使用Lettuce打开Wieden+Kennedy网站

Scenario: 打开W+K网站成功
Given 我访问了网址 "http://www.wk.com/"
When 我浏览
Then 我应该在页面中看到 "Wieden+Kennedy" 字样
```

1. 在 features 目录内,创建一个步骤文件 `our-website-is-up-steps.py`,导入salad地形,如下

```python
from salad.steps.everything import *
```

1. 同样地,在 features 目录内,创建一个 `terrain.py` 文件,导入salad步骤,如下

```python
from salad.terrains.everything import *
```


这就完成了,你可以运行测试了!


运行你的第一个 salad 测试
-------------------------------


在 features 目录的上级目录(你的项目根目录)中运行

```
salad
```

这就完成了 - 你应该看到

```
Feature: 确保Lettuce运行正常,W+K的网站可以加载 # features/our-website-is-up.feature:1
In order to make sure that salad works # features/our-website-is-up.feature:2
As a developer # features/our-website-is-up.feature:3
I open the Wieden+Kennedy website using salad # features/our-website-is-up.feature:4

Scenario: 打开W+K网站成功 # features/our-website-is-up.feature:6
Given 我访问了网址 "http://www.wk.com/" # features/our-website-is-up-steps.py:8
When 我浏览 # features/our-website-is-up-steps.py:80
Then 我应该在页面中看到 "Wieden+Kennedy" 字样 # features/our-website-is-up-steps.py:37

1 feature (1 passed)
1 scenario (1 passed)
3 steps (3 passed)
```

很简单。

Salad 内置功能
================

步骤和地形源文件是获取信息的最佳来源,但以下是对salad内置功能的概述

步骤
-----

* `browser` - 分为子模块。导入 `browser` 可以获取所有模块。
* `alerts` - 处理警告和提示框。
* `browers` - 在浏览器之间切换。
* `elements` - 验证元素是否存在,具有预期的内容或属性。
* `finders` - 没有实际的步骤 - 只是一些辅助函数来查找元素。
* `forms` - 与表单字段交互 - 输入、聚焦、选择、填写等。
* `javascript` - 运行javascript并验证结果。
* `mouse` - 点击、悬停、移出、拖放。
* `navigation` - 访问URL,后退、前进、刷新。
* `page` - 页面标题、URL、完整HTML。
* `common` - 一些实用步骤,如等待和浏览。
* `djangoify` - 以Django为中心的步骤,帮助进行URL反转等。
* `everything` - browser、common和django。

地形
--------

* `common` - 目前没有。
* `djangoify` - 为Django设置/拆除测试数据库,包括如果安装了south,则包括south迁移。
* `browser` - 在 `world.browser` 设置浏览器。使用firefox。
* `firefox` - 在 `world.firefox` 上设置一个firefox浏览器。
* `chrome` - 在 `world.chrome` 上设置一个chrome浏览器。
* `zope` - 在 `world.zope` 上设置一个zope浏览器(无javascript)。
* `everything` - 包括上述所有功能。


步骤语法
-----------

内置步骤设计为语法灵活,并实现了 splinter 所支持的所有操作。通常,最好的方法是阅读步骤以了解支持的内容。然而,对于 `elements`、`forms` 和 `mouse` 的部分,代码有些晦涩难懂,所以这里提供对这些部分如何工作的更好解释。

通常,当你与表单、页面元素或鼠标交互时,可以将 Salad 的步骤视为包含一个主语和一个动作。

主语
--------

对于页面中的任何元素,你可以使用以下表达方式来指定主语

```gherkin
<action> 命名为 "my_name" 的 <element|thing|field|textarea|radio button|button|checkbox|label>
<action> id 为 "my_id" 的 <element|thing|field|textarea|radio button|button|checkbox|label>
<action> CSS 选择器为 ".my_css_selector>" 的 <element|thing|field|textarea|radio button|button|checkbox|label>
<action> 值为 "my value" 的 <element|thing|field|textarea|radio button|button|checkbox|label>

```

如果你只是想寻找链接,可以使用

```gherkin
<action> 到 "http://someurl.com" 的链接
<action> 包含 "someurl.com" 的 URL 链接
<action> 文本为 "some text" 的链接
<action> 文本包含 "some t" 的链接
```



动作
-------

第二部分是动作。为了验证存在性和内容,可以使用以下动作

```gherkin
应该(不)看到 <subject>
应该(不)看到 <subject> 包含 "some text"
应该(不)看到 <subject> 精确包含 "some text"
应该(不)看到 <subject> 有一个名为 "attr_name" 的属性
应该(不)看到 <subject> 有一个名为 "attr_name" 的属性,其值为 "attr value"
应该(不)在页面的任何地方看到 "some text"
```

为了与表单交互,可以使用以下

```gherkin
在 <subject> 中填写 "some text"
(缓慢地)将 "some text" 输入到 <subject> 中
将 "some/file.name" 添加到 <subject> 上
从 <subject> 中选择名为 "option name" 的选项
从 <subject> 中选择值为 "option_value" 的选项
将焦点放在 <subject> 上
从 <subject> 上移除焦点
看到 <subject> 的值是(不是)"some text"
```

要使用鼠标,你有

```gherkin
点击 <subject>
将鼠标悬停在 <subject> 上
将鼠标移出 <subject>
双击 <subject>
右击 <subject>
将 <subject_1> 拖动到 <subject_2> 上
```


结合使用,这是一个非常灵活的系统 - 你可以说一些像这样的事情

```gherkin
假设我访问了 "http://www.my-test-site.com"
当我从名为 "shops" 的单选按钮中选择名为 "Cheese" 的选项时
并且我点击第一个包含 "Go" 文本的链接
那么我应该看到一个具有 CSS 选择器 ".cheese_shop_banner" 的元素
并且我不应该在页面的任何地方看到 "MeatCo"。
```

使用其他浏览器
--------------------------

Salad 内置了对 chrome、firefox 和 zope 的无头 JavaScript 免疫浏览器的支持。Firefox 是默认浏览器,但使用其他浏览器也很简单。要切换浏览器,你只需

```gherkin
假设我正在使用 chrome
```


技巧和窍门
===============

保持测试的有序性
-----------------------

如你所见,我们使用将步骤文件命名为与功能文件相同的约定,并在其后添加 "-steps"。到目前为止效果不错。对于 django 应用程序,也最容易在应用程序结构内保持每个应用程序的功能。

我们在使用 lettuce 的较大项目中还处于早期阶段,随着更好的建议出现,我们将乐意分享。如果你有建议,请在拉取请求中写下来,或打开一个问题!

使用 Chrome
------------

如果在测试中使用Google Chrome时遇到问题(并且您已安装),您可能需要下载并安装chrome webdriver。

如果您使用的是mac,您可以

```bash
brew install chromedriver
```

否则,您可以在以下链接中找到适用于您操作系统的版本:http://code.google.com/p/chromium/downloads/list

Django和South
----------------

Salad与Django和South配合良好,但并不要求使用它们。

将django步骤和地形包含到您的步骤和地形中,您就设置完成了。`manage.py harvest`和所有lettuce的好东东都应该正常工作。

**请注意**:如果您使用`staticfiles`提供静态媒体,您需要将`-d`传递给harvest以在调试模式下运行(并启用静态媒体。)


内置步骤是一个助手,而不是拐杖
----------------------------------------------

Cucumber和salad通过允许我们用自然的人类语言编写测试,使BDD变得美丽。请不要让salad的内置功能决定您的测试阅读方式。它们只是为了方便,如果它们使用的语法符合您的场景需求。Gherkin语法的巨大优势之一是能够创建一个读作`然后我应该看到我已经登录`的场景。不要失去这种美丽!


更新和路线图
===================

路线图
-------

我们使用salad来测试我们的项目,它是一个相对较新的组件。因此,它将继续发展和改进。没有具体的开发路线图 - 任何使编写BDD测试更简单、更快的任何事情都可以上桌。欢迎提交拉取请求!


**0.5(计划中)**

** `SALAD_SUBJECT_GLOSSARY` - 允许对主题进行项目特定的扩展。例如,您可以将`'the submit button'`映射到`'the element with the css selector ".submit_btn"'`,并用于点击、鼠标悬停等,而无需为每个排列编写特定的步骤。


最近更新(完整日志在CHANGES中)
------------------------------------

*0.4.14*

**切换到了我的lettuce分支,它正确设置了测试数据库。一旦合并,将切换回主分支lettuce!**
**修复了django导入**


**0.4.12**(及其以上版本)

**修复了mysql和其他数据库的db安装错误。现在通常工作!**
**版本升级**


*0.4.8*

**修复了django teardown的bug**

*0.4.7*

**Travis-ci集成**

*0.4.6*

**在链接查找上保持一致的语法**
**修复了Django + Postgresql支持**
**测试了更多键**

*0.4.4*

**South迁移现在基于SOUTH_TESTS_MIGRATE**


*0.4.3*

**添加了iFrame上下文切换步骤**

*0.4.2*

**修复了取消提示代码**
**澄清了属性正则表达式以正确匹配**
**将js测试移动到本地文件(不需要互联网连接。)**


*0.4.1*

**修复了查找元素代码中的bug,用于单个链接**

*0.4*


**对内置步骤进行了重大升级。现在几乎为Splinter中可以做的任何事情都提供了步骤,语法友好且一致!**
**为salad的所有步骤编写了功能。这是100%的测试覆盖率,各位!**
**`browser`步骤现在是一个模块,按交互区域(表单、鼠标等)组织。`import steps.browser`将仍然按以前的方式运行。**
**为未来打基础:`I access the url`现在已弃用,取而代之的是更友好的`I visit the url`。"visit"、"access"和"open"都将成为将来访问网页的有效操作。**
**向后不兼容:`should see "some text"`的含义已更改。**

**如果您指的是 *此文本应出现在此页面的HTML中*,请使用`should see "some text" somewhere in the page`。**
**如果您指的是 *我将要描述的元素应在页面中并且可见*,请使用`should see <subject>`**
* 注意:本地区不会出现向后不兼容的更改——目前,我相当确定我知道沙拉被使用的地方,所以我更愿意跳过并确保一切正确。未来的向后不兼容更改将通过弃用计划进行。




致谢
========

所有艰苦的工作都是由编写 [lettuce](http://lettuce.it)、[splinter](http://splinter.cobrateam.info/) 和 [cucumber](http://cukes.info/) 的杰出人士完成的。我们使用这个包的目标是让设置甜美的BDD(行为驱动开发)变得极其简单。

lettuce 和 splinter 的所有版权和许可证归其作者所有,并且这个包(不包括它们的源代码)不对其代码提出任何主张。

salad 本身的代码致谢见作者文件。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

salad-0.4.14.tar.gz (19.8 kB 查看哈希)

上传时间 源代码