使用Robot框架驱动的数据 - 如何在报告中为从文件

时间:2017-03-21 02:13:14

标签: robotframework

我是Robot的新手,并试图实现一个数据驱动的测试用例,在那里我从文件中读取数据。数据如下所示:

TC1,user1,password1
TC2,user2,password2
TC3,user3,password3
TC4,user4,password4

我的测试用例和关键字如下:

*** Test Cases ***
Login TestCase
    ${data}=    Read Data From File    ${testFile}
    Process Test Data    ${data}

*** Keywords ***
Process Test Data
    [Arguments]    ${data}
    : FOR    ${row}    IN    @{data}
    \    ${status}=    Run Keyword And Return Status    Perform Login ${row}

Perform Login
    [Arguments]    ${row}
    Login using    ${row[1]}   ${row[2]}

现在,在运行“登录测试用例”时,生成的报告显示

'Total 1 Pass 1 Fail 0'. 

我的问题是如何让报告生成每行的通过/失败,即

'Total N Pass X Fail Y' , where N=number of rows in data file and X+Y=N

我尝试将For循环放入' Login Testcase',但仍然得到相同的结果。任何想法/帮助都非常感谢!

更新: 所以,我尝试修改测试(不读取数据文件),如下所示:

*** Settings ***
Test Template     Perform Login

*** Test Cases ***
Login TestCase
    TC1    user1    password1
    TC2    user2    password2
    TC3    user3    password3
    TC4    user4    password4

*** Keywords ***
Perform Login
    [Arguments]    ${tc#}    ${username}    ${password}
    Login using    ${username}    ${password}

执行此操作时,“执行登录”运行4次,但报告输出仍显示
   '总计1次通过1次失败0'。

我不确定我是否以正确的方式使用测试模板,以及如何从文件中读取数据并将其用于每个测试用例迭代。

UPDATE2:

*** Settings ***
Test Template     Perform Login

*** Test Cases ***
TC1    user1    password1
TC2    user2    password2
TC3    user3    password3
TC4    user4    password4

*** Keywords ***
Perform Login
    [Arguments]    ${username}    ${password}
    Login using    ${username}    ${password}

当我以这种方式修改测试用例时,我得到了

'Total 4 Pass 3 Fail 1', which is what I expect.

但在这种情况下,我不确定如何使用从文件中读取的数据。请帮助/分享您如何使用数据文件来提供测试用例的想法!!

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我将从头开始尝试回答你在这里提出的问题。

您的测试仅显示一次成功的原因是因为您只进行了一次测试。让我为你分解一下。

您运行的每个.robot文件实际上都是Test Suite。每个套件都可以在*** Test Cases ***下定义多个测试。每个测试用例可以有多个视觉上的关键字,如下所示:

Suite
|-Test
|  |-Keyword
|  |-Keyword
|-Test
|-Test

您使用一个关键字运行第一个测试,然后使用四个关键字运行一个测试。只有在所有关键字都通过后,测试才会通过。如果没有,某些或所有关键字都通过,您可以添加其他逻辑以使其通过,但这是Robot Framework Test Suite的基本结构。机器人框架测试套件的输出将显示每个测试的一个通过/失败,而不是关键字。在日志中,它将单独显示每个关键字的通过/失败,但不会在控制台输出中显示。

至于从文件中读取,这是Robot Framework中一个特别复杂的问题,但更简单的解决方案是在变量表中创建列表和字典,如下所示:

*** Variables ***
@{users} =  user1  user2  user3  user4
&{passwords} =  {'user1':'password1', 'user2':'password2', 'user3':'password3', 'user4':'password4'}

然后,在您的循环中,您可以使用:FOR ${user} IN @{users}并使用${passwords["${user}"]}调用密码以仅引用当前用户的密码。

我在基础Robot Framework中直接读取文件的两种方法是使用自定义Python关键字和操作系统库。它不是一个完整的编程语言,更像是Python的专用shell。

答案 2 :(得分:0)

我认为这个问题是机器人目前无法解决的问题。情况是:

  1. 文件中有一堆要动态加载的数据点。
  2. 您要在每个数据点上运行相同的测试。
  3. 您希望Robot报告这些测试中有多少成功或失败。

有多种方法可以实现(1)和(2),方法是将数据加载到列表中并在for循环中对其进行迭代,如问题所示。 (出于完整性的考虑:这也可以作为template with a for loop来完成。)但是,此for循环将始终汇总到摘要中的一个测试用例中。

您可以使用data-driven Robot suite满足(2)和(3)的要求,其中列出了数据点作为测试用例。 (在问题更新中提到了此方法)。但是,该方法无法在Robot执行期间动态加载数据点。

我看到的唯一解决方案是使用一些脚本将您的数据转换为数据驱动的Robot套件,然后运行该套件。 这将需要一些包装脚本来运行Robot。 这有点令人失望,因为我公司将希望寄托在Robot上,以取代和包围所有其他框架。