<test> 標籤在語法上和 <node> 標籤很相似,他們都是用來指定要運行的 ROS 節點,雖然 <test> 標籤指定的是要運行的測試節點。更多關於測試節點的資訊,請參考 rostest 文件。
標籤說明
- <test>
<node> 標籤的屬性大部分在 <test> 標籤都能使用,除了下列幾個:
- 沒有 respawn 屬性(因為測試節點必須要能結束,所以不做重啟節點的動作)
- 沒有 output 屬性(因為測試時,會使用自己的輸出記錄機制)
- 忽略 machine 屬性
另外,<test> 標籤新增幾個屬性,如下:
[ 必備屬性 | Required ]
pkg="mypackage" : 指定節點所在的套件名稱。
test-name="test_name" : 測試名稱,用於記錄在測試結果中。
type="nodetype" : 節點型態,必須設定為用來啟動節點的可執行檔名稱。
[ 選用屬性 | Optional ]
name="nodename" : 節點名稱。注意:此名稱中不能包含命名空間,可以使用 ns 屬性來指定命名空間。如果沒有設定此屬性,則以 test-name 屬性值為節點名稱。
args="arg1 arg2 arg3" : 傳遞參數給節點。
clear_params="true|false" : 在啟動之前,刪除先前設置在此節點私有命名空間中的所有參數,也就是以此節點名稱為命名空間下的所有參數。預設值為 false。
cwd="ROS_HOME|node" : 設定節點的工作目錄 (working directory)。若為 'node',則設定節點的可執行檔目錄為節點的工作目錄。預設為 ROS_HOME 環境變數所設定的目錄。
launch-prefix="prefix arguments" : 設定指令和參數,用以添加到節點的啟動參數中。這是一個強大的功能,讓你可以使用 gdb, valgrind, xterm, nice 或其他方便的工具。(See Roslaunch Nodes in Valgrind or GDB for examples.)
ns="foo" : 在此命名空間下啟動節點。
retry="0" : 測試失敗時的重測次數,若反覆重測超過此次數,將判定為測試失敗。預設值為 0。
time-limit="60.0" : 測試的時間限制,若測試時超過此時間限制,將判定為測試失敗。每次 retry 時重新計算時間。預設為 60 秒。
在 <test> 標籤中,還可以內嵌下列標籤:
<env> : 設置一個環境變數供此節點使用,此環境變數僅在此節點內有作用。
<remap> : 為此節點設置一個重映射參數。
<rosparam> : 在節點的私有命名空間中,透過 rosparam 指令來設置 Parameter 參數。
<param> : 在節點的私有命名空間中,設置一個 Parameter 參數。
注意事項:必須以 rostest 指令來執行,<test> 標籤才會有作用。
實例說明
此範例在 mypackage 套件裡面的 launch 目錄,新增一個簡單的 launch 文件來做測試。另外,在 script 目錄則是新增一個簡短的 Python 程式,並在其中撰寫一個簡單的測試案例,裡面包含兩個測試項目。此 launch 文件必須以 rostest 指令來執行。
-- test.launch
<launch> <test test-name="mytest" pkg="mypackage" type="mytest.py" time-limit="10.0" /> </launch> |
-- mytest.py
#!/usr/bin/env python import rospy, unittest, rostest, time
class MyTest(unittest.TestCase):
def test_a(self): self.assertTrue(True)
def test_b(self): self.assertTrue(True)
if __name__ == '__main__': time.sleep(3) rospy.init_node('test_tag') rostest.rosrun('mypackage', 'mytest', MyTest) |
執行 rostest mypackage test.launch 之後,螢幕會顯示下列測試結果。總共進行兩項測試:test_a 和 test_b,也就是定義在 MyTest class 中的兩個 method,並且兩項測試皆顯示通過。
$ rostest mypackage test.launch ... logging to /home/robot/.ros/log/rostest-ros-master-10396.log [ROSUNIT] Outputting test results to /home/robot/.ros/test_results/mypackage/rostest-launch_test.xml [Testcase: testmytest] ... ok
[ROSTEST]-----------------------------------------------------------------------
[mypackage.rosunit-mytest/test_a][passed] [mypackage.rosunit-mytest/test_b][passed]
SUMMARY * RESULT: SUCCESS * TESTS: 2 * ERRORS: 0 * FAILURES: 0
rostest log file is in /home/robot/.ros/log/rostest-ros-master-10396.log |
參考資料
- roslaunch: <test> tag
http://wiki.ros.org/roslaunch/XML/test
- rostest tool使用
https://blog.csdn.net/x_r_su/article/details/53184871
https://www.itread01.com/content/1548768434.html
沒有留言:
張貼留言