Автоматизация тестирования с помощью Jenkins + RobotFramework - PullRequest
3 голосов
/ 10 ноября 2011

после долгого поиска в Интернете я хотел бы задать вам следующий вопрос.

Мы используем Jenkins для построения и модульного тестирования кода моделирования, написанного на C ++.

Thisработает очень хорошо.После изучения фитнеса и работы с роботом я все еще не могу запустить следующие тестовые задачи:

Моя программа - это программа командной строки, которая читает некоторый входной файл и вычисляет некоторые выходные данные.(например, simcode.exe -j input ##. inp -> output.dat)

Я ищу способ создания набора тестов через веб-интерфейс.Это означает, что я предоставляю для каждого тестового примера входной файл и некоторые справочные выходные данные, а набор тестов выполняется после успешной сборки Jenkins.На основе результатов различий между выходными данными и справочными выходными данными должен быть создан XML-файл, который можно передать Jenkins.Этот XML-файл должен содержать информацию обо всех результатах теста (например, успешно или нет).

Информация о файле xml должна снова отображаться в Jenkins.

Я ищу подход, при котором мне не нужно компилировать какую-либо библиотеку для моей программы.

Iбыл бы очень благодарен за любую подсказку, которая объясняет, как достигнуть этого с RobotFramework.(Это вообще возможно?)

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Robot Framework - это инструмент автоматизации тестирования ... с этим можно делать много разных вещей ...

Я не совсем понимаю, что вы имеете в виду с набором тестов через веб-интерфейс ...но в целом описанная вами функциональность кажется возможной с помощью RobotFramework ...

Вкратце

Вы можете создать набор тестов, который может иметь много тестовых примеров, например, один иликаждый входной файл, который вы хотите проверить!

В сборке OperatingSystem Operating Library есть ключевое слово Run, которое вы, вероятно, можете использовать или, если вы выполняете команды удаленно, вы можете использовать команду Execute изнеобязательный SSHLibrary

Для каждого теста вы можете создать шаг, который запускает команду, и еще один, который проверяет выходной файл на соответствие ожидаемому.Если они соответствуют Тестовому случаю, помечаются как Проходные, в противном случае он помечается как Сбой ...

RobotFramework может создавать для каждого набора тестов, в котором вы запускаете журнал и файл отчета, в формате html.

У Дженкинса и Хадсона есть плагин для RobotFramework, который вы можете использовать для отображения этих выходных файлов очень хорошим способом!т.е. сколько тестовых примеров прошло / не выполнено

0 голосов
/ 20 апреля 2015

То, что вы хотите, похоже на серебряную пулю.Это выполнимо, вам не нужно ничего компилировать, но вам все еще нужно написать логику вокруг среды робота.

  1. Насколько я понял, вам нужно вызывать что-то в CLI - этотривиально, робот уже делает это
  2. У него есть входной файл и некоторые выходные данные - тривиально, - робот уже делает это
  3. Вам необходимо сравнить фактические выходные данные с ожидаемыми выходными данными - здесьвам нужна смазка для локтя.
  4. Упакуйте журналы - робот уже делает это.
  5. Представьте их в Jenkins - тривиально - робот уже делает это.

Так что всетяжелый подъем уже сделан.

  1. Вызов CLI - используйте OperatingSystem

    *** Settings ***
     Library  OperatingSystem
    
    *** Test Cases ***
    Basic test
        Run Me A Command  simcode.exe -j input01.inp
    
    *** keywords ***
    Run Me A Command 
        [Arguments]  ${command} 
        ${rc}   ${output} =     Run and Return RC and Output    ${command}
        Log  ${output}
        Should Be Equal As Integers  ${rc}  0   
    
        Should Not Contain  ${output}  FAIL
    
  2. Если вы хотите гибкий подход к вводу материала

    *** settings ***
    Library  OperatingSystem
    
    *** Test Cases ***
    Combinations
        [Template]  Basic test
        input01.inp
        input02.inp
        input03.inp
    
    *** keywords ***
    Basic test
        [Arguments]  ${input}
        Run Me A Command  simcode.exe -j ${input}
    
    
    Run Me A Command 
        [Arguments]  ${command} 
        ${rc}   ${output} =     Run and Return RC and Output    ${command}
       Log  ${output}
       Should Be Equal As Integers  ${rc}  0    
    
        Should Not Contain  ${output}  FAIL
    
  3. Далее нам нужно сравнить содержимое двух файлов ... Предполагая, что вы переместили файлы в удобное место, вы можете написать себе ключевое слово для сравнения содержимого

    *** settings ***
    Library  OperatingSystem
    
    *** Test Cases ***
    Combinations
        [Template]  Basic test
        ../resources/input01.inp  ../resources/expectedoutput01.out
        ../resources/input02.inp  ../resources/expectedoutput02.out
        ../resources/input03.inp  ../resources/expectedoutput03.out
    
    *** keywords ***
    Basic test
        [Arguments]  ${input}  ${expected_output}
        Run Me A Command  simcode.exe -j ${input}
        Log File  output.data
        Compare Files  ${expected_output}  output.data
    

Предположим, что содержимое представляет собой список параметров в формате ini.Например, предположим, что вы вычисляете квадратный корень для чисел, присутствующих во входном файле

Как мы храним ожидаемые данные?Предположим, у нас есть файл с именем Ожидаемый. Дата

[defaults]
n_1=1
n_4=2
n_9=3

И у нас есть файл output.data

[defaults]
n_1=1
n_4=2
n_9=2

Затем нам нужно написать себе файл сравнения.Либо вы используете diff и библиотеку OperatingSystem, если вы уверены, что файлы должны быть идентичными, или вы можете написать простой компаратор, такой как:

def get_param(self,theFile)
    config = ConfigParser.RawConfigParser()
    config.read(theFile)
    return config.items("defaults")


def compareMyDict(self, expected, actual):  #There are better ways of doing this 
    for k, v in actual:
        if v != expected[k]:
            print("error message")
            print(k)
            print(v)
            print(expected[v])
            #print whatever you deem fit
            return
        print("Matched OK " + str(k))
        print(k)
        print(v)
        print(expected[v])

def compare_files(self, expectedFile, actualFile):
    '''
    From sourceFile formatted
    [defaults]
    key=value
    '''

    d1 = get_param(expectedFile)
    d1 = get_param(actualFile)

    compareMyDict(d1,d2)
    checkLenghts(d1,d2)
    criteria2(d1,d2)    
    #etc.

4 и 5. После запуска вы используете публикациюАртефакт и публиковать плагины результатов роботов, чтобы передать красиво отформатированный вывод в Jenkins.

Вуаля!

PS: Код может не работать - я написал его свободно в простом редакторе без подсветки синтаксиса, и яне проверял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...