You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket Pipeline中PHPUnit单元测试报PDO认证方法未知错误求助

解决Bitbucket Pipeline中PHPUnit测试遇到的MySQL认证错误

Hey Jacobo, I see you're hitting a MySQL authentication issue in Bitbucket Pipeline even though your local tests pass—let's figure this out step by step.

首先,定位问题根源

虽然你的测试代码看起来都是调用外部API服务,但那个PDOException说明你的Laravel测试环境在Pipeline里尝试连接MySQL数据库。新版MySQL(8.0+)默认使用caching_sha2_password认证方式,而PHP的PDO驱动(尤其是旧版本PHP对应的驱动)不支持这个认证协议,直接导致连接失败。

本地测试没问题的原因大概率是你本地的MySQL是5.x版本(默认用mysql_native_password),或者你已经手动修改过本地MySQL的认证方式,所以没有触发这个错误。

解决方案:修改Bitbucket Pipeline的MySQL服务配置

你需要在bitbucket-pipelines.yml里配置MySQL服务时,强制它使用旧的认证方式,让PHP的PDO能正常连接。

示例的bitbucket-pipelines.yml配置:

image: php:7.4-fpm  # 替换成你项目实际使用的PHP版本

pipelines:
  default:
    - step:
        services:
          - mysql
        script:
          - composer install --no-dev --optimize-autoloader
          - cp .env.testing .env
          - php artisan config:clear
          - php artisan test  # 执行PHPUnit测试
definitions:
  services:
    mysql:
      image: mysql:8.0
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: your_test_db
        MYSQL_USER: test_user
        MYSQL_PASSWORD: test_password
      command: --default-authentication-plugin=mysql_native_password  # 关键配置项

额外检查:Laravel测试环境的数据库配置

确保你的.env.testing文件(或者在Pipeline中设置的环境变量)的数据库连接信息和上面的MySQL服务配置完全匹配:

DB_CONNECTION=mysql
DB_HOST=mysql  # Pipeline里的服务名就是容器的主机名
DB_PORT=3306
DB_DATABASE=your_test_db
DB_USERNAME=test_user
DB_PASSWORD=test_password

顺便提一下测试代码里的小问题(虽然不是本次错误的原因)

我扫了一眼你的代码,发现几个变量名拼写错误,可能会导致后续测试失败:

  • testDumies方法里,你用$games = DummyService::getDummies();但断言用的是count($dummies),变量名不匹配
  • DummyService::getDummies()里,你把API返回值赋值给$games,但循环的是$dummies,变量名错误
  • getDummiesOfUserInUrl里,$dummies = $data['dummiess'];多了一个s,会触发数组索引不存在的错误

这些小问题本地可能没暴露(比如你用了Mock或者API返回结构刚好兼容),但建议修正后再测试哦。

内容的提问来源于stack exchange,提问作者Jacobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:23:27