我想通过调用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工作区)的所有方法
因为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
刚尝试过与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
是运行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)
所以仍然有一个问题我如何在CMakeLists.txt中添加测试...对于我来说还不清楚如何为python编写的单元测试做这个。使用c / cpp有一些方法可行,但对于python?
由于build-farm上的工具链,如果有办法用catkin_make test
触发测试会很好。此问题不要求绕过CMake的其他方式。
如果需要更多信息,请问:)。我希望有人可以帮助或暗示正确的解决方案。
编辑:我在http://answers.ros.org发布了相同的问题,因为我认为它仍然是一个非常具体的问题。如果我得到答案,我会在这里发布,如果有人有类似的问题。
答案 0 :(得分:1)
如上所述here ,解决方案可行。仍然不清楚是什么真的发生了变化,因为add_rostest(test/testAll.test)
之前已经过测试(第一种方法)......
在CMakeLists.txt中添加以下行:
if (CATKIN_ENABLE_TESTING)
add_rostest(test/testAll.test)
endif()