python - 有没有一种优雅的方法可以使用自动生成的参数调用机器人框架测试?
问题描述
问题摘要: 我目前正在尝试将现有测试从纯 python 迁移到机器人框架,以便从良好的报告功能中受益。这些系统测试必须使用由许多参数组成的多个参数集重新运行。这就是为什么我已经有了一个 python 生成器,它可以生成包含所有可能参数配置的字典以及为每个参数生成可读描述的方法。
我想实现:
- 每组参数对应一个测试用例的报告,例如数据驱动的 RF 风格
- 可读的测试用例,无需滥用生成器生成丑陋的“硬代码”
数据驱动的方法: 我使用了生成器,我必须以以下格式编写数据驱动的测试文件,这几乎可以提供我想要的输出。这种方法的问题是我想用作测试用例名称的描述很长,而且要处理的参数远远超过三个,其中大多数有两个以上的状态。这使得我以这种方式创建的 .robot 文件不可读。我不喜欢输出的一件事是我没有看到用于测试用例的参数名称,因此测试标题确实必须包含所有参数的所有信息。除此之外,我认为如果没有更好的解决方案,尽管中间步骤不可读,这就是我将采用的方法。
*** Settings ***
Test Template Check Result With Args
*** Keywords ***
Check Result With Args
[Arguments] ${par1}
... ${par2}
... ${par3}
Set par par1 ${par1}
Set par par2 ${par2}
Set par par3 ${par3}
Evaluation
Check result
*** Test Cases *** par1 par2 par3
description000 0 0 0
description001 0 0 1
description010 0 1 0
description011 0 1 1
description100 1 0 0
description101 1 0 1
description110 1 1 0
description111 1 1 1
以下关键字驱动方法的代码更符合我的口味,但输出看起来不太好。使用下面的代码,报告中只有一个测试用例,然后多次调用一个关键字。更多缺点:测试设置和拆卸都只调用一次。此外,describe parameters 关键字记录了有关测试用例的信息,但它不是立即可见的,而是隐藏在关键字调用中。使用字典作为参数似乎很不错,因为这样我可以在每个 for 循环迭代的报告中的值旁边看到字典键。
*** Keywords ***
Set Parameters And Check Result
[Arguments] ${parameter dictionary}
Describe Parameters ${parameter dictionary}
Set Parameters ${parameter dictionary}
Evaluation
Check result
*** Test Cases ***
Check Result For All Possible Configurations
${all configs} = Yield All Possible Configurations
:FOR ${configuration} IN @{all configs}
\ Set Parameters And Check Result ${configuration}
我还尝试在测试用例中使用 [Template],但该解决方案只是结合了我在这里展示的两种方法的缺点。我还没有尝试过的一件事是给出整个测试用例参数并从 python 运行它。我觉得应该有一个优雅的解决方案,以某种方式使用测试模板与 for 循环并可能嵌入参数相结合,但我还想不通。提前感谢您的帮助!
解决方案
您可以使用robotframework-datadriver库来做您提到的事情,即数据驱动和基于关键字的。
DataDriver 是使用 Robot Framework 创建数据驱动测试的另一种方法。DataDriver 根据测试模板和 csv 或 Excel 文件的数据内容创建多个测试用例。所有创建的测试共享相同的测试序列(关键字)并且测试数据不同。
DataDriver 作为库使用/导入,但不提供可在测试中使用的关键字。DataDriver 使用监听器接口版本 3 来操作测试用例,并基于包含数据驱动测试数据的数据文件创建新的测试用例。这些数据文件可能是 .csv 、 .xls 或 .xlsx 文件。
推荐阅读
- google-cloud-firestore - 在不循环或 forEach 的情况下将快照项添加到数组
- php - 如何在 FTP 中升级 PHP 版本的 wordpress 网站?
- c# - 在 Telerik UWP RadDataGrid 中更改特定行的颜色
- r - 闪亮 - 尝试复制“闭包”类型的对象
- python - Python:如何添加钩子以控制(停止/启动/暂停/恢复)第二个程序的无限循环?
- python-3.x - Python smpplib 截断 smpp 凭据
- javascript - 为什么在 typescript 中导入时必须使用“*”?
- c# - 如何提高实体框架代码的性能?
- java - 使用 Google Guava for getIfPresent() 按枚举值进行搜索
- ios - 在swift中将navigationBar底部边框更改为虚线