当前位置:首页>python>Python+Pytest+Allure+Playwright 自动化测试框架搭建教程

Python+Pytest+Allure+Playwright 自动化测试框架搭建教程

  • 2026-03-23 20:13:37
Python+Pytest+Allure+Playwright 自动化测试框架搭建教程

Python + Pytest + Allure + Playwright 自动化测试框架搭建教程

本文详细介绍如何搭建一个企业级的自动化测试框架,包含 Python + Pytest + Allure + Playwright。


一、技术栈介绍

1.1 各技术简介

技术 作用 特点
Python 编程语言 简单易学、生态丰富
Pytest 测试框架 简洁强大、插件丰富
Allure 测试报告 美观直观、支持历史趋势
Playwright 自动化工具 跨浏览器、自动等待

1.2 框架架构

自动化测试框架/
├── core/                  # 核心模块
│   ├── base.py           # 基类封装
│   ├── driver.py         # 浏览器驱动
│   └── logger.py         # 日志管理
├── pages/                # 页面对象
│   ├── base_page.py     # 页面基类
│   └── demo_page.py     # 具体页面
├── testcases/           # 测试用例
│   ├── test_login.py
│   └── test_search.py
├── utils/               # 工具类
│   ├── config.py       # 配置管理
│   └── excel_helper.py # 数据驱动
├── data/                # 测试数据
│   └── test_data.xlsx
├── reports/             # 测试报告
├── requirements.txt    # 依赖
└── pytest.ini          # 配置文件

二、环境准备

2.1 安装 Python

# 检查 Python 版本
python3 --version

# 建议使用 Python 3.8+

2.2 创建虚拟环境

# 创建项目目录
mkdir auto_framework && cd auto_framework

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
# Linux/Mac:
source venv/bin/activate
# Windows:
venv\Scripts\activate

2.3 安装依赖

pip install pytest playwright allure-pytest pytest-playwright

# 初始化 Playwright
playwright install chromium

三、核心配置

3.1 requirements.txt

pytest==7.4.3
playwright==1.40.0
allure-pytest==2.13.2
pytest-html==4.1.1
pytest-xdist==3.5.0
pytest-repeat==0.9.3
python-dotenv==1.0.0
openpyxl==3.1.2
loguru==0.7.2

3.2 pytest.ini

[pytest]
# 测试路径
testpaths = testcases

# 文件匹配
python_files = test_*.py
python_classes = Test*
python_functions = test_*

# 标记
markers =
    smoke: 冒烟测试
    regression: 回归测试
    login: 登录相关
    slow: 慢速测试

# 日志
log_cli = true
log_cli_level = INFO
log_cli_format = %(asctime)s [%(levelname)8s] %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S

# 报告
addopts = -v --tb=short --html=reports/report.html --self-contained-html

3.3 .env 配置文件

# .env 文件
ENV=TEST
BASE_URL=https://demo.test.com
BROWSER=chromium
HEADLESS=true
TIMEOUT=30000

四、核心代码实现

4.1 浏览器驱动封装 (core/driver.py)

import os
from playwright.sync_api import sync_playwright
from dotenv import load_dotenv

load_dotenv()

class BrowserDriver:
    """浏览器驱动管理"""
    
    @staticmethod
    def get_browser():
        """获取浏览器实例"""
        playwright = sync_playwright().start()
        browser = playwright.chromium.launch(
            headless=os.getenv("HEADLESS""true").lower() == "true",
            args=['--disable-blink-features=AutomationControlled']
        )
        return playwright, browser
    
    @staticmethod
    def get_context(browser):
        """获取浏览器上下文"""
        context = browser.new_context(
            viewport={'width'1920'height'1080},
            locale='zh-CN'
        )
        return context
    
    @staticmethod
    def get_page(context):
        """获取新页面"""
        page = context.new_page()
        page.set_default_timeout(int(os.getenv("TIMEOUT""30000")))
        return page

4.2 页面基类 (pages/base_page.py)

from playwright.sync_api import Page
from loguru import logger

