首页/新闻资讯/正文详情

phpMyAdmin 测试套件实战指南:单元测试与 Selenium 端到端测试环境搭建

发布时间:2026/9/27 12:07:52 来源:云帆数科 栏目:资讯中心
phpMyAdmin 测试套件实战指南:单元测试与 Selenium 端到端测试环境搭建
数据库后端【免费下载链接】phpmyadminA web interface for MySQL and MariaDB项目地址https://gitcode.com/gh_mirrors/ph/phpmyadmin点击查看免费下载本指南围绕 tests/README.rst 展开系统讲解 phpMyAdmin 仓库中tests/目录的组织结构、单元测试与 Selenium 端到端测试的运行原理以及如何通过环境变量、PHPUnit 配置和 BrowserStack/本地 Selenium 完成测试环境的完整搭建。读完本文你将掌握 phpMyAdmin 测试套件的目录规划、关键环境变量的含义与取值、本地与云端两种 WebDriver 接入方式并能直接照着配置跑通登录、建库、查询等端到端场景。tests 目录的定位与访问保护phpMyAdmin 的全部测试代码集中在仓库根目录的tests/下主要包括tests/unit/PHPUnit 单元测试覆盖src/下绝大多数类与控制器约 160 个控制器测试与大量组件测试tests/end-to-end/基于 Selenium WebDriver 的浏览器端到端测试如LoginTest.php、SqlQueryTest.php、CreateDropDatabaseTest.php、CreateRemoveUserTest.php、ExportTest.php、ImportTest.php等tests/bootstrap.php与tests/bootstrap-static.phpPHPUnit 引导文件tests/test_data/导入导出测试用的样例数据SQL、CSV、ODS、XML、GIS 数据等tests/stubs/静态分析用的 PHP stub 文件配套脚本tests/start-local-server与tests/stop-local-server一键拉起/关闭本地 Web 服务与 Selenium 进程。文档特别强调该目录通过.htaccess文件对 Web 访问者进行保护目的是防止测试数据与内部脚本被外部浏览器直接读取。如果你确实需要允许 HTTP 访问该目录需要自行在 Web 服务器层如 Apache 的mod_authz_host模块配置放行规则在 nginx 场景下仓库同样提供了tests/nginx.conf作为端到端测试用的站点配置。默认情况下保持禁止访问即可这与tests/php.ini中open_basedir限定到%ROOT%的安全策略相互呼应。单元测试的运行基础根目录的phpunit.xml定义了测试的组织方式bootstraptests/bootstrap.php每个测试进程启动时先执行 tests/bootstrap.php该文件设置TESTSUITE常量、将 PHPprecision固定为 14避免round(1.2, 2)这类浮点运算出现异常尾数、开启E_ALL全量错误报告、把时区统一为UTC并加载app/constants.php与自动加载文件两个测试套件unittests/unit目录与end-to-endtests/end-to-end目录默认套件为unit覆盖率要求requireCoverageMetadatatrue并在build/logs/下输出 clover 与 junit 报告随机执行顺序executionOrderrandom同时开启failOnRisky、failOnWarning与输出严格性检查保证测试质量。单元测试的基类是 tests/unit/AbstractTestCase.php它会在每个用例执行前清空$_GET、$_POST、$_COOKIE、$_FILES等超全局变量重置Current::$server、Current::$database等运行时状态并清理Cache、Tracker、Config、Twig 模板引擎等静态单例确保用例之间互不污染。同时仓库在 composer.json 中把PhpMyAdmin\Tests\映射到tests/unit、PhpMyAdmin\Tests\Selenium\映射到tests/end-to-end并提供composer phpunit、composer test等快捷命令——composer test会依次执行 phpcs、phpstan、psalm 与 phpunit是整个 CI 的质量入口。单元测试不需要任何 Web 服务器或数据库直接执行即可composer install composer phpunit # 等价于 vendor/bin/phpunit --coloralwaysSelenium 端到端测试前置条件Selenium 测试要真实驱动浏览器访问 phpMyAdmin 界面因此文档列出的前提是一个可访问的 Web 服务器、一个可连接的数据库、以及一个正在运行的 Selenium Hub。测试运行时PHPUnit 会通过环境变量决定被测系统与驱动浏览器分别在哪里。被测系统连接参数以下四个环境变量描述被测的 phpMyAdmin 实例环境变量用途TESTSUITE_USER登录被测界面TESTSUITE_URL所使用的用户名TESTSUITE_PASSWORD登录被测界面所使用的密码TESTSUITE_DATABASE_PREFIX测试库名前缀文档明确提示避免使用_这类数据库分组字符避免与 MySQL 分组规则冲突TESTSUITE_URL被测 phpMyAdmin 实例的访问 URL例如http://localhost/phpmyadmin/从 tests/end-to-end/TestBase.php 的setUp()可以看出这些参数缺一不可当TESTSUITE_URL未定义时测试直接跳过当TESTSUITE_USER未定义时同样跳过并提示可以补充TESTSUITE_PASSWORD而当TESTSUITE_DATABASE_PREFIX缺失时getDbPrefix()返回空字符串。每个测试类还会通过bin2hex(random_bytes(4))生成随机库名getDbPrefix() 随机串并执行CREATE DATABASE IF NOT EXISTS保证用例隔离。本地 Selenium 参数如果使用本地 Selenium 服务器还需要定义环境变量用途TESTSUITE_SELENIUM_HOSTSelenium Hub 所在主机如127.0.0.1TESTSUITE_SELENIUM_PORT连接端口默认习惯为4444TESTSUITE_SELENIUM_BROWSER使用的浏览器支持chrome、safari、edge这些值会由TestBase::hasSeleniumConfig()与getHubUrl()读取并拼装成 WebDriver 端点http://HOST:PORT/wd/hub。浏览器能力由getCapabilities()构建默认chrome会附加--langen参数并开启浏览器日志收集safari、edge分支则在 CI 模式下强制指定操作系统与浏览器版本。phpunit.xml 中的标准配置示例文档给出了一段可直接放入phpunit.xml的php配置片段php env nameTESTSUITE_USER valueroot/ env nameTESTSUITE_PASSWORD valueroot/ env nameTESTSUITE_DATABASE_PREFIX valuetest/ env nameTESTSUITE_URL valuehttp://localhost/phpmyadmin/ / env nameTESTSUITE_SELENIUM_HOST value127.0.0.1 / env nameTESTSUITE_SELENIUM_PORT value4444 / /php注意根目录 phpunit.xml 实际只内置了LC_ALLC.UTF8环境变量上述 Selenium 变量需要你自己按需追加或在 shell 中以export TESTSUITE_......的方式导出。二者效果等价因为TestBase内部全部通过getenv()读取。端到端测试的登录与查询机制TestBase还封装了一整套浏览器操作原语理解它们有助于编写或调试端到端用例login()先退出已登录状态等待页面加载完成在语言选择器可用时切换到 English然后通过input_username、input_password、input_go三个表单元素完成登录登录是否成功以server-breadcrumb元素是否存在为标志dbQuery()在一个独立的 SQL 标签页窗口执行任意 SQL借助 CodeMirror 注入文本并点击button_submit_query返回是否出现.result_query .alert-successcreateDatabase()为每个测试类创建带随机后缀的独立数据库skipIfNotPMADB()/fixUpPhpMyAdminStorage()通过index.php?route/check-relations检查并自动修复 phpMyAdmin 配置存储pmadb。若被测环境尚未配置这些则可能触发markTestSkipped跳过。整个测试套件根目录还提供了 tests/config.e2e.inc.php其中以cookie认证方式连接127.0.0.1并把上传目录指向../tests/test_data/可作为端到端部署的最小参考配置。使用 BrowserStack 云端执行除了本地 SeleniumphpMyAdmin 官方 CI 使用 BrowserStack 云测试服务。文档指出项目已在 GitHub CI 上运行这些 Selenium 测试若要在本地复现需要先安装 BrowserStack Local 工具以打通本机被测服务 → 云端浏览器的流量隧道。只需设置以下两个环境变量TestBase便会自动切换到云端模式环境变量用途TESTSUITE_BROWSERSTACK_USERBrowserStack 用户名TESTSUITE_BROWSERSTACK_KEYBrowserStack 访问密钥getHubUrl()的判定顺序是只要同时存在TESTSUITE_BROWSERSTACK_USER与TESTSUITE_BROWSERSTACK_KEY就拼接https://user:keyhub-cloud.browserstack.com/wd/hub否则回退到本地 Selenium 地址。addCapabilities()还会根据BUILD_TAGJenkins或GITHUB_ACTIONGitHub Actions设置bstack:options的构建名、项目名与会话名方便在 BrowserStack 控制台追溯每次运行。本地 BrowserStack 完整命令流程文档给出了基于 PHP 内置服务器的一套完整操作序列关键步骤与说明如下# 1. 在环境中导出 BrowserStack 凭据 export TESTSUITE_BROWSERSTACK_USERyour_username export TESTSUITE_BROWSERSTACK_KEYyour_key # 2. 指定测试运行端口并据此导出被测 URL export TESTSUITE_PORT9000 export TESTSUITE_URLhttp://127.0.0.1:$TESTSUITE_PORT/ # 3. 启动 PHP 内置服务器 php --server 127.0.0.1:$TESTSUITE_PORT php.log # 4. 启动 BrowserStack Local 客户端将本地流量转发给云端 ~/browserstack/BrowserStackLocal -localIdentifier Manual $TESTSUITE_BROWSERSTACK_KEY 127.0.0.1,$TESTSUITE_PORT,0 # 5. 测试结束后停止 BrowserStack Local ~/browserstack/BrowserStackLocal --daemon stop逐行解读第 2 步把被测地址定为http://127.0.0.1:9000/与TESTSUITE_URL必须严格对应第 3 步启动的 PHP 内置服务器要求 phpMyAdmin 源码可作为文档根目录被访问实践中也可用 nginx php-fpm 替代见下文配套脚本第 4 步的 BrowserStack Local 进程会建立一个从云端到本机的安全隧道-localIdentifier Manual与addCapabilities()中的localIdentifier相呼应确保云端浏览器请求能落到你的本机服务上第 5 步通过守护进程方式停止隧道避免残留进程占用端口。配套的一键启动/停止脚本仓库为 CI 的CI_MODEselenium场景准备了两个脚本能显著简化本地复现tests/start-local-server仅在CI_MODEselenium时生效。它会创建一个临时目录将tests/nginx.conf、tests/php-fpm.conf、tests/php.ini复制进去并把其中的%DIR%、%ROOT%占位符替换为真实路径随后启动 php-fpm 与 nginx若配置了 BrowserStack 密钥则自动下载并启动BrowserStackLocal否则未设置SKIP_STANDALONE时通过selenium-standalone启动本地 Selenium并把临时目录路径记录到/tmp/last_temp_dir_phpMyAdminTests。其中FPM_PATH可覆盖 php-fpm 二进制路径例如FPM_PATHphp-fpm7.4NGINX_PATH同理tests/stop-local-server按序停掉 BrowserStack Local、selenium-standalone、nginx 与 php-fpm并清理临时目录。配合tests/php.ini基于生产配置upload_max_filesize 512M、post_max_size 8M、allow_url_fopen Off等与tests/nginx.conf即可获得与 CI 一致的被测环境。环境变量与 WebDriver 端点选择速查综合 tests/README.rst 与 tests/end-to-end/TestBase.php 的判定逻辑可整理出如下决策表场景必备环境变量实际连接的 WebDriver 端点本地 SeleniumTESTSUITE_SELENIUM_HOSTTESTSUITE_SELENIUM_PORThttp://host:port/wd/hubBrowserStackTESTSUITE_BROWSERSTACK_USERTESTSUITE_BROWSERSTACK_KEYhttps://user:keyhub-cloud.browserstack.com/wd/hub两者皆无—空所有用例被markTestSkipped跳过另外两个可选开关值得留意TESTSUITE_SELENIUM_COVERAGE与TESTSUITE_FULL在setUp()中作为注解注明待实现说明覆盖采集与全量模式是预留能力而CI_MODEselenium则控制start-local-server/stop-local-server是否真正执行启动动作。常见问题与排查思路测试全部被跳过优先检查TESTSUITE_URL、TESTSUITE_USER是否导出TestBase::setUp()会因这两者缺失直接跳过并给出明确提示信息。数据库前缀冲突TESTSUITE_DATABASE_PREFIX不要包含_否则可能与 MySQL 按前缀分组的语义冲突导致库名匹配异常。BrowserStack 无法访问本机确认 BrowserStack Local 隧道已启动、-localIdentifier与能力中的标识一致且TESTSUITE_URL使用的是隧道能回传的127.0.0.1:port地址。Safari 特定功能不可用TestBase对 Safari 的键盘输入、鼠标移动、Alert 等操作做了兼容处理不支持的场景会调用markTestSkipped这是预期行为而非缺陷见keys()、moveto()、alertText()的实现。pmadb 相关用例失败通过index.php?route/check-relations检查配置存储用例会尝试自动修复若修复失败则跳过因此需要被测库具备创建配置存储表的权限。小结phpMyAdmin 的测试套件由无外部依赖的 PHPUnit 单元测试与依赖 Web 服务器 数据库 WebDriver 的 Selenium 端到端测试两层构成。单元测试的基线在 tests/bootstrap.php 与 tests/unit/AbstractTestCase.php 中建立端到端测试则以TESTSUITE_*系列环境变量为唯一配置入口由 tests/end-to-end/TestBase.php 统一决策连接本地 Selenium 还是 BrowserStack 云端。只要按 tests/README.rst 给出的参数表完成环境变量与 PHPUnit 配置再配合start-local-server/stop-local-server脚本即可在本地完整复现 CI 的浏览器测试链路。赞分享数据库后端【免费下载链接】phpmyadminA web interface for MySQL and MariaDB项目地址https://gitcode.com/gh_mirrors/ph/phpmyadmin点击查看免费下载相关推荐FastAPI SSE完整指南如何轻松实现实时数据推送FastAPI SSE完整指南如何轻松实现实时数据推送 FastAPI SSEServer Sent Events是FastAPI框架中用于实现服务器向客后端Web框架API设计AIBrix KV 事件同步端到端测试实战指南环境搭建、测试运行与调试排障AIBrix KV 事件同步端到端测试实战指南环境搭建、测试运行与调试排障 本篇指南面向 AIBrix 的 KV Cache 事件同步KV Event Sy云原生大模型模型推理服务API网关LLM 网关弹性伸缩可观测性后端Elementor Playwright 端到端测试指南本地 WordPress 环境搭建、服务配置与测试套件运行Elementor Playwright 端到端测试指南本地 WordPress 环境搭建、服务配置与测试套件运行 Elementor 开源仓库当前工作目录CMS前端后端低代码上一篇使用 Paho-MQTT 为夜灯接入互联网Raspberry Pi 与虚拟 IoT 设备连接 MQTT 代理实战下一篇gpui-kit Combobox 原语无样式受控搜索选择框的完整实现指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的:TaoToken 配置与验证实录
我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的:TaoToken 配置与验证实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 12:07:52

