Python有像Capybara / Cucumber一样的东西吗?

时间:2012-02-28 16:40:20

标签: python functional-testing acceptance-testing

Ruby在Selenium之上有一个很棒的抽象层,名为Capybara,您可以使用它进行功能/验收/集成测试。它还有另一个名为Cucumber的库,它更进一步,让你真正用英语编写测试。

这两个库都是建立在Selenium之上的,可以用来测试任何主要的浏览器,但是由于它们的抽象层,使用它们编写测试非常容易(好吧,就像功能测试一样简单)。

我的问题是:Python有类似的东西吗?我发现Pythonistas使用各种工具进行功能测试但是......

A)Splinter:不使用Selenium(并且没有IE驱动程序)

- 编辑 - 看来Spliter现在使用Selenium(见下面的答案)。

B)Alfajor:一年多来没有更新;看起来已经死了

C)Selenium(原始):很多人似乎直接使用Selenium,但似乎抽象层可以使它更容易使用

那么,对于Python来说,有没有人知道类似Capybara的东西,或者更好的Cucumber类似的东西(它不需要实际使用Selenium,但它需要支持所有主流浏览器)?

*编辑*

对于那些不熟悉Capybara的人来说,它基本上只是添加了一个API,因此您可以执行以下操作来代替正常的Selenium API:

When /I sign in/ do
  within("#session") do
    fill_in 'Login', :with => 'user@example.com'
    fill_in 'Password', :with => 'password'
  end
  click_link 'Sign in'
end

它被Cucumber使用,让你进一步抽象(几乎到英语):

Scenario Outline: Add two numbers
Given I have entered <input_1> into the calculator
And I have entered <input_2> into the calculator
When I press <button>
Then the result should be <output> on the screen

Examples:
| input_1 | input_2 | button | output |
| 20 | 30 | add | 50 |

我会喜欢Python Cucumber等价物,但即使只是Capybara等效物也会有所帮助。

7 个答案:

答案 0 :(得分:22)

您可以使用Cucumber测试Python代码 - 有关详细信息,请参阅github上的Cucumber wiki

如果您需要纯Python解决方案,请查看Lettuce。我从来没有使用它,但有一个非常有用的博客文章关于它和分裂here

答案 1 :(得分:19)

