将Robot Framework与selenium2Library(webdriver)一起使用的利弊是什么?

评论

sqa.stackexchange.com/questions/8340/…

我浏览了上面粘贴的链接,但仅提及硒,我正在寻找与硒进行机器人框架VS TestNG集成

已对TEST NG和ROBOT进行了精确比较。对此细节表示赞赏!

#1 楼

已创建TestNG作为单元测试中JUnit的替代方法。 br />

TestNG很容易集成到Maven周期中,并且主要用于数据驱动测试中。测试用例可以更容易地分组
可以进行并行测试
TestNG仅支持Java(因此这是限制之一)

机器人框架


Robot Framework允许进行关键字驱动测试,甚至进行行为驱动。
Robot Framework最初使用Python编写,但最新版本也具有Java绑定。 Robot具有python,java和/或任何.NET语言的高度可扩展性。
Robot Framework是一个通用的,独立于应用程序和技术的框架。
Robot可用于REST和SOAP服务测试,数据库测试

两者都有出色的报告框架,并且都可以像Jenkins一样附加到各种持续集成中。应该确定测试所需的功能,然后再使用它们。

评论


我想补充一点,RF不支持像Intellij这样的流行IDE中的重构和调试。

– dzieciou
19年6月13日在18:20

另外,作为外部DSL,它没有母语可以依赖,因此它必须重塑许多通用行为,例如循环,条件子句等:modelling-languages.com/internal-external-dsls

– dzieciou
19年6月13日在18:21

#2 楼

我认为问题应该是:Java WebDriver + TestNG与机器人。

我从事过Java + TestNG和RobotFramework的工作。这是我的要点分析。

易于使用


TestNG:您需要了解Java和ANT / Maven,记录器以及更多库(取决于您的库)。需要)。
机器人:基本编程语言在任何语言中都足够。您可以训练您的手动测试团队。

获胜者:机器人

代码编写


TestNG:基本上是Java。与Robot相比,需要花费更多时间。您需要编写一些与您的业务无关的额外行。例如,类的定义,作用域等。但是,编写代码的专家在这里可能会提出争辩。
机器人:仅编写您所需的自动化内容即可。 (标准的登录页面代码不得超过6行)

获胜者:机器人

并行执行



TestNG:可能。您可以使用Selenium Grid或在独立计算机上进行操作。
机器人:可能(使用pabot)。您也可以使用硒网格。那很容易。但是,您不会获得像Robot一样好的日志。我猜屏幕截图默认情况下不会捕获,除非您实现一些逻辑。您需要使用Log4j进行详细的日志记录。
机器人:整洁的日志和报告。随附屏幕截图。

获奖者:机器人

灵活性


TestNG:这是Java。天空是极限。
机器人:很多事情你做不到。 if-else(仅当阻塞时)。没有嵌套循环。还有很多事情,如果您需要复杂的编码。对于很多事情,您可以使用Python编写自定义关键字。

获胜者:TestNG(Java)

框架设计


TestNG :您必须设计框架。
机器人:这是一个易于使用的框架

获胜者:机器人

资源可用性


TestNG / Java:很容易找到认识Java / TestNG的人。如果您不懂Java,则开发团队中有很多开发人员可以帮助手动测试人员开始。但是,代码质量将取决于谁编写代码。
RobotFramework:很难找到从事RF工作的人。但是,与Java相比,学习曲线非常短。所有的人都需要知道任何编程知识。如果有人要编写定制的库,则需要Python的基本知识。

获胜者:Java

结论

在大多数情况下,我觉得Robot会做你想做的任何事情。它的支持库随着时间的推移而增加。您可以轻松进行Web,API,移动,SSH,DB和许多类型的自动化,而无需了解太多详细信息。

#3 楼


机器人是关键字驱动的(主要是)框架,而testng是数据驱动的框架
您需要为testng自行设计完整的框架,在RF中,您可以从机器人框架本身中获得很多。 br />与testNG相比,在RF中编写测试用例要容易得多。

