Frameworks Spock+GEB与机器人框架

Frameworks Spock+GEB与机器人框架,frameworks,spock,robotframework,geb,Frameworks,Spock,Robotframework,Geb,以前我使用Robot框架自动测试应用程序,但一个新客户要求注意Spock+GEB。我从未使用过它,但我需要快速比较这两种工具并做出选择。请帮助我了解它们之间的区别以及各自的优缺点。我告诉您关于Geb,我使用gebish测试web应用程序超过6个月。这就是他的全部好处: 跨浏览器自动化 类似jQuery的API 页面对象 不同步性 测试 构建系统集成 现在,请详细介绍每一项 跨浏览器自动化 Geb利用WebDriver库实现浏览器自动化。这意味着Geb可以与WebDriver使用的任何浏览器一起工

以前我使用Robot框架自动测试应用程序,但一个新客户要求注意Spock+GEB。我从未使用过它,但我需要快速比较这两种工具并做出选择。请帮助我了解它们之间的区别以及各自的优缺点。

我告诉您关于Geb,我使用gebish测试web应用程序超过6个月。这就是他的全部好处:

跨浏览器自动化 类似jQuery的API 页面对象 不同步性 测试 构建系统集成 现在,请详细介绍每一项

跨浏览器自动化 Geb利用WebDriver库实现浏览器自动化。这意味着Geb可以与WebDriver使用的任何浏览器一起工作,WebDriver使用的浏览器列表也在不断增加

支持的核心浏览器包括:

火狐 Internet Explorer 谷歌浏览器 歌剧 还有以下方面的实验支持:

Android上的Chrome iPhone和iPad上的Safari WebDriver还支持远程驱动程序。这允许您自动在另一台机器上运行浏览器!这意味着您可以轻松地在Mac或Linux机器上运行针对IE浏览器的测试套件,反之亦然

类似jQuery的API Geb从jQuery获得灵感,提供了一种简洁有效的获取内容的方法。这称为导航器API

美元功能可以在任何地方使用,根据CSS选择器、属性匹配器和/或索引选择内容

// CSS 3 selectors
$("div.some-class p:first[title='something']")

// Find via index and/or attribute matching
$("h1", 2, class: "heading")
$("p", name: "description")
$("ul.things li", 2)

// 'text' is special attribute for the element text content
$("h1", text: "All about Geb")

// Use builtin matchers and regular expressions
$("p", text: contains("Geb"))
$("input", value: ~/\d{3,}-\d{3,}-\d{3,}/)

// Chaining
$("div").find(".b")
$("div").filter(".c").parents()
$("p.c").siblings()
页面对象 Geb对页面对象模式具有一流的支持,它利用Groovy的DSL功能,使开发人员能够以简洁、可维护和可扩展的方式轻松定义页面的有趣部分

import geb.Page

class LoginPage extends Page {
    static url = "http://myapp.com/login"
    static at = { heading.text() == "Please Login" }
    static content = {
        heading { $("h1") }
        loginForm { $("form.login") }
        loginButton(to: AdminPage) { loginForm.login() }
    }
}

class AdminPage extends Page {
    static at = { heading.text() == "Admin Section" }
    static content = {
        heading { $("h1") }
    }
}
不同步性 现代web页面充满了异步操作,比如AJAX请求和动画。Geb为这一生活事实提供了内置支持

任何内容查找或操作都可以包装在waitFor子句中

waitFor { 
    $("p.status").text() == "Asynchronous operation complete!"
}
这将在一定时间内持续测试该条件,该时间是可配置的,直到它通过。同样的技术也可以用于等待内容,而不必等待内容具有某些特征

def dynamicParagraph = waitFor { $("p.dynamically-added") }
dynamicParagraph.text() == "Added dynamically!"
您还可以定义页面对象的内容DSL中应隐式等待的内容

import geb.Page

class DynamicPage extends Page {
    static content = {
        dynamicParagraph(wait: true) { $("p.dynamically-added") }
    }
}
根据此定义,当请求dynamicParagraph时,Geb将隐式地等待一定的时间以使其出现

测试 Geb通过Cuke4Duke为流行的测试框架(如Spock、JUnit、TestNG、EasyB和Cucumber)提供集成模块

虽然Geb在所有这些框架中都能很好地工作,但它在Spock中却非常出色。Spock是一个创新的测试框架,非常适合与Geb一起使用。使用Spock+Geb,您可以轻松地获得非常清晰、简洁且易于理解的测试规范

import geb.Page
import geb.spock.GebSpec

class LoginSpec extends GebSpec {
    def "login to admin section"() {
        given:
        to LoginPage

        when:
        loginForm.with {
            username = "admin"
            password = "password"
        }

        and:
        loginButton.click()

        then:
        at AdminPage
    }
}
构建系统集成 Geb易于集成到任何构建系统中,并提供与以下构建/项目系统集成的信息和示例:

格拉德尔 圣杯 专家 您可以在这里查看我的示例Spock+GEB:

请在此处阅读有关geb的更多信息:


谢谢

非常感谢您如此完整和详细的回复。但是,不幸的是,我在所有这些方面都是一个彻头彻尾的傻瓜,以下问题对我来说仍然很重要:1。GEB如何与斯波克互动?我查看了官方网站,但还没有找到我需要设置什么来使用Geb+Spock的信息?如何开始在我的电脑上编写一个最简单的测试。据我所知,所有的测试都是用groovy编写的,目的是测试应用程序是用Java编写的。但我不明白与机器人框架相比,这有什么优点/缺点?感谢您的帮助。回答:1首先,您需要在您的PCgradle、maven、grails上安装构建自动化,我使用gradle,因为-DSL语言。之后,转到geb主页,查看config build filepom.xml-maven、build.gradle-gradle 2所有测试是如何在groovy-99%Java上编写的,在测试中,您可以检查GUI Web驱动程序+其他检查DB、检查REST和其他。我认为这是这个框架的优点。看看我的简单例子。你能分享一下你的选择和第一选择是什么吗。在对UI进行冒烟测试时,很容易启动并快速获得结果。它通过python脚本进行了扩展,因此我们还能够通过web服务成功地测试加载xml文件,并将应用程序中的数据与DB/file中的数据进行比较。现在我们将切换到Geb+Spock。这更难理解。使用Geb+Spock不是我的决定,而是项目方向。我刚刚开始研究它,这种方式看起来也同样有希望。我还发现了从LoadUI启动geb脚本进行负载测试的可能性,因此,这是一个很好的优势;并继续在最近的机器人上使用机器人。我们发现的一个好处是 我们的测试团队能够轻松地编写机器人测试,因此我们的测试现在由测试人员和开发人员共同编写,而GEB则完全由开发人员编写。对于我们来说,我们的测试人员现在正在使用Robot进行其他项目,主要是测试Web服务,因此他们可以轻松地在项目之间迁移,而不必为每个项目学习新的工具。编写机器人测试很简单,而且很容易让它们跨浏览器运行,这也很好。