一个。黄瓜喜欢:(英文喜欢)

  • 生菜(接近小黄瓜)或
  • 表现(接近小黄瓜)或
  • Robotframework(基于方法关键字) (附加信息:RF大于英文标准。它基于关键字并提供大量辅助方法和内置库。外部库的伟大生态系统。任何python脚本也可以修改并与RF一起使用)
  • Freshen(Approach Gherkin)或
  • Pea(Approach Gherkin)或
  • RedwoodHQ(基于方法关键字) (RedwoodHQ具有大于&#39; English-Like&#39;标准的功能,并封装了以下功能:基于关键字,基于Web的测试框架,支持python作为语言之一等等。 关于RedwoodHQ的其他信息:理论上它可能,所有现有的机器人框架内置库和所有机器人框架外部测试库或任何python库,可以从这个基于Web的测试框架调用或使用,只需稍加修改)< / p>

  • Gauge(Gherkin方法): python参考:https://gauge-python.readthedocs.io/en/latest/index.html


在Cucumber下面,人们可能会像Capybara那样隐藏/分组许多硒行为的抽象层


B中。 Capybara喜欢:(抽象:隐藏/群体行动)

例如,单击一个元素,它足以提供像click(locator)这样的命令,而不是使用原始selenium api,其中需要找到一个元素,然后单击。

下面的可选库中存在更多这样的抽象
  • 选项-1(见下文)
  • 选项-2(见下文)
  • 选项-3(见下文)
  • 选项-4(见下文)
  • 选项-5(见下文)
  • 选项-6:氦气(来自其他人的答案/评论)
  • 选项-7 :(见下文)
  • 选项-8 :(见下文)
  • 选项-9 :(见下文)
  • 选项-10 :(见下文)
  • 选项-11 :(见下文)
  • 选项-12 :(见下文)
  • 选项-13 :(见下文)

我的研究:差不多有六打了。活跃的,b。成熟的c.developed选项。

  

python来自包含各种电池!!


选项-1:Selenium2Library

Github网址: https://github.com/rtomac/robotframework-selenium2library

发展论坛: 活跃

目的: robotframework的众多库中的一个,也可以用作#34;独立的&#34;框架库(请在下面查看使用情况)。

思想:

  • 它提供了对selenium的抽象
  • 输入此库中方法的参数要简单得多。例如,库提供的抽象隐藏了许多用于查找元素的不必要的细节。有关详细信息,需要了解库
  • 虽然可以使用机器人包的实用程序,但可以在机器人框架上下文之外使用此库而无需任何修改。 (你的作业是用这个lib做进一步的实验,在这个笔记上!)
  • 因此,可以用作框架的独立库。

用法:

  

pip install robotframework-selenium2library

导入你的ipython或空闲控制台并开始播放 例如:

>>from Selenium2Library import Selenium2Library
>>start_testing= Selenium2Library()
>>start_testing.create_webdriver("Firefox")
>>start_testing.go_to("http://www.google.com")
>>.
...so on

选项-2:Pageobjects

Github网址: https://github.com/ncbi/robotframework-pageobjects

发展: InActive(没有显示最新版本的塞子)

目的: robotframework的其中一个库。提供Selenium2Library上的页面对象抽象。可以作为框架的独立使用(请查看下面的使用方法),也可以与机器人框架一起使用。

思想:

  • 它提供了一个&#34;页面对象抽象&#34; Selenium2Library上的支持
  • 虽然可以使用机器人包的实用程序,但可以在机器人框架上下文之外使用此库而无需任何修改。 (你的作业是在这个笔记上做进一步的实验!)
  • 因此,可以用作独立库

用法:

  

pip install robotframework-pageobjects

e.g: 在ipython或idle do:

>>from robotpageobjects import Page
>>start_testing=Page()
>>start_testing.create_webdriver("Firefox")
>>start_testing.go_to("http://google.com")

选项-3:robotframework-pageobjectlibrary

Github Url: https://github.com/boakley/robotframework-pageobjectlibrary

发展: 活跃

希望作者支持LTS(长期支持):)),手指越过!!

用法:

  

pip install robotframework-pageobjectlibrary

思想:

  • NOT 可以在机器人框架上下文之外使用此库。对页面上下文处理方式的一个小改动将有助于在机器人框架环境之外使用这个库(这是你的作业,以了解如何!)

选项-4:Splinter

Github网址: https://github.com/cobrateam/splinter

发展论坛: 活跃

用法:的 splinter.readthedocs.org/en/latest/index.html

  

pip install splinter

在ipython或idle do:

>>from splinter import Browser    
>>browser = Browser()
>>browser.visit('http://google.com')
>>browser.fill('q', 'splinter - python acceptance testing for web applications')
>>browser.find_by_name('btnG').click()

选项-5:SST library

Github网址: https://github.com/Work4Labs/selenium-simple-test

发展: 功能完整/活动

用法:的 testutils.org/sst /

  

pip install -U sst

on ipython或idle do:

>>> from sst.actions import *
>>> start()

    Starting Firefox
>>> go_to('http://google.com')
    Going to... http://google.com
    Waiting for get_element

选项-6:helium 非开源(商业)

选项-7:holmium.core

Github网址: https://github.com/alisaifee/holmium.core

选项-8:wtframework

Github网址: https://github.com/wiredrive/wtframework

选项-9:webium

Github网址: https://github.com/wgnet/webium

选项-10:elementium

Github网址: https://github.com/actmd/elementium

选项-11:saunter

Github网址: https://github.com/Element-34/py.saunter

