perl – 我可以重新测试所有已安装的CPAN模块吗?
如果模块A依赖于模块B并且模块B升级,则A可能由于更改而中断.我的想法是在升级B后重新测试A和B.
我认为最简单的方法就是重新测试可以重新测试的所有内容:从CPAN下载每个已安装的模块并执行其测试脚本. 有没有办法下载和重新测试? 如果没有办法,是否有任何帮助/ API,所以我可以实现这样的工具? 我基本上需要 >查询安装的内容(包括版本号) 解决方法
随核心Perl一起提供的cpan工具包含-l选项,该选项指示它提供已安装模块的列表.例如,我系统列表中的最后10项:
$cpan -l 2>/dev/null |tail -10 Test2::Event::Encoding 1.302073 Test2::Event::Bail 1.302073 Test2::Event::Exception 1.302073 Test2::Event::Subtest 1.302073 Test2::Event::Skip 1.302073 Test2::Event::Info 1.302073 Test2::Event::Diag 1.302073 Test2::Event::TAP::Version 1.302073 JSON::PP 2.27400_02 JSON::PP::Boolean undef 如此处所示,您将获得模块和版本号的列表.有时该工具在META中找不到版本,因此将返回版本号的undef. CPAN作者应该注意这些类型的错误,因为它们使得希望在不编译模块本身的情况下识别版本的工具变得更加困难. 获得模块和版本号后,您可以使用cpanm工具(由App :: cpanm提供)及其–test-only选项来下载特定版本的模块并对其进行测试.您可以请求这样的特定版本: cpanm Some::Module@0.9990 (仅下拉目标模块的0.9990版本). 事情变得棘手的是:Perl附带了一堆模块,其中一些还通过CPAN接收更新. cpan -l工具将列出所有已安装的模块,包括Perl附带的模块. 此外,列出的一些模块只是更大分布的一部分. 另一个对你有用的工具是核心列表,它自5.8.9以来与Perl捆绑在一起.如果你运行这个: corelist File::Temp 你会得到:“File :: Temp最初是用perl v5.6.1发布的” 如果你这样做: corelist JSON 你会得到:“JSON不在CORE中(或者我认为)” 因此,确定列表中正在查看的模块是否与Perl一起提供的模块非常简单.根据需要使用该信息. 您需要解决的另一件事是如何处理共享依赖项.如果您测试的第一件事是Moose升级,那么您将获得一半的CPAN(这是夸大其词),这会污染您的环境以测试其他模块.为了减轻这种影响,您有几个选择.一个是利用App :: perlbrew及其lib选项来设置一次性库空间.这样,您可以在perlbrew lib和perlbrew use指定的目标中安装模块及其依赖项,然后在完成后将其丢弃以转移到下一个库进行测试. 但是,可能有一个更好的解决方案,我不熟悉这里的文档:CPAN烟雾测试仪使用的工具链.如果您希望采用此策略,请参阅CPAN::Testers.烟雾测试人员已经制定了相对轻量级的方法,以自动方式下拉和测试模块及其依赖关系. 最后,您将遇到的另一个问题是CPAN作者决定哪些版本的模块存在于CPAN上以及哪些版本被删除.几年前,CPAN的作者被鼓励通过删除旧版本来保持他们的CPAN存储库清洁.我不知道这种做法是否仍然受到鼓励,但它确实意味着你不能指望仍然存在的特定版本号.要解决此问题,您应该为您在给定时刻安装的所有版本维护自己的tar包存储库. CPAN模块框架Pinto有助于保持模块的版本,固定一些不更新,以及其他有用的技巧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |