"""CLI接口单元测试""" import pytest from click.testing import CliRunner from pathlib import Path import json import tempfile from apitest.cli_module import cli @pytest.fixture def runner(): """创建CLI测试运行器""" return CliRunner() @pytest.fixture def sample_test_cases(tmp_path): """创建示例测试用例文件""" test_data = [ { "id": "TC001", "name": "测试用例1", "description": "测试用例1", "module": "test", "endpoint": "/api/test1", "method": "GET", "headers": {}, "enabled": True }, { "id": "TC002", "name": "测试用例2", "description": "测试用例2", "module": "user", "endpoint": "/api/user", "method": "POST", "headers": {}, "enabled": True, "tags": ["smoke", "regression"], "priority": 1 } ] test_file = tmp_path / "test_cases.json" with open(test_file, "w", encoding="utf-8") as f: json.dump(test_data, f) return test_file def test_cli_version(runner): """测试CLI版本命令""" result = runner.invoke(cli, ["--version"]) assert result.exit_code == 0 assert "1.0.0" in result.output def test_cli_help(runner): """测试CLI帮助命令""" result = runner.invoke(cli, ["--help"]) assert result.exit_code == 0 assert "黑盒API测试工具" in result.output def test_list_command(runner, sample_test_cases): """测试列出测试用例命令""" result = runner.invoke(cli, ["list", str(sample_test_cases)]) assert result.exit_code == 0 assert "测试用例总数: 2" in result.output assert "TC001" in result.output assert "TC002" in result.output def test_list_command_with_module_filter(runner, sample_test_cases): """测试列出测试用例命令(模块过滤)""" result = runner.invoke(cli, ["list", str(sample_test_cases), "--module", "test"]) assert result.exit_code == 0 assert "TC001" in result.output assert "TC002" not in result.output def test_list_command_with_tag_filter(runner, sample_test_cases): """测试列出测试用例命令(标签过滤)""" result = runner.invoke(cli, ["list", str(sample_test_cases), "--tag", "smoke"]) assert result.exit_code == 0 assert "TC001" not in result.output assert "TC002" in result.output def test_list_command_with_priority_filter(runner, sample_test_cases): """测试列出测试用例命令(优先级过滤)""" result = runner.invoke(cli, ["list", str(sample_test_cases), "--priority", "1"]) assert result.exit_code == 0 assert "TC001" not in result.output assert "TC002" in result.output def test_validate_command(runner, sample_test_cases): """测试验证测试用例命令""" result = runner.invoke(cli, ["validate", str(sample_test_cases)]) assert result.exit_code == 0 assert "验证通过" in result.output def test_validate_command_invalid_file(runner, tmp_path): """测试验证测试用例命令(无效文件)""" invalid_file = tmp_path / "invalid.json" with open(invalid_file, "w", encoding="utf-8") as f: f.write("{ invalid json }") result = runner.invoke(cli, ["validate", str(invalid_file)]) assert result.exit_code != 0 def test_config_command(runner): """测试配置命令""" result = runner.invoke(cli, ["config"]) assert result.exit_code == 0 assert "当前配置" in result.output def test_config_command_with_key(runner): """测试配置命令(指定键)""" result = runner.invoke(cli, ["config", "--key", "target.base_url"]) assert result.exit_code == 0 def test_run_command_no_test_cases(runner): """测试运行命令(无测试用例)""" result = runner.invoke(cli, ["run"]) assert result.exit_code != 0 assert "请指定测试用例文件路径" in result.output def test_run_command_help(runner): """测试运行命令帮助""" result = runner.invoke(cli, ["run", "--help"]) assert result.exit_code == 0 assert "运行测试用例" in result.output def test_list_command_help(runner): """测试列出命令帮助""" result = runner.invoke(cli, ["list", "--help"]) assert result.exit_code == 0 assert "列出测试用例" in result.output def test_validate_command_help(runner): """测试验证命令帮助""" result = runner.invoke(cli, ["validate", "--help"]) assert result.exit_code == 0 assert "验证测试用例文件" in result.output def test_config_command_help(runner): """测试配置命令帮助""" result = runner.invoke(cli, ["config", "--help"]) assert result.exit_code == 0 assert "查看配置" in result.output