1. 更新测试脚本
首先,确保你的测试脚本 wifi_test.py
配置了日志记录,并包含所有测试用例:
python
import subprocess
import time
import logging
import pytest
import sys
# 配置日志记录
logging.basicConfig(filename='wifi_test.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
logging.getLogger().addHandler(console_handler)
def run_adb_command(command):
"""运行 ADB 命令并返回输出。"""
try:
logging.info(f"执行命令: {command}")
result = subprocess.run(command, shell=True, capture_output=True, text=True, encoding='utf-8', errors='ignore')
output = result.stdout.strip() if result.stdout else None
logging.info(f"命令输出: {output}")
return output
except Exception as e:
logging.error(f"执行命令 '{command}' 时出错: {e}")
return None
def enable_wifi():
"""启用设备上的 WiFi。"""
command = "adb shell svc wifi enable"
run_adb_command(command)
time.sleep(5) # 等待 5 秒以确保 WiFi 已启用
output = run_adb_command("adb shell dumpsys wifi")
if output and "enabled" in output:
logging.info("WiFi 启用成功。")
return True
else:
logging.error("无法启用 WiFi。")
return False
def disable_wifi():
"""禁用设备上的 WiFi。"""
command = "adb shell svc wifi disable"
run_adb_command(command)
time.sleep(3) # 等待 3 秒以确保 WiFi 已禁用
output = run_adb_command("adb shell dumpsys wifi")
if output and "disabled" in output:
logging.info("WiFi 禁用成功。")
return True
else:
logging.error("无法禁用 WiFi。")
return False
def start_wifi_scan():
"""启动 WiFi 扫描。"""
command = "adb shell cmd wifi start-scan"
run_adb_command(command)
def get_scan_results():
"""获取 WiFi 扫描结果。"""
command = "adb shell cmd wifi list-scan-results"
output = run_adb_command(command)
return output
def check_wifi_status():
"""检查 WiFi 状态。"""
command = "adb shell dumpsys wifi"
output = run_adb_command(command)
if output:
if "enabled" in output:
return "enabled"
elif "disabled" in output:
return "disabled"
return "unknown"
@pytest.fixture(scope="module", autouse=True)
def setup_and_teardown():
"""前置条件和后置清理"""
logging.info("前置条件: 确保 WiFi 处于关闭状态。")
status = check_wifi_status()
logging.info(f"当前 WiFi 状态: {status}")
if status == "enabled":
logging.info("WiFi 已启用,尝试禁用 WiFi...")
if not disable_wifi():
logging.error("前置条件失败: 无法禁用 WiFi。终止测试。")
pytest.exit("前置条件失败: 无法禁用 WiFi。终止测试。")
elif status == "disabled":
logging.info("WiFi 已处于关闭状态。")
else:
logging.error("无法确定 WiFi 状态。终止测试。")
pytest.exit("无法确定 WiFi 状态。终止测试。")
yield
logging.info("测试结束,执行后置清理。")
disable_wifi()
def test_enable_wifi():
"""用例 1: 启用 WiFi"""
logging.info("用例 1: 启用 WiFi。")
assert enable_wifi(), "用例 1: 启用 WiFi 失败"
def test_start_wifi_scan():
"""用例 2: 启动 WiFi 扫描并检查扫描结果"""
logging.info("用例 2: 启动 WiFi 扫描并检查扫描结果。")
start_wifi_scan()
logging.info("等待 15 秒以获取扫描结果...")
time.sleep(15) # 等待扫描完成
output = get_scan_results()
assert output, "用例 2: WiFi 扫描结果为空"
logging.info("用例 2: 扫描结果:")
logging.info(output)
def test_disable_wifi():
"""用例 3: 检查 WiFi 状态。如果 WiFi 已启用,尝试在 3 秒内禁用 WiFi。"""
logging.info("用例 3: 检查 WiFi 状态。如果 WiFi 已启用,尝试在 3 秒内禁用 WiFi。")
status = check_wifi_status()
logging.info(f"当前 WiFi 状态: {status}")
if status == "enabled":
logging.info("WiFi 已启用,开始尝试禁用 WiFi...")
assert disable_wifi(), "用例 3: 禁用 WiFi 失败"
else:
logging.info("WiFi 当前未启用,不需要禁用。")
if __name__ == '__main__':
pytest.main()
2. 创建 pytest 配置文件
在你的项目目录下创建一个 pytest.ini
文件,并添加以下内容:
ini
[pytest]
log_cli = true
log_cli_level = INFO
log_file = wifi_test.log
log_file_level = INFO
3. 运行测试
在你的项目目录下,运行以下命令:
bash
pytest wifi_test.py
4. 其他可能问题的排查
- 检查日志文件路径和权限 :确保
wifi_test.log
文件路径正确,并且你有写入权限。 - 检查 pytest 版本 :确保你使用的是支持这些配置的 pytest 版本。可以通过运行
pytest --version
检查版本。 - 检查日志配置 :确认
logging.basicConfig
和pytest.ini
中的日志配置没有冲突。
如果按照这些步骤配置了日志记录和测试用例,应该能正确生成日志文件,并解决用例重复执行的问题。如果还有问题,可以进一步检查 pytest 的配置和命令是否正确。