4.要完成测试,用户可以在RF中设计自己的自定义关键字。


RF可以支持任何语言,对于testNG来说,用其他语言而不是Java编写代码几乎没有什么困难。

6.在RF中,testNG用户的报告要容易得多需要编写自己的代码来正确报告结果。

7.testNG需要3个第三方工具来实际创建,运行和生成清晰的报告,与RF相比

#4 楼

除了出色的答案外,我还要提及机器人框架(RF)的一些缺点。

机器人框架提供了外部DSL(特定于域的语言)。因此,外部DSL具有以下局限性:


没有要依赖的母语,因此它们必须重塑许多通用行为。


这意味着,通用语言(例如Python或Java)在Robot Framework中已经存在多年了,它们并不存在或看起来不成熟。作为您的语言,它会促进许多不良做法,例如全局变量。全局变量之所以不好是因为:


由于每个函数都可以访问这些变量,因此越来越难弄清哪个函数实际读写这些变量。


您不会认为这是一个小项目,但是随着您的测试基础开始发展,您将很难理解和重构代码。

这里我们来第二个限制。 RF没有像Intellij这样的流行IDE的支持,这使得调试和重构测试变得困难。当您想重构RF测试已经使用的Python函数或参数时,这将成为一场噩梦。您将需要在RF测试和Python固定装置中手动重构它们。

机器人框架也过于冗长,因此难以阅读。这是一个简单循环的示例:

@{ITEMS}    Create List    Star Trek    Star Wars    Perry Rhodan
:FOR    ${ELEMENT}    IN    @{ITEMS}
\    Log    ${ELEMENT}
\    ${ELEMENT}    Replace String    ${ELEMENT}    ${SPACE}    ${EMPTY}
\    Log    ${ELEMENT}


在Python中可能仅仅是:

items = ['Star Trek', 'Star Wars', 'Perry Rhodan']
for element in items:
  element = element.replace(' ', '')
  log(element)


更清晰,不是吗? RF在命名变量时滥用了大写字母,使文本难以阅读。

RF的语法,外部DSL受到限制。但是,RF的其他功能(例如日志记录,大量固定装置(Selenium集成,REST API客户端等))可能会有用。而且您仍然可以在没有RF语法负担的情况下使用这些装置,因为它们是用Python编写的。只需用Python编写测试即可。

评论


循环等确实是RF的最差部分,但是...可以轻松地将坏部分移到python一侧,也可以只使用eval inline。还有一个正在进行的工作(对于rf 4.0 afaik)用于实现适当的解析器,这应该有助于语言构造。第三,关于RF代码的示例对循环使用了非常古老的语法。

– rasjani
19-6-28在9:59



@rasjani同意。我主要关注RF的不良部分。当然可以将这一部分移至Python,但是为什么要将其完全引入到Robot Framework中呢?这只会鼓励不良做法。

– dzieciou
19年6月28日在10:08

@rasjani使用eval内联是...一种不好的做法,恕我直言。它将两种语​​言和抽象混合在一个文档中,这会使阅读测试变得更加困难。

– dzieciou
19年6月28日在10:24

所以从本质上讲,您的逻辑还意味着人们不应该使用任何关键字库,因为它们通常是用python编写的,因此这会鼓励不良做法吗?有一种说法是只有一把锤子适合这里。某些情况下,以“真实”编程语言实现更有意义,并将它们作为通用关键字公开以提高可读性和可维护性。关于eval,这只是您的摘要所在的示例。像在任何代码中一样,总是有多种方法来归档事物,并且最佳方法视情况而定。

– rasjani
19年6月28日在10:27

例如,可以将评估部分放在单独的关键字/资源文件中,并使其“可重用”并在实际测试中隐藏。因此,我留下的评论只是强调指出,事情并没有像您的评论所描绘的那样黑白。与个人无关。

– rasjani
19年6月28日在10:29