一个很好的BDD配料组合

lettuce_utils的Python项目详细描述


生菜是一个有用的组合,一些伟大的bdd包,如生菜和碎片,调味料与一些常见的模块。它的目标是让编写验收测试变得非常有趣。

莴苣实用程序最初被命名为salad,在[wieden+kennedy]开发(http://wk.com),随后在bsd许可下被[open sourced]开发(https://github.com/wieden-kennedy/salad)。

[![构建状态](https://secure.travis-ci.org/lettuce utils/莴苣utils.png?branch=master)(http://travis ci.org/lettuce utils/莴苣utils)


这是一个关于莴苣的悬而未决的请求。在安装完成之前,您必须手动安装它。
pip install git+https://github.com/skoczen/莴苣.git egg=莴苣
````

``python
``installed廑apps+=("莴苣.django",)
```



/>
沙拉主要是[莴苣](http://莴苣.it/)。所以,你应该兴致勃勃地使用他们的[伟大的文档](http://莴苣.it/contents.html)。如果你正在与浏览器交互,你可以通过很棒的[碎片](https://github.com/cobrateam/splinter)来完成,他们的[文档](http://splinter.readthedocs.org/)也很棒。


salad 101
==


-——

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

``bash
mkdir features
```

>1。在feature s目录中,创建一个'our website is up.feature'文件,其中包含以下内容:

``小黄瓜
feature:确保莴苣有效,w+k的网站加载
,以确保莴苣作为开发人员有效
我打开了wieden+kennedy网站在使用生菜的情况下:打开w+k网站是可行的,只要我访问url"http://www.wk.com/"
当我环顾四周时,我就会在页面的某个地方看到"wieden+kennedy"
````







运行您的第一个生菜实用程序测试
而且W+K的网站加载了功能/我们的网站启动了。功能:1
以确保莴苣实用程序正常工作功能/我们的网站启动了。功能:2
作为开发人员功能/我们的网站启动了。功能:3
我打开了Wieden+KEnnedy网站使用生菜实用程序功能/我们的网站已启动。功能:4

场景:打开W+K网站Works功能/我们的网站已启动。功能:6
如果我访问URL"http://w w w.w k.com/"功能/我们的网站已启动。PY:8
当我环顾四周的功能/我们的网站是上升的步骤。py:80
然后我应该会看到"wieden+kennedy"在页面的某处的功能/我们的网站是上升的步骤。py:37


1个功能(1个通过)
1个场景(1个通过)
3个步骤(3个通过)
`````r/>
很简单。

salar命令行参数
本地安装。例如
>;如果您得到"生菜实用程序-警告-启动chrome时出错:消息:"chromedriver可执行文件需要在路径中可用。`
>;请确保读取e(使用chrome)[使用chrome]部分。
>;`莴苣实用程序-h'将列出所有浏览器驱动程序。

如果您没有在本地安装浏览器,则可以指定selenium
服务器。For example, if you use SauceLabs and want to test on the iphone:

```
lettuce_utils --browser iphone --remote-url http://username:######AA-####-####-A#A#-#A###AAA####@ondemand.saucelabs.com:80/wd/hub
```

> Replace username with your SauceLabs account name and the password是您的访问密钥。还要注意,除了firefox和chrome之外,浏览器的驱动程序有时会出现不一致的行为。

地形源文件是您最好的信息源,但这里有一个莴苣实用程序的内置:

steps
---


*`browser`-分解成子模块。导入"browser"将获得所有信息。
*`alerts`-处理警报和提示。
*`browsers`-在浏览器之间切换。
*`elements`-验证元素是否存在,是否具有所需的内容或属性。
*`finders`-没有实际步骤-只是帮助函数来查找元素。
*`forms`-与表单域交互-键入、聚焦、选择、填写等。
*`javascript`-运行javascript并验证结果。
*`mouse`-单击、鼠标悬停、鼠标拖出、拖放。
*`navigation`-访问url、后退、前进、刷新。
*`page`-页面标题,url,完整的html。
*`common`-一些实用步骤,比如等待和环顾四周。
*`djangoify`-django关注的步骤,有助于url反转等。
*`everything`-浏览器,common和django。

terrans
--

*`common`-暂时没有。nt.
*`djangoify`-设置/删除django的测试数据库,包括安装了south的south迁移。
*`browser`-在"world.browser"设置浏览器。使用Firefox或
命令行选择的浏览器。
*`Everything`-包括以上所有内容。



step syntax
----


>内置步骤在语法上设计灵活,并实现Splinter支持的所有操作。一般来说,最好的办法就是简单地阅读步骤,看看支持什么。然而,对于"elements"、"forms"和"mouse"的部分,代码有点不透明,因此这里有一个更好的解释来说明这些部分是如何工作的:

通常,当您与表单、页面元素或鼠标交互时,可以将生菜的步骤看作是有一个主题和一个动作。r/>
subjects
--

具有"我的ID"的"我的ID"
<;action>;lt;lt;action>;lt;lt;element thing;field texarea单选按钮;具有css选择器".my css css选择器"
<;action>;具有css选择器".my css选择器"
<;action>;具有"我的css css选择器"的"我的css css选择器"的>;>;"
<;lt;action>复选框标签>;如果您只是在寻找一个链接,那么可以使用值"my value"

````


``gherkin
<;action>;指向"http://someurl.com"的链接
<;action>;指向包含"someurl.com"的url的链接那?)文本"some text"
<;action>;与包含"some t"
````




actions
----

的文本的链接第二部分是actions。要验证是否存在和内容,可以使用以下操作:

``小黄瓜
应该(不)请参见<;主题>;
应该(不)请参见<;主题>;包含"某些文本"
应该(不)请参见<;主题>;完全包含"some text"
应(不)查看<;subject>;具有名为"attr_name"的属性
应(不)查看<;subject>;具有名为"attr_name"的属性,值为"attr value"
应(不)查看页中任何位置的"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>;
```


/>
``小黄瓜
如果我访问"http://www.my-test-site.com"
当我从名为"商店"的单选按钮中选择名为"cheese"的选项时,我单击包含"go"
文本的第一个链接,然后我将看到一个带有css选择器的元素。"cheese-shop-banner"
页面上任何地方都看不到"Meatco"。
```

firefox是默认的,但是使用另一个浏览器非常简单。要切换您使用的浏览器,只需键入:

``gherkin
如果我使用chrome
```



tips and tricks
==



与功能文件相同,附加了"-steps"。到目前为止效果很好。对于django应用程序,在应用程序结构中保留每个应用程序的功能也是最简单的。

如果您有建议,请在请求中键入,或打开问题!

使用chrome
----


否则,您可以在http://code.google.com/p/chromium/downloads/list找到您的操作系统:http://code.google.com/p/chromium/downloads/list


和地形,你们都准备好了。` manage.py harvest和所有的莴苣都应该正常工作。

*gotcha alert:*如果您正在为带有"staticfiles"的静态媒体提供服务,则需要将"-d"传递到harvest,以调试模式运行(并启用静态媒体)。



-----------------------------


黄瓜和生菜实用程序允许我们用自然的、人类语言编写测试,从而使bdd变得漂亮。请不要让生菜的内置驱动你的测试结果。如果它们使用的语法符合场景的需要,那么它们是为了方便起见。gherkin语法的一个重要优点是能够创建一个"然后我应该看到我已经登录"的场景。别失去那美丽!


这仍然有效,是一种选择Ion,但要使其正常工作,必须在
features文件夹中包含
`steps.py`文件,其中包含'from莴苣utils.steps.everything import*',以及
`terrans.py`文件,其中包含'from莴苣utils.steps.terrans import*'。


测试我们的项目,这是一个相当新的组件。因此,它将继续发展和改进。没有一个特定的开发图-任何能使编写bdd测试更简单、更快的东西都在表中。欢迎拉取请求!


*0.5(计划)*

*`沙拉主题词汇表'-允许对主题进行项目特定扩展。例如,您可以将"submit button"映射到带有css选择器的"the element"。submit"btn",并将其用于单击、鼠标悬停等操作,而无需为每个置换编写特定步骤。





生菜,它能正确地建立一个测试数据库。合并后将切换回干生菜!
*修复的django导入


*0.4.12*(及以上)


*针对mysql和其他dbs的db安装错误修复。现在一般都能用了!
*version bump




*0.4.8*







*0.4.7*



*travis ci集成



*0.4.6*



*fixedjango+postgressql支持。
*更多的关键测试。






*0.4.4.4.4*











*南部迁移现在基于南部迁移测试/>

*0.4.3*


*增加了iframe上下文切换的步骤。

*0.4.2*

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


*0.4.1*

*修复了为单个链接查找元素代码的错误。

*0.4*



*对包含的步骤进行大规模升级。现在有步骤几乎所有你可以做的分裂,友好的,一致的语法!
*为莴苣实用程序的所有步骤编写的功能。这是100%的测试覆盖率,伙计们!
*`browser`步骤现在是一个模块,按交互区域(窗体、鼠标等)组织。`导入步骤。browser仍将保持以前的行为。
*以后的证明:`I access the url`现在已被弃用,取而代之的是更友好的'I visit the url'。"访问"、"访问"和"打开"都是向前访问网页的有效操作。
*向后不兼容:`应该看到"某些文本"`已经改变了含义。

*如果您的意思是*此文本应该出现在该页的HTML中的某个位置*,则使用"应该看到"页面中的某个位置的"某些文本"。
*如果您的意思是*元素我将要描述的应该在页面中并且可见*,请使用"应该看到主题"`
*注意:向后不可比较的更改不会是这里的标准-目前,我非常确定我知道莴苣正在使用的所有地方,所以我宁愿跳一跳,把事情做好。未来向后不兼容的更改将经历一个弃用计划。






credits:
==


我们使用这个包的目的是让一切都变得非常简单,并运行一个甜蜜的bdd设置。

文件,

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我想访问同一类的不同函数中的函数变量   创建字段/值哈希映射的java反射   java Velocity工具向后兼容性?   cmd JAVA运行时错误:发生JNI错误   java spring引导示例hateoas不工作   java为什么Android Studio和gradle可以使用不同的类路径进行单元测试?   java Selenium Firefox驱动程序初始化   java如何在jar中重新定位gradle依赖项的包   java为什么我的单线程hello world应用程序使用22个OS线程?   正则表达式替换Java字符串中的特殊字符   在任何派生类的构造函数之后运行方法的java   java从输入字符串中找出日期   带有libGdx(Java)音乐的安卓studio可以在Android模拟器上工作,但不能在桌面上工作   java我在getconnection的参数方面有错误吗?   java使用JFileChooser访问选定文件   java如何将Json解析为另一个活动   java使用Resources for html和rest server   java更新列表,列表内容来自循环中的方法   java如何在GLSL中读取完整范围的32位整数纹理