You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
5.2 KiB

4 months ago
"""
测试Shell命令执行等待时间功能
"""
import asyncio
import time
import pytest
from app.services.shell_command_service import ShellCommandService
from app.models.adb_models import (
ShellCommandTask, DeviceShellTask, UnifiedShellCommandRequest
)
@pytest.mark.asyncio
async def test_shell_command_wait_time():
"""测试Shell命令执行等待时间功能"""
service = ShellCommandService()
# 创建测试请求
request = UnifiedShellCommandRequest(
tasks=[
DeviceShellTask(
device_id="test_device_001",
commands=[
ShellCommandTask(
command="echo 'test1'",
timeout=30,
wait_time=1.0, # 等待1秒
description="测试命令1"
),
ShellCommandTask(
command="echo 'test2'",
timeout=30,
wait_time=0.5, # 等待0.5秒
description="测试命令2"
),
ShellCommandTask(
command="echo 'test3'",
timeout=30,
wait_time=2.0, # 等待2秒
description="测试命令3"
)
],
sequential=True
)
],
parallel_devices=False,
parallel_commands=False
)
# 记录开始时间
start_time = time.time()
# 执行命令
result = await service.execute_unified_shell_commands(request)
# 记录结束时间
end_time = time.time()
total_time = end_time - start_time
# 验证结果
assert result["success"] is True
assert "data" in result
assert result["data"]["total_devices"] == 1
assert result["data"]["total_commands"] == 3
# 验证等待时间(总时间应该至少包含所有等待时间)
# 3个命令的等待时间总和:1.0 + 0.5 + 2.0 = 3.5秒
# 加上执行时间,总时间应该大于3.5秒
assert total_time >= 3.5, f"总执行时间 {total_time} 秒应该大于等于3.5秒"
# 验证设备结果
device_results = result["data"]["device_results"]
assert len(device_results) == 1
device_result = device_results[0]
assert device_result["device_id"] == "test_device_001"
assert device_result["total_commands"] == 3
assert device_result["success_commands"] == 3
# 验证命令结果
command_results = device_result["results"]
assert len(command_results) == 3
# 验证每个命令的等待时间
for i, cmd_result in enumerate(command_results):
expected_wait_times = [1.0, 0.5, 2.0]
assert cmd_result["wait_time"] == expected_wait_times[i]
assert cmd_result["command"] == f"echo 'test{i+1}'"
@pytest.mark.asyncio
async def test_shell_command_no_wait_time():
"""测试Shell命令执行无等待时间功能"""
service = ShellCommandService()
# 创建测试请求(无等待时间)
request = UnifiedShellCommandRequest(
tasks=[
DeviceShellTask(
device_id="test_device_002",
commands=[
ShellCommandTask(
command="echo 'test1'",
timeout=30,
wait_time=0.0, # 无等待时间
description="测试命令1"
),
ShellCommandTask(
command="echo 'test2'",
timeout=30,
wait_time=0.0, # 无等待时间
description="测试命令2"
)
],
sequential=True
)
],
parallel_devices=False,
parallel_commands=False
)
# 记录开始时间
start_time = time.time()
# 执行命令
result = await service.execute_unified_shell_commands(request)
# 记录结束时间
end_time = time.time()
total_time = end_time - start_time
# 验证结果
assert result["success"] is True
assert "data" in result
assert result["data"]["total_devices"] == 1
assert result["data"]["total_commands"] == 2
# 验证无等待时间时执行时间应该很短
assert total_time < 1.0, f"无等待时间时总执行时间 {total_time} 秒应该小于1秒"
# 验证设备结果
device_results = result["data"]["device_results"]
assert len(device_results) == 1
device_result = device_results[0]
assert device_result["device_id"] == "test_device_002"
assert device_result["total_commands"] == 2
assert device_result["success_commands"] == 2
# 验证命令结果
command_results = device_result["results"]
assert len(command_results) == 2
# 验证每个命令的等待时间
for cmd_result in command_results:
assert cmd_result["wait_time"] == 0.0
if __name__ == "__main__":
# 运行测试
asyncio.run(test_shell_command_wait_time())
asyncio.run(test_shell_command_no_wait_time())
print("所有测试通过!")