postgresql源码学习(27)—— Windows vscode远程调试Linux上的postgresql:launch.json与gdbserver配置实战
postgresql源码学习(27)—— Windows vscode远程调试Linux上的postgresql:launch.json与gdbserver配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 12:07:46

网站设计如何收费标准揭秘:拒绝扯皮的行业最佳实践
网站设计如何收费标准揭秘:拒绝扯皮的行业最佳实践

网站设计如何收费标准揭秘:拒绝扯皮的行业最佳实践 改个需求建站公司拖一周,这种经历是不是让你觉得心累?很多老板在签合同前只看价格,签完后才发现,所谓的“全包”全是坑,稍微动个像素位置,对方就报“新增功能费”。其实, 网站设计如何收费标准… · 2026/9/27 12:07:34

探索 MCP C# SDK:用 TaoToken 统一 Key 打通大语言模型与应用对接
探索 MCP C# SDK:用 TaoToken 统一 Key 打通大语言模型与应用对接

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 16:23:44

Flutter 代码覆盖率插桩实战:用 FlutterCodeX + AspectD 打通 TaoToken 配置链路
Flutter 代码覆盖率插桩实战:用 FlutterCodeX + AspectD 打通 TaoToken 配置链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 16:23:44

【Claude Code】接入 MinMax 的 Token Plan:settings.json 配置与 API KEY 验证
【Claude Code】接入 MinMax 的 Token Plan:settings.json 配置与 API KEY 验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 16:23:38

婚庆网站设计避坑指南:3个技术选型注意事项与备案实操
婚庆网站设计避坑指南:3个技术选型注意事项与备案实操

婚庆网站设计避坑指南:3个技术选型注意事项与备案实操 备案流程一头雾水?别急,做婚庆网站设计,技术选型不对,后期改起来能把人逼疯。很多老板觉得网站就是个展示页面,其实背后藏着服务器配置、CMS系统、SSL证书这些硬骨头。今天咱们不聊虚的,直… · 2026/9/27 16:23:31

建立个人网站代码要花多少钱?3步搞定防黑指南
建立个人网站代码要花多少钱?3步搞定防黑指南

建立个人网站代码要花多少钱?3步搞定防黑指南 昨晚三点,我手机突然疯狂震动。一个做外贸的朋友发语音过来,声音都在抖:“我网站首页挂了个博彩广告,全是代码!后台进不去了,SEO排名全没了,这破网站当初建站费才花了两千多,现在要修多少钱?”… · 2026/9/27 16:23:06

OpenClaw + 阿里宜搭联动:自动生成低代码表单、同步业务数据到 MySQL
OpenClaw + 阿里宜搭联动:自动生成低代码表单、同步业务数据到 MySQL

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 16:22:29

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码