add tests for `yolo info` CLI command with various cases

cli-info
Burhan 5 months ago
parent da2bafef4c
commit acec22b1e4
  1. 54
      tests/test_cli.py

@ -1,5 +1,5 @@
# Ultralytics YOLO 🚀, AGPL-3.0 license
import os
import subprocess
import pytest
@ -27,7 +27,7 @@ def test_special_modes():
run("yolo version")
run("yolo settings reset")
run("yolo cfg")
run("yolo info yolov8n.pt")
run("yolo info yolov11n.pt")
@pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
@ -108,6 +108,44 @@ def test_mobilesam():
# model(source)
def run_yolo_info(args) -> tuple[str, str]:
"""Run the yolo info command with specified arguments and capture the output."""
result = subprocess.run(f"yolo info {args}", shell=True, capture_output=True, text=True, encoding="utf-8")
return result.stdout, result.stderr
def test_yolo_info_noargs():
"""Test yolo info command without arguments, same as `yolo checks`."""
stdout, stderr = run_yolo_info("")
checks_out = subprocess.run(
f"yolo checks", shell=True, capture_output=True, text=True, encoding="utf-8"
).stdout
assert stdout == checks_out
assert stderr == ""
def test_yolo_info_with_model():
"""Test yolo info command with a specific model."""
model_path = WEIGHTS_DIR / "yolo11n.pt"
stdout, stderr = run_yolo_info(f"model={model_path.as_posix()}")
assert f"Model File: {model_path.as_posix().replace('/', os.sep)}" in stdout
assert stderr == ""
def test_yolo_info_invalid_model():
"""Test yolo info command with an invalid model path."""
stdout, _ = run_yolo_info("model=not-a-model.pt")
assert f"Model 'not-a-model.pt' not found" in stdout
def test_yolo_info_with_show():
"""Test yolo info command with verbose flag."""
model_path = WEIGHTS_DIR / "yolo11n.pt"
stdout, stderr = run_yolo_info(f"model={model_path} show=True")
assert "parameters" in stdout.lower()
assert stderr == ""
# Slow Tests -----------------------------------------------------------------------------------------------------------
@pytest.mark.slow
@pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
@ -117,3 +155,15 @@ def test_train_gpu(task, model, data):
"""Test YOLO training on GPU(s) for various tasks and models."""
run(f"yolo train {task} model={model} data={data} imgsz=32 epochs=1 device=0") # single GPU
run(f"yolo train {task} model={model} data={data} imgsz=32 epochs=1 device=0,1") # multi GPU
@pytest.mark.slow
@pytest.mark.parametrize("model", {"yolo11n.pt", "yolov8n-seg.pt", "FastSAM-s.pt", "rtdetr-l.pt", "sam_b.pt", "yolo_nas_s.pt"})
def test_yolo_info_various_models(model:str):
"""Test yolo info command with various models."""
model_path = WEIGHTS_DIR / model
if not model_path.exists():
run(f"yolo predict {model}") # download model before test
stdout, stderr = run_yolo_info(f"model={model_path.as_posix()}")
assert f"Model File: {model_path.as_posix().replace('/', os.sep)}" in stdout
assert stderr == ""
Loading…
Cancel
Save