Php 如何根据不同的依赖版本(使用composer)自动化本地测试?

Php 如何根据不同的依赖版本(使用composer)自动化本地测试?,php,testing,composer-php,automated-tests,Php,Testing,Composer Php,Automated Tests,我有一个应用程序,它必须与不同版本的特定软件包一起工作。 我想对包的不同版本自动运行本地测试 怎么做的 我可以想出一种手动方式: 更改composer.json 运行composer更新 运行测试 用另一个版本重复 更新: 如前所述,我可以在现有composer.json的基础上再添加一个版本: composer需要供应商/软件包:$(我的软件包版本) 运行测试 拉另一个版本 但你必须小心,因为你正在弄乱应用程序的工作副本。正如建议在另一个地方克隆应用程序一样,将新版本拉到那里并在那里执

我有一个应用程序,它必须与不同版本的特定软件包一起工作。 我想对包的不同版本自动运行本地测试

怎么做的

我可以想出一种手动方式:

  • 更改composer.json
  • 运行
    composer更新
  • 运行测试
  • 用另一个版本重复
更新:

如前所述,我可以在现有composer.json的基础上再添加一个版本:

  • composer需要供应商/软件包:$(我的软件包版本)
  • 运行测试
  • 拉另一个版本

但你必须小心,因为你正在弄乱应用程序的工作副本。正如建议在另一个地方克隆应用程序一样,将新版本拉到那里并在那里执行测试。

受这个问题的启发,我开发了一个用于此目的的实用程序

引入多元化测试:

与在CI服务器中运行测试相比,它的主要优势在于,它允许您在提交之前,甚至在编写代码之前测试正在进行的工作——例如,如果您不想在TTD进程中创建红色测试之后进行显式提交

如何使用 由
composer安装需要ob-ivan/diversitest

添加如下所示的配置文件:

# diversitest.yaml
package_manager: 'composer require $package $version'
test_runner: 'vendor/bin/phpunit'
packages:
    illuminate/support:
        - 5.4.*
        - 5.5.*
并与以下内容一起运行:

vendor/bin/diversitest
这会将您的工作目录复制到一个临时文件夹,并使用config提供的命令循环到安装依赖项版本和运行测试中

请注意,如果您列出了几个包,每个包都有一个版本列表,那么它将通过所有提供的
package:version
对的笛卡尔乘积


该实用程序仍处于开发阶段,欢迎在GitHub问题页面上提交功能请求和错误报告。

我想知道本地运行测试是否是实现此目标的最佳方法。你想在测试优先的开发过程中使用它吗?我想确保包的不同版本在推送到repo之前不会与我的应用程序的代码冲突。当我更改应用程序时,我希望对该软件包的所有受支持版本执行测试。运行本地测试是检测问题的最快途径,对吗?如果您可以让它比部署到构建服务器更快地工作,那么是的。人们可能会发现为这类任务设置Jenkins/Bambor/Travis等更容易。或者,您描述的手动过程可以通过shell脚本实现自动化。它唯一的缺点是,它使您的工作副本处于可能被修改的状态。我的建议是,脚本将您的repo签出到一个临时目录并在那里运行。但如果脚本中断(ctrl+c?系统中断?致命错误?),则应注意整洁地清理。我相信我可以绘制一个脚本,但这需要一个示例回购来运行它。你介意提供一个吗?当然,这个回购协议。请参见
lighting/support
dependency,它可以是5.5+,也可以是5.4+。