【使用 Pytest 记录日志文件并确保测试用例正常执行】

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.basicConfigpytest.ini 中的日志配置没有冲突。

如果按照这些步骤配置了日志记录和测试用例,应该能正确生成日志文件,并解决用例重复执行的问题。如果还有问题,可以进一步检查 pytest 的配置和命令是否正确。

相关推荐
小码哥说测试5 小时前
接口测试用例设计的关键步骤与技巧解析!
自动化测试·测试工具·jmeter·职场和发展·测试用例·接口测试·postman
qq_433716951 天前
测试分层:减少对全链路回归依赖的探索!
自动化测试·软件测试·功能测试·测试工具·回归·pytest·postman
测试老哥2 天前
需求不明确时如何设计测试用例?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
程序员雷叔2 天前
外包功能测试就干了4周,技术退步太明显了。。。。。
功能测试·测试工具·面试·职场和发展·单元测试·测试用例·postman
程序员小雷2 天前
应对自动化测试中的异步操作:策略与实践
功能测试·selenium·测试工具·jmeter·单元测试·测试用例·postman
Dreams°1232 天前
【新手入门软件测试--该如何分辨前后端问题及如何定位日志--前后端问题分辨与日志定位查询问题】
功能测试·测试工具·测试用例
开心呆哥3 天前
【Android Wi-Fi 操作命令指南】
android·python·pytest
互联网杂货铺4 天前
软件测试八股文个人总结
自动化测试·软件测试·功能测试·测试工具·面试·职场和发展·测试用例
小码哥说测试4 天前
测试分层:减少对全链路回归依赖的探索!
自动化测试·软件测试·人工智能·测试工具·appium·pytest·postman
帅得不敢出门5 天前
Python+Appium+Pytest+Allure自动化测试框架-安装篇
python·appium·自动化·pytest·测试·allure