class BasePage:
    """页面对象基类"""
    
    def __init__(self, page: Page):
        self.page = page
    
    def goto(self, url: str):
        """跳转URL"""
        logger.info(f"打开页面: {url}")
        self.page.goto(url)
    
    def click(self, selector: str):
        """点击元素"""
        logger.info(f"点击元素: {selector}")
        self.page.click(selector)
    
    def fill(self, selector: str, value: str):
        """输入文本"""
        logger.info(f"输入内容到 {selector}{value}")
        self.page.fill(selector, value)
    
    def get_text(self, selector: str) -> str:
        """获取文本"""
        return self.page.text_content(selector)
    
    def wait_for_selector(self, selector: str, timeout: int = 30000):
        """等待元素出现"""
        self.page.wait_for_selector(selector, timeout=timeout)
    
    def screenshot(self, name: str = "screenshot"):
        """截图"""
        self.page.screenshot(path=f"reports/screenshots/{name}.png")
    
    def is_visible(self, selector: str) -> bool:
        """检查元素是否可见"""
        return self.page.is_visible(selector)

4.3 日志配置 (core/logger.py)

import sys
from loguru import logger
import os

# 移除默认处理器
logger.remove()

# 控制台输出
logger.add(
    sys.stdout,
    format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan> - <level>{message}</level>",
    level="INFO"
)

# 文件输出
log_dir = "reports/logs"
os.makedirs(log_dir, exist_ok=True)
logger.add(
    f"{log_dir}/{{time:YYYY-MM-DD}}.log",
    rotation="00:00",
    retention="30 days",
    level="DEBUG",
    format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function} - {message}"
)

五、测试用例示例

5.1 conftest.py ( fixtures )

import pytest
from playwright.sync_api import sync_playwright
from core.driver import BrowserDriver
from core.logger import logger
import os

@pytest.fixture(scope="session")
def browser():
    """浏览器 fixture"""
    playwright, browser = BrowserDriver.get_browser()
    yield browser
    browser.close()
    playwright.stop()

@pytest.fixture(scope="function")
def page(browser):
    """页面 fixture"""
    context = browser.new_context(
        viewport={'width'1920'height'1080}
    )
    page = context.new_page()
    yield page
    context.close()

@pytest.fixture(scope="function", autouse=True)
def test_info(request):
    """打印测试信息"""
    logger.info(f"开始执行: {request.node.name}")
    yield
    logger.info(f"结束执行: {request.node.name}")

5.2 登录测试用例

import pytest
from pages.login_page import LoginPage
from pages.home_page import HomePage
from core.logger import logger

class TestLogin:
    """登录测试"""
    
    @pytest.mark.login
    def test_login_success(self, page):
        """测试登录成功"""
        login_page = LoginPage(page)
        home_page = HomePage(page)
        
        # 执行登录
        login_page.goto("https://demo.test.com/login")
        login_page.login("testuser""password123")
        
        # 断言
        assert home_page.is_logged_in(), "登录失败"
        logger.info("登录成功 ✓")
    
    @pytest.mark.login
    def test_login_failed(self, page):
        """测试登录失败"""
        login_page = LoginPage(page)
        
        login_page.goto("https://demo.test.com/login")
        login_page.login("wronguser""wrongpass")
        
        # 断言登录失败提示
        assert login_page.get_error_msg() == "用户名或密码错误"
        logger.info("登录失败用例通过 ✓")

六、Allure 报告配置

6.1 生成 Allure 报告

# 运行测试并生成 Allure 数据
pytest testcases/ --alluredir=reports/allure-results

# 生成 HTML 报告
allure serve reports/allure-results

6.2 添加测试描述

import allure

@allure.title("登录成功测试")
@allure.description("验证用户使用正确账号密码可以成功登录")
@allure.severity(allure.severity_level.BLOCKER)
@allure.feature("登录功能")
@allure.story("用户登录")
def test_login_success(page):
    """测试登录成功"""
    pass

6.3 附件支持

def test_with_screenshot(page):
    """带截图的测试"""
    page.goto("https://example.com")
    
    # 添加截图
    page.screenshot(path="screenshot.png")
    allure.attach.file("screenshot.png", attachment_type=allure.attachment_type.PNG)
    
    # 添加日志
    allure.attach("这是测试日志", name="日志", attachment_type=allure.attachment_type.TEXT)

七、数据驱动测试

7.1 CSV 数据驱动

import pytest
import csv

@pytest.mark.parametrize("username,password,expected", [
    ("user1""pass1""success"),
    ("user2""pass2""fail"),
]
)

def test_login_data_driven(username, password, expected):
    """CSV数据驱动测试"""
    print(f"Testing: {username} / {password}")

7.2 Excel 数据驱动

import openpyxl

def get_test_data():
    """从Excel读取测试数据"""
    wb = openpyxl.load_workbook("data/test_data.xlsx")
    ws = wb.active
    
    data = []
    for row in ws.iter_rows(min_row=2, values_only=True):
        data.append(row)
    return data

@pytest.mark.parametrize("username,password,expected", get_test_data())
def test_login_excel(username, password, expected):
    """Excel数据驱动"""
    print(f"Testing: {username}")

八、CI/CD 集成

8.1 GitHub Actions

name: Auto Test

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      
      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          playwright install chromium
      
      - name: Run tests
        run: pytest testcases/ --alluredir=reports/allure-results
      
      - name: Upload Allure results
        uses: actions/upload-artifact@v3
        if: always()
        with:
          name: allure-results
          path: reports/allure-results

8.2 Jenkinsfile

pipeline {
    agent any
    
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        
        stage('Install') {
            steps {
                sh 'pip install -r requirements.txt'
                sh 'playwright install chromium'
            }
        }
        
        stage('Test') {
            steps {
                sh 'pytest testcases/ --alluredir=reports/allure-results'
            }
        }
        
        stage('Report') {
            steps {
                allure includeProperties: falseresults: [[path: 'reports/allure-results']], report: 'reports/allure-report'
            }
        }
    }
}

九、常用命令汇总

9.1 测试运行命令

# 运行所有测试
pytest

# 运行指定文件
pytest testcases/test_login.py

# 运行指定标记
pytest -m smoke

# 跳过标记
pytest -m "not slow"

# 并行执行
pytest -n 4

# 失败重试
pytest --reruns 3

# 生成HTML报告
pytest --html=reports/report.html

# 生成Allure报告
pytest --alluredir=reports/allure-results

9.2 Allure 报告命令

# 生成报告
allure generate reports/allure-results -o reports/allure-report

# 打开报告
allure open reports/allure-report

# 启动服务
allure serve reports/allure-results

十、常见问题

Q1: Playwright 浏览器下载失败

解决:

playwright install chromium --with-deps

Q2: Allure 报告中文乱码

解决:

allure generate -c -Dallure.results.directory=reports/allure-results -Dallure.link.issue.pattern=https://jira.test.com/browse/{}

Q3: 元素找不到

解决: 使用自动等待

page.wait_for_load_state("networkidle")
page.click("selector", timeout=10000)

Q4: 截图保存失败

解决: 确保目录存在

os.makedirs("reports/screenshots", exist_ok=True)

十一、总结

本框架特点:

结构清晰 - Page Object 模式 ✅ 易于维护 - 页面元素与逻辑分离 ✅ 报告美观 - Allure 集成 ✅ 数据驱动 - 支持 Excel/CSV ✅ CI/CD 集成 - 支持 GitHub Actions/Jenkins ✅ 日志完善 - 详细的执行日志

快去搭建你的自动化测试框架吧!

需要帮助随时问我!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 09:56:25 HTTP/2.0 GET : https://f.mffb.com.cn/a/481991.html
  2. 运行时间 : 0.144210s [ 吞吐率:6.93req/s ] 内存消耗:4,714.90kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=3efd068696328d9e8e1f8ae62bbbe7f0
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000516s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000907s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.006024s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000872s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000618s ]
  6. SELECT * FROM `set` [ RunTime:0.000542s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000635s ]
  8. SELECT * FROM `article` WHERE `id` = 481991 LIMIT 1 [ RunTime:0.005395s ]
  9. UPDATE `article` SET `lasttime` = 1774576585 WHERE `id` = 481991 [ RunTime:0.013460s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000307s ]
  11. SELECT * FROM `article` WHERE `id` < 481991 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001233s ]
  12. SELECT * FROM `article` WHERE `id` > 481991 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002266s ]
  13. SELECT * FROM `article` WHERE `id` < 481991 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007723s ]
  14. SELECT * FROM `article` WHERE `id` < 481991 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004901s ]
  15. SELECT * FROM `article` WHERE `id` < 481991 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.009307s ]
0.146647s