【问题标题】:Debugging test cases when they are combination of Robot framework and python selenium当它们是Robot框架和python selenium的组合时调试测试用例
【发布时间】:2017-11-05 23:05:44
【问题描述】:

目前我正在使用带有 Nokia/Red 插件的 Eclipse,它允许我编写机器人框架测试套件。支持它的是 Python 3.6 和 Selenium。 我的项目名为“自动化”,测试套件位于.robot 文件中。 测试套件具有称为“关键字”的测试用例。

测试用例

创建新车辆

Create new vehicle with next ${registrationno} and ${description}
Navigate to data section

那些“关键字”是从 python 库中导入的,看起来像:

@keyword("Create new vehicle with next ${registrationno} and ${description}")
def create_new_vehicle_Simple(self,registrationno, description):
    headerPage = HeaderPage(TestCaseKeywords.driver)
    sideBarPage = headerPage.selectDaten()
    basicVehicleCreation = sideBarPage.createNewVehicle()
    basicVehicleCreation.setKennzeichen(registrationno)
    basicVehicleCreation.setBeschreibung(description)
    TestCaseKeywords.carnumber = basicVehicleCreation.save()

问题是当我运行测试用例时,在日志中我只能得到整个 python 函数的结果,通过或失败。我看不出它在哪一步失败——是在这个函数的第一步还是第二步。

对于这种情况,是否有任何插件或其他解决方案能够查看哪个确切的 python 函数通过或失败? (当然,解决方法是在 TC 中为每个函数使用一个关键字,但这不是我喜欢的)

【问题讨论】:

  • 它是这个线程和其他线程的副本。提问前请先搜索论坛。 stackoverflow.com/questions/43974104/…
  • 这不是同一个问题。如果我在论坛找到了解决方案,为什么还要麻烦注册和写这个问题?在将其标记为重复之前,请仔细阅读问题并与其他问题进行比较。再一次,您提到的问题和解决方案对我的问题没有帮助。
  • 所以你说的是你接受的这个解决方案与你提到的帖子中的两个人提供的不同吗?请在提出问题之前阅读指南
  • 链接问题与同一个根本问题相关并不是直截了当的。相同的解决方案并不意味着最初的问题是相同的。我什至会说这个问题比其他问题更适合未来的搜索,因为在这里你拥有描述调试机器人时常见问题的所有内容 - 调试仅适用于机器人级别,如何深入研究Python 的东西。

标签: eclipse python-3.x selenium robotframework


【解决方案1】:

如果您需要“进入”python 定义的关键字,则需要将 python 调试器与 RED 一起使用。

这可以用任何 python 调试器来完成,如果你想在一个应用程序中拥有一切,PyDev 可以与 RED 一起使用。

按照下面的帮助文档,如果您遇到任何问题,请在此处发表评论。

RED Debug with PyDev

【讨论】:

  • 我使用 Eclipse 市场安装了 Red。首先关于环境设置:右键单击项目时我没有选择Python Nature。我做了该链接下描述的所有其他步骤,最后我使用新创建的机器人调试配置调试了运行测试套件,但仍然获得相同的日志/报告,仅详细说明机器人关键字,但黑盒到 python 函数。我应该在 python 库级别上运行调试吗?
  • Python/PyDev 性质只有在将 PyDev 安装到 Eclipse 后才可用。将它安装到 RED/Eclipse,然后就可以使用了。如果您要直接从 Eclipse 文件夹中使用 pydevd (pydev debuger),您需要更新脚本中的路径:github.com/nokia/RED/blob/master/src/RobotUserScripts/… 在第 91 行
  • 您仍然需要在 py 文件中放置调试断点,python 调试器将提供正在发生的事情的堆栈跟踪。
  • 只是为了告诉你它现在以某种方式工作。我所做的只是删除旧的调试配置并创建新的...
【解决方案2】:

如果您想知道基于 python 的关键字中的哪个语句失败,您只需让它抛出一个适当的错误。但是,Robot 不会为您执行此操作。从报告的角度来看,基于 python 的关键字是一个黑匣子。您将必须显式添加日志消息,并返回有用的错误。

例如,对sideBarPage.createNewVehicle() 的调用应引发异常,例如“无法创建新车辆”。同样,对basicVehicleCreation.setKennzeichen(registrationno) 的调用应该引发类似“未能注册车辆”的错误。

如果您无法控制这些方法,则可以在关键字中进行错误处理:

@keyword("Create new vehicle with next ${registrationno} and ${description}")
def create_new_vehicle_Simple(self,registrationno, description):
    headerPage = HeaderPage(TestCaseKeywords.driver)
    sideBarPage = headerPage.selectDaten()
    try:
        basicVehicleCreation = sideBarPage.createNewVehicle()
    except:
        raise Exception("unable to create new vehicle")

    try:
        basicVehicleCreation.setKennzeichen(registrationno)
    except:
        raise exception("unable to register new vehicle")

    ...

【讨论】:

  • 即使在这种情况下,当我运行我的测试用例时,我也会收到整个关键字 ElementNotVisibleException: Message: element not visible 的一般错误消息
  • 其基于机器人的测试套件、测试和关键字,并使用 python -m robot 运行
  • @domoni:确保发出正确的错误消息由您决定。机器人框架或 python 中没有任何东西可以阻止您发出有用的错误消息。
  • 在这种情况下,我是有限的,是的机器人框架阻止我目前得到正确的调试和正确的指向问题
  • 在之前的评论中我写道,我按照您的建议在我的 python 脚本代码中添加了“try / except”,但仍然收到我在之前的 cmets 中发布给您的日志错误,并且总是只收到消息出了什么问题关键字,找不到元素,元素不​​可见,文档错误,类型错误......但不是它发生在哪一行,而且我没有收到我在我写的异常下定义的消息(再次以你建议的方式)。请阅读历史。
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 2022-07-13
  • 1970-01-01
  • 2011-04-24
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多