2011-11-10 180 views
3

长时间的互联网搜索后,我想问你以下问题。Jenkins + RobotFramework测试自动化

我们使用Jenkins构建和单元测试用C++编写的模拟代码。

这很有效。在研究了fitnesse和robotframework之后,我仍然无法运行以下测试问题。

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

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

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

我正在寻找一种方法,我不需要将任何库编译到我的程序中。

我会非常感谢任何解释如何实现与RobotFramework的提示。 (它甚至有可能吗?)

在此先感谢!

回答

1

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

我真的不明白你的意思是通过一个Web界面的测试套件...但一般你所描述的功能,似乎可以用RobotFramework做...

简讯

您可以创建具有例如,你可以有onef或者你希望每一个输入文件许多测试用例测试套件去检查!

OperatingSystem Build In Library有关键字投放,或许您可以使用,或者如果你正在运行的命令远程您可以使用从可选SSHLibrary

执行命令对于每个测试实例,你可以创建一个运行了一步命令和另一个验证输出文件是否符合您的预期。如果它们匹配的测试用例被标记为合格,否则被标记为失败...

RobotFramework可以产生同时运行的是HTML格式的日志和报告文件中的每个测试套件。

詹金斯和Hudson有RobotFramework一个插件,你可以用一个非常好的方式来显示这些输出文件! 即有多少测试用例已通过/失败

0

你想要什么似乎是一个银弹。 这是可行的,你不需要编译一个东西,但你仍然需要写一些关于机器人框架的逻辑。

  1. 据我了解,你需要调用的东西在CLI - 这是小事,机器人已经这样做了
  2. 它有一个输入文件和一些输出数据 - 平凡, - 机器人已经这样做了
  3. 您需要将实际输出数据与预期输出数据进行比较 - 在​​这里您需要一些手肘润滑脂。
  4. 打包日志 - 机器人已经做到了这一点。
  5. 在詹金斯展示他们 - 微不足道 - 机器人已经做到了这一点。

所以所有的繁重工作已经完成。

  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格式进行比较。 例如,让我们假设您计算输入文件中存在的数字的平方根

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

[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:代码可能无法运行 - 我在一个简单的编辑器中写了自由式,没有语法突出显示,我没有测试它。