用catkin_make测试触发python rostest

时间:2014-10-21 09:01:47

标签: python unit-testing ros

目标:

我想通过调用package-root中的catkin_make test来触发ros-enviroment中的python单元测试。

ros的版本是python 2.7.3

什么有效:

沿着official instructions我编写了测试,当使用命令rostest jenkins_test_repro testAll.test和相关的"启动" -file(如here所述)调用时,该测试工作正常。 / p>

直接执行脚本时工作正常...

测试输出:

/home/USER/VirtEnvPython/bin/python /home/USER/sandbox/metric_tester/src/jenkins_test_repro/scripts/TestMetricStarter.py
[ROSUNIT] Outputting test results to /home/USER/.ros/test_results/jenkins_test_repro/rosunit-MetricStarter.xml
test_server_feedback ... ok
test_true ... ok
-------------------------------------------------------------
SUMMARY:
 * RESULT: SUCCESS
 * TESTS: 2
 * ERRORS: 0 []
 * FAILURES: 0 []

的测试文件:

#!/usr/bin/env python
PKG = 'jenkins_test_repro'
#import roslib; roslib.load_manifest(PKG)  # This line is not needed with Catkin.

import sys
import os
import rostest
import unittest
import requests

class TestMetricStarter(unittest.TestCase):

    def test_server_feedback(self):
        r = requests.get('http://SRV-ADR/MetricServer/default/index/MetricStarter' + os.getcwd())
        self.assertEqual(r.status_code, 200)

    def test_true(self):
        self.assertTrue(True)

if __name__ == '__main__':
    rostest.rosrun(PKG, 'MetricStarter', TestMetricStarter)

"发射" -file:

<launch>
    <test test-name="MetricStarter" pkg="jenkins_test_repro" type="TestMetricStarter.py" />
</launch>

问题:

用于调用test-stuff trough catkin_make test我需要在CMakeLists.txt中添加测试。 我想出了3种方法来做到这一点,对我来说,我还不清楚我真正需要做什么。我已经做了一个干净的构建(删除构建/开发和重建catkin工作区)的所有方法

  1. 因为rostest的使用和工作命令行执行的类比

    add_rostest(test/testAll.test)
    

    但测试似乎没有执行:

    Running tests...
    Test project /home/USER/sandbox/metric_tester/build
        Start 1: _ctest_jenkins_test_repro_rostest_test_testAll.test
    1/1 Test #1: _ctest_jenkins_test_repro_rostest_test_testAll.test ...   Passed    1.64 sec
    
    100% tests passed, 0 tests failed out of 1
    
    Total Test time (real) =   1.65 sec
    catkin_make test  4.58s user 0.54s system 79% cpu 6.404 total
    

    我也试过

    add_rostest(scripts/TestMetricStarter.py)
    

    女巫会导致以下错误

    Running tests...
    Test project /home/USER/sandbox/metric_tester/build
        Start 1: _ctest_jenkins_test_repro_rostest_scripts_TestMetricStarter.py
    1/1 Test #1: _ctest_jenkins_test_repro_rostest_scripts_TestMetricStarter.py ...***Failed    0.46 sec
    
    0% tests passed, 1 tests failed out of 1
    
    Total Test time (real) =   0.47 sec
    
    The following tests FAILED:
          1 - _ctest_jenkins_test_repro_rostest_scripts_TestMetricStarter.py (Failed)
    Errors while running CTest
    make: *** [test] Error 8
    Invoking "make" failed
    
  2. 刚尝试过与rostest有关,

    add_rostest_gtest(jenkins_test_repro test/testAll.test scripts/TestMetricStarter.py)
    

    但由于输出和请求的链接器语言

    ,似乎是c / c ++的东西
    CMake Error: CMake can not determine linker language for target:jenkins_test_repro
    CMake Error: Cannot determine link language for target "jenkins_test_repro".
    -- Generating done
    -- Build files have been written to: /home/USER/sandbox/metric_tester/build
    make: *** [cmake_check_build_system] Error 1
    
  3. official guide中的
  4. 是运行tests as part of make tests

    的部分

    这导致了与第一种方式类似的行为

    catkin_add_nosetests(test/testAll.test)
    

    add_rostest(scripts/TestMetricStarter.py)

    相同
    catkin_add_nosetests(scripts/TestMetricStarter.py)
    

    add_rostest(test/testAll.test)

  5. 相同

    现在?

    所以仍然有一个问题我如何在CMakeLists.txt中添加测试...对于我来说还不清楚如何为python编写的单元测试做这个。使用c / cpp有一些方法可行,但对于python?

    由于build-farm上的工具链,如果有办法用catkin_make test触发测试会很好。此问题不要求绕过CMake的其他方式。

    如果需要更多信息,请问:)。我希望有人可以帮助或暗示正确的解决方案。

    编辑:我在http://answers.ros.org发布了相同的问题,因为我认为它仍然是一个非常具体的问题。如果我得到答案,我会在这里发布,如果有人有类似的问题。

1 个答案:

答案 0 :(得分:1)

如上所述here ,解决方案可行。仍然不清楚是什么真的发生了变化,因为add_rostest(test/testAll.test)之前已经过测试(第一种方法)......

在CMakeLists.txt中添加以下行:

if (CATKIN_ENABLE_TESTING)
  add_rostest(test/testAll.test)
endif()