用法:saunter

选项-12:webdriverplus

Github网址: https://github.com/tomchristie/webdriverplus

用法:webdriverplus

评论: 存储库没有维护,但体面的参考

选项-12:Simple-Pageobject

Github网址: https://github.com/rama-bornfree/simple-pageobject/tree/master/PageObjectLibrary

评论: 围绕selenium2library构建的最简单的页面对象包装器。我是回购的所有者


<强>试验设置:

&#34;所有&#34;选项-1-13中的测试库;可以使用以下任何框架运行:Lettuce, Behave, Robotframework或者就此而言,任何单元测试框架(例如PyUnitNose)......等等。

测试框架通常用于管理测试用例,例如

  • 英文格式,如小黄瓜,关键字,表格等...
  • 报告测试运行
  • 挂钩到CI
  • 测试用例和测试套件的设置/拆除
  • 测试用例的标记
  • 可以考虑任何测试框架的其他功能

重要是指上述选项中图书馆的舒适度。

选项-5:就SST而言,它具有框架本身的功能,例如它可以生成报告并执行更多操作。

因此,在SST的情况下,库和框架的定义是模糊,具体取决于要从该包中使用的功能的范围


一些有趣的数学:

可以拥有良好错误丑陋测试设置=(测试框架和测试库+您的自定义代码夹在b / w框架和库中):

7 * 13 = 91种方式

选择最适合需要的组合(测试框架和测试库)!

我个人会选择Selenium2Library的机器人框架或带有一些pageobject库的Robot-framework

当然,我在关于机器人框架和Selenium2Library的帖子中倾向于并且偏向正确

答案 2 :(得分:12)

虽然OP对找到Python Cucumber等价物很满意,但是我在这里得到的是问题标题:Python的等效Capybara。虽然Cucumber使用Capybara,但Cucumber本身就是一个完全不同的“解决方案”,只是偶然与Capybara有关。

如果您正在寻找像Capybara一样的东西,而不必处理黄瓜,请查看splinter。我不知道问题发布时的真实情况,但Splinter现在建立在Selenium上,并支持其他引擎(Webkit,PhantomJS,zope.browsertest等),并支持视觉和无头测试。 / p>

答案 3 :(得分:9)

机器人框架怎么样?这太棒了。使用Selenium2Library,它可以很好地与SE2配合使用。 http://robotframework.org/

答案 4 :(得分:8)

现在确实存在一个Capybara本身的Python端口:

https://github.com/elliterate/capybara.py

您可以在此处找到其文档:

https://elliterate.github.io/capybara.py/

  

Capybara通过模拟真实用户与您的应用互动的方式来帮助您测试Web应用程序。它与运行测试的驱动程序无关,并且内置了Selenium支持。

答案 5 :(得分:7)

你检查过清新,还是豌豆?

豌豆不使用黄瓜的语法,但作者说这更容易 https://github.com/gfxmonk/pea

而且Freshen试图克隆Cucumber的语法和功能

https://github.com/rlisagor/freshen

答案 6 :(得分:3)

OP询问了Cucumber或Capybara的Python实现,但正如Jim {斯托华特在his answer指出的那样,Cucumber和Capybara是非常不同的东西。由于问题的标题是关于水豚,我将回答这个问题。

我是名为Helium的商业Selenium包装器的开发人员之一。与Capybara一样,它为Web自动化提供了一个非常高级的API。例如,这是一个更新您的Facebook状态的脚本:

from helium.api import *
start_chrome("facebook.com")
write(your_fb_email, into="Email or Phone")
write(your_fb_password, into="Password")
click("Log In")
write("Test", into="Update Status")
click("Post")

呼叫氦气可以随意调用Selenium。例如。我们可以通过以下方式扩展上述脚本:

# get_driver() returns the WebDriver created by start_chrome() above.
chrome = get_driver()
chrome.find_element_by_id('btnG').click()