【问题标题】:How can I tell CPAN Testers how to setup the environment for my tests?我如何告诉 CPAN 测试人员如何为我的测试设置环境?
【发布时间】:2018-11-19 07:12:28
【问题描述】:

我正在编写需要安装和运行外部软件(亚马逊的本地 DynamoDB 服务器)的测试。有什么方法可以告诉CPAN Testers怎么办?

或者我应该只下载服务器并在测试设置中自己启动它吗?这将需要安装 Java 6.x 或更新版本。所以我想我又回到了第一个问题。

如果人们不知道,CPAN 测试人员是一组使用称为 Smokers 的自动化脚本测试所有 CPAN 的人。

更多背景:

目前,CPAN Testers 显示有 227 台机器通过了 Amazon::DynamoDB 的所有测试,但这是一种误导,因为目前正在运行的七千多个测试中只有一个:use_ok( 'Amazon::DynamoDB' );。其余的隐藏在unless 语句后面:

unless ( $ENV{'AMAZON_DYNAMODB_EXPENSIVE_TESTS'} ) {
    plan skip_all => 'Testing this module for real costs money.';
}

还有大量的测试do not pass。我已经解决了这个问题,但是测试需要在测试者的环境中设置三个环境变量和金钱(当前方式):

AMAZON_DYNAMODB_EXPENSIVE_TESTS=1
EC2_ACCESS_KEY=<user's AWS access key>
EC2_SECRET_KEY=<user's AWS secret key>

或安装本地版本的 Amazon DynamoDB。如果这个模块按原样发布,它会在它运行的所有没有先决条件环境设置的机器上显示为损坏(即它会错误地显示为损坏,而不是错误地显示为正在工作)。

【问题讨论】:

  • 添加一个 00_prereqs.t 测试文件,如果尚未安装,则安装/测试它....
  • 这对 CPAN 测试人员没有帮助,只会导致失败。
  • “告诉 CPAN 测试人员该做什么”是什么意思?
  • @melpomene 对所有 CPAN(即 CPAN 测试人员)运行自动化测试的人员需要在运行测试之前设置外部软件(否则他们都会失败)。所以,希望有某种元数据我可以添加到分发中,告诉自动化测试人员该做什么(或者至少不计算失败,如果它没有针对模块完成)。
  • 操作完全由Makefile.PL / Build.PL 控制,与其他所有模块相同。

标签: perl testing cpan


【解决方案1】:

看看其他有外部依赖的 CPAN 模块做了什么,然后做类似的事情。

例如,查看各种数据库的 DBI 驱动程序。虽然 File 和 SQLite 有自己的先决条件,但对于 Oracle 和 DB2 等其他人来说,情况并非如此。或者查看 wxGTK,IIRC 使用 Alien 软件包安装 Wx。

在您的情况下,我建议您使用 DBD 驱动程序而不是通过 Alien 嵌入,但您必须做出选择。

【讨论】:

  • 如果您查看DBD::Oracle 的测试矩阵,它非常糟糕(可能出于相同的原因)。
【解决方案2】:

CPAN 测试人员运行您的模块在安装时将运行的相同测试。您的测试是否应该在机器上安装其他软件?可能不是。相反,当不满足其先决条件时,测试应该会严重失败。

您还应该区分作者测试和安装测试。不期望安装测试验证所有功能。昂贵的测试(在这种情况下,实际上是花钱的测试)不应该是其中的一部分。您可以在发布之前自己运行它们。但是,最好将它们放在xt/ 中并使用EXTENDED_TESTING 变量而不是非标准环境变量来保护它们。另请参阅Lancaster Consensus,了解 Perl 项目测试期间各种环境变量的讨论。

您还可以考虑使用不同的提供商进行比捐赠的 CPAN 测试人员能力更全面的测试,例如通过为您的项目设置 Travis CI。由于它们为您提供了一个可以玩的容器,因此您可以安装额外的软件。您还可以安全地为您的测试提供凭据。相比之下,CPAN Testers 的主要优势在于操作系统范围广泛,即缺乏对测试环境的控制

【讨论】:

  • 如果您使用 AWS,测试只需要花钱,但您现在可以使用本地版本的 DynamoDB;但是,您必须下载、解压缩并运行它(可能还需要安装 JRE)才能使用它。此外,这不是不测试某些功能的问题。这是一个测试任何功能的问题。
【解决方案3】:

如果无法满足构建模块的先决条件,请从Makefile.PLBuild.PL 致电die。在 CPANTesters 上,从 Makefile 中止将为您提供 NA test result 而不是 FAIL test result,并且不会对您的模块和构建过程产生不良影响。

# Makefile.PL
...
if ($ENV{AUTOMATED_TESTING}) {
    if (!$ENV{AMAZON_DYNAMODB_EXPENSIVE_TESTS} ||
            !$ENV{EC2_ACCESS_KEY} ||
            !$ENV{EC2_SECRET_KET}) {
        die "To test this module, you must set the environment\n",
            "variables  EC2_ACCESS_KEY, EC2_SECRET_KEY, and\n",
            "AMAZON_DYNAMODB_EXPENSIVE_TESTS.  Be advised that\n",
            "running these test will result in charges against\n",
            "your AWS account.";
    }
}
...

【讨论】:

  • 这似乎并不比目前的方案好。目标是能够在 CPAN Testers 中实际运行测试(如果您使用本地版本的 DynamoDB,则成本为零)。
【解决方案4】:

有没有办法告诉 CPAN 测试人员该做什么?

这更像是一个社会问题而不是技术问题。

您可以在cpan-testers-discuss上询问常客手动设置需求;这样做是有先例的。当然,不是每个人都会答应。

另一种可能性是通过Task::CPAN::Reporter/cpanm-reporter 或类似方式联系您模块的用户并要求他们成为临时测试报告员。

【讨论】:

    猜你喜欢
    • 2020-03-02
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2010-09-24
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多