Testing 使用Jenkins和x2B实现测试自动化;机器人框架

Testing 使用Jenkins和x2B实现测试自动化;机器人框架,testing,jenkins,robotframework,Testing,Jenkins,Robotframework,经过长时间的网络搜索,我想问你以下问题 我们使用詹金斯来构建和单元测试,该代码是用C++编写的。 这很有效。在研究fitnesse和robotframework之后,我仍然无法运行以下测试问题 我的程序是一个命令行程序,它读取一些输入文件并计算一些输出数据。(例如simcode.exe-j input##.inp-->output.dat) 我正在寻找一种通过web界面创建测试套件的方法。这意味着我为每个测试用例提供一个输入文件和一些参考输出数据,测试套件在Jenkins成功构建之后执行。根据输

经过长时间的网络搜索,我想问你以下问题

我们使用詹金斯来构建和单元测试,该代码是用C++编写的。 这很有效。在研究fitnesse和robotframework之后,我仍然无法运行以下测试问题

我的程序是一个命令行程序,它读取一些输入文件并计算一些输出数据。(例如simcode.exe-j input##.inp-->output.dat)

我正在寻找一种通过web界面创建测试套件的方法。这意味着我为每个测试用例提供一个输入文件和一些参考输出数据,测试套件在Jenkins成功构建之后执行。根据输出数据和参考输出数据之间的差异结果,应该创建一个xml文件,该文件可以提供给Jenkins。此xml文件应包含有关所有测试用例结果的信息(例如,成功与否)

xml文件的信息应该再次显示在Jenkins中

我正在寻找一种不需要为我的程序编译任何库的方法

我将非常感谢任何能够解释如何使用RobotFramework实现这一点的提示。(这可能吗?)


提前谢谢

机器人框架是一个测试自动化工具。。。你可以用它做很多不同的事情

我真的不明白你通过web界面使用测试套件的意思。。。但一般来说,您描述的功能似乎可以通过RobotFramework完成

简言之

您可以创建一个测试套件,其中可以有许多测试用例,例如,您可以有一个或每个要检查的输入文件

具有关键字Run,您可能可以使用该关键字,或者如果您正在远程运行命令,则可以从可选的

对于每个测试用例,您都可以创建一个运行命令的步骤,以及另一个根据预期验证输出文件的步骤。如果它们匹配,测试用例将标记为通过,否则将标记为失败

RobotFramework可以为您运行的每个测试套件生成html格式的日志和报告文件

Jenkins和Hudson有一个RobotFramework插件,您可以使用它以非常好的方式显示这些输出文件!
i、 e.有多少测试用例通过/失败

您想要的似乎是一颗灵丹妙药。 这是可行的,您不需要编译任何东西,但仍然需要围绕robot框架编写一些逻辑

  • 据我所知,您需要在CLI中调用一些东西-这很简单,robot已经在做这件事了
  • 它有一个输入文件和一些输出数据——琐碎的——robot已经完成了这项工作
  • 您需要将实际输出数据与预期输出数据进行比较-这里您需要一些润滑脂
  • 打包日志-robot已经这样做了
  • 在Jenkins-Triple-robot中展示它们已经做到了这一点
  • 所以所有的重担都已经完成了

  • 调用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
    
  • 如果你想要一个灵活的输入方法

    *** 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
    
  • 接下来,我们需要比较两个文件的内容。。。 假设您将文件移动到一个方便的位置,您可以为自己编写一个关键字来比较内容

    *** 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格式的参数列表。 例如,假设您计算输入文件中数字的平方根

    我们如何存储预期的数据? 假设我们有一个名为expected.dat的文件

    [defaults]
    n_1=1
    n_4=2
    n_9=3
    
    我们有一个输出数据

    [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。运行后,使用publish artefact和publish robot结果插件将格式良好的输出传递给Jenkins

    PS:代码可能无法运行-我在一个简单的编辑器中以自由方式编写,没有突出显示语法,也没有对其进行测试