Как использовать ключевое слово run, если на платформе робота - PullRequest
1 голос
/ 14 января 2020

Я пишу код на фреймворке роботов, это о сравнении данных между файлом Excel и базой данных mysql. В моем коде я могу сравнивать данные успешно, но также, если есть несоответствия, я хочу знать, в каком столбце. Если мне нужно объяснить более подробно, у меня есть 66 столбцов, и я знаю их имена, потому что они написаны в документе Excel , давайте подумаем, что есть два несоответствия между Excel и базой данных, код, который я написал, дает мне неправильные значения, такие как

1) Lists are different:
Index 0: 905390000510 != 905390000511 
2) Lists are different:
Index 0: 88975322100222 != 88975322100332

Но каждый раз, когда пишется Индекс 0, так что я не знаю, где находится Ошибка. Поэтому мне нужно добавить условие if в мой код в любом месте, но я еще не достиг его, потому что когда я хочу использовать оператор RUN KEYWORD IF, я получаю все имена столбцов, но мне нужно получить только это 2. Как я могу решить это ? Я добавляю свой код ниже.

*** Test Cases ***
open first excel file

    connect to database  pymysql  testdb  root  rootpass  localhost  3306
    :FOR    ${i}    IN RANGE    2  67
    \   open excel document  ${path1}  ${i}
    \   ${cname}  read excel cell  1  ${i}  Sheet2
    \   ${value1}=  read excel cell  2  ${i}  Sheet2
    \   @{list1}  create list  ${value1}
    \   @{queryResults}=  query  select a_${i} from test_table where a_1 = 'filename1'
    \   run keyword and continue on failure  lists should be equal  ${list1}  @{queryResults}
    \   run keyword if  "${list1}" !=" ${queryResults}"  log to console  ${cname}

И мой файл Excel содержит имена столбцов в первой строке, во второй строке есть данные.

1 Ответ

2 голосов
/ 14 января 2020

Несмотря на то, что ваш скрипт содержит сравнение списков, при ближайшем рассмотрении мне кажется, что это не сравнение списков, а сравнение значений, которое должно привести к сообщению типа

In Row Столбец «1» Значение «BBBB» 2222! = 4444.

Ниже приведен пример, в котором сравниваются значения двух списков, а имя столбца извлекается из третьего при генерировании сообщения об ошибке:

*** Settings ***
Library    Collections

*** Test Cases ***
Compare List
    ${ListColumns}    Create List    AAAA    BBBB    CCCC     
    ${ListA}          Create List    1111    2222    3333
    ${ListB}          Create List    1111    4444    3333

    FOR    ${i}    IN RANGE    0    2
        run keyword and continue on failure  
        ...       should be equal as Strings      
        ...            @{ListA}[${i}]      
        ...            @{ListB}[${i}]
        ...            values=False
        ...            msg=In Row "${1}" Column "${ListColumns}[${i}]" value @{ListA}[${i}] != @{ListB}[${i}].
    END

Этот скрипт приведет к выводу этой консоли:

==============================================================================
Compare List                                                          | FAIL |
In Row "1" Column "BBBB" value 2222 != 4444.
------------------------------------------------------------------------------
SO004.Compare                                                         | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
SO004                                                                 | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================

Имея это в виду, вы можете применить это к своему сценарию таким образом. Помните, что приведенный ниже код не протестирован, но должен работать.

Open First Excel File

    Connect To Database  pymysql  testdb  root  rootpass  localhost  3306

    FOR    ${i}    IN RANGE    2    67
        # Get the value and column
        open excel document  ${path1}  ${i}
        ${ColumnName}      read excel cell  1  ${i}  Sheet2
        ${Excelvalue}      read excel cell  2  ${i}  Sheet2   

        # This is a nested list where the @{queryResults}[0][0] means the first column from the first row.
        @{queryResults}    query  select a_${i} from test_table where a_1 = 'filename1'

        run keyword and continue on failure  
        ...       should be equal as Strings      
        ...            @{ListA}[${i}]      
        ...            @{ListB}[${i}]
        ...            values=False
        ...            msg=In Row "${1}" Column " ${ColumnName}" value ${Excelvalue} != @{queryResults}[0][0].
    END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...