mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
mavsdk_tests: add combined log
This commit is contained in:
parent
814d79cb32
commit
b1ceef5b93
@ -11,7 +11,7 @@ import subprocess
|
||||
import sys
|
||||
from logger_helper import color, colorize
|
||||
import process_helper as ph
|
||||
from typing import Any, Dict, List, NoReturn, Optional
|
||||
from typing import Any, Dict, List, NoReturn, TextIO, Optional
|
||||
from types import FrameType
|
||||
|
||||
|
||||
@ -129,6 +129,7 @@ class Tester:
|
||||
self.gui = gui
|
||||
self.verbose = verbose
|
||||
self.start_time = datetime.datetime.now()
|
||||
self.combined_log_fd = TextIO
|
||||
|
||||
@classmethod
|
||||
def determine_tests(cls, tests: List[Dict[str, Any]], model: str) \
|
||||
@ -272,7 +273,7 @@ class Tester:
|
||||
return foldername
|
||||
|
||||
def run_test_case(self, test: Dict[str, Any],
|
||||
case: str, logfile_path: str) -> bool:
|
||||
case: str, log_dir: str) -> bool:
|
||||
self.active_runners = []
|
||||
|
||||
speed_factor = self.speed_factor
|
||||
@ -282,56 +283,68 @@ class Tester:
|
||||
if self.config['mode'] == 'sitl':
|
||||
px4_runner = ph.Px4Runner(
|
||||
os.getcwd(),
|
||||
logfile_path,
|
||||
log_dir,
|
||||
test['model'],
|
||||
case,
|
||||
speed_factor,
|
||||
self.debugger,
|
||||
self.verbose)
|
||||
px4_runner.start()
|
||||
self.active_runners.append(px4_runner)
|
||||
|
||||
if self.config['simulator'] == 'gazebo':
|
||||
gzserver_runner = ph.GzserverRunner(
|
||||
os.getcwd(),
|
||||
logfile_path,
|
||||
log_dir,
|
||||
test['model'],
|
||||
case,
|
||||
self.speed_factor,
|
||||
self.verbose)
|
||||
gzserver_runner.start()
|
||||
self.active_runners.append(gzserver_runner)
|
||||
|
||||
if self.gui:
|
||||
gzclient_runner = ph.GzclientRunner(
|
||||
os.getcwd(),
|
||||
logfile_path,
|
||||
log_dir,
|
||||
test['model'],
|
||||
case,
|
||||
self.verbose)
|
||||
gzclient_runner.start()
|
||||
self.active_runners.append(gzclient_runner)
|
||||
|
||||
test_runner = ph.TestRunner(
|
||||
os.getcwd(),
|
||||
logfile_path,
|
||||
log_dir,
|
||||
test['model'],
|
||||
case,
|
||||
self.config['mavlink_connection'],
|
||||
self.verbose)
|
||||
|
||||
test_runner.start()
|
||||
self.active_runners.append(test_runner)
|
||||
|
||||
for runner in self.active_runners:
|
||||
runner.set_log_filename(
|
||||
self.determine_logfile_path(log_dir, runner.name))
|
||||
runner.start()
|
||||
|
||||
max_name = max(len(runner.name) for runner in self.active_runners)
|
||||
|
||||
self.start_combined_log(
|
||||
self.determine_logfile_path(log_dir, 'combined'))
|
||||
|
||||
while test_runner.time_elapsed_s() < test['timeout_min']*60:
|
||||
returncode = test_runner.poll()
|
||||
if returncode is not None:
|
||||
is_success = (returncode == 0)
|
||||
break
|
||||
|
||||
if self.verbose:
|
||||
for runner in self.active_runners:
|
||||
runner.print_output()
|
||||
for runner in self.active_runners:
|
||||
output = runner.get_output()
|
||||
if not output:
|
||||
continue
|
||||
|
||||
output = self.add_name_prefix(max_name, runner.name, output)
|
||||
self.add_to_combined_log(output)
|
||||
if self.verbose:
|
||||
print(output)
|
||||
|
||||
else:
|
||||
print(colorize(
|
||||
@ -342,6 +355,7 @@ class Tester:
|
||||
|
||||
for runner in self.active_runners:
|
||||
runner.stop()
|
||||
self.stop_combined_log()
|
||||
|
||||
result = {'success': is_success,
|
||||
'logfiles': [runner.get_log_filename()
|
||||
@ -354,6 +368,23 @@ class Tester:
|
||||
|
||||
return is_success
|
||||
|
||||
def start_combined_log(self, filename: str) -> None:
|
||||
self.log_fd = open(filename, 'w')
|
||||
|
||||
def stop_combined_log(self) -> None:
|
||||
self.log_fd.close()
|
||||
|
||||
def add_to_combined_log(self, output: str) -> None:
|
||||
self.log_fd.write(output)
|
||||
|
||||
@staticmethod
|
||||
def add_name_prefix(width: int, name: str, text: str) -> str:
|
||||
return colorize("[" + name.ljust(width) + "] " + text, color.RESET)
|
||||
|
||||
@staticmethod
|
||||
def determine_logfile_path(log_dir: str, desc: str) -> str:
|
||||
return os.path.join(log_dir, "log-{}.log".format(desc))
|
||||
|
||||
def show_detailed_results(self) -> None:
|
||||
print()
|
||||
print(colorize("Results:", color.BOLD))
|
||||
@ -416,6 +447,7 @@ class Tester:
|
||||
print("Stopping all processes ...")
|
||||
for runner in self.active_runners:
|
||||
runner.stop()
|
||||
self.stop_combined_log()
|
||||
print("Stopping all processes done.")
|
||||
self.show_detailed_results()
|
||||
sys.exit(-sig)
|
||||
|
||||
@ -32,9 +32,8 @@ class Runner:
|
||||
self.log_dir = log_dir
|
||||
self.log_filename = ""
|
||||
|
||||
def set_log_filename(self) -> None:
|
||||
self.log_filename = self.log_dir + os.path.sep + \
|
||||
"log-{}.log".format(self.name)
|
||||
def set_log_filename(self, log_filename: str) -> None:
|
||||
self.log_filename = log_filename
|
||||
|
||||
def get_log_filename(self) -> str:
|
||||
return self.log_filename
|
||||
@ -45,7 +44,6 @@ class Runner:
|
||||
|
||||
atexit.register(self.stop)
|
||||
|
||||
self.set_log_filename()
|
||||
if self.verbose:
|
||||
print("Logging to {}".format(self.log_filename))
|
||||
self.log_fd = open(self.log_filename, 'w')
|
||||
@ -88,18 +86,10 @@ class Runner:
|
||||
|
||||
def get_output(self) -> Optional[str]:
|
||||
try:
|
||||
output = self.output_queue.get(block=True, timeout=0.1)
|
||||
return maybe_strip_color(output)
|
||||
return self.output_queue.get(block=True, timeout=0.1)
|
||||
except queue.Empty:
|
||||
return None
|
||||
|
||||
def print_output(self) -> None:
|
||||
output = self.get_output()
|
||||
if not output:
|
||||
return
|
||||
print(colorize("[" + self.name.ljust(11) + "] " + output, color.RESET),
|
||||
end="")
|
||||
|
||||
def stop(self) -> int:
|
||||
atexit.unregister(self.stop)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user