如何告诉CPAN测试人员如何为我的测试设置环境?

时间:2018-06-09 11:47:52

标签: perl testing cpan

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

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

如果人们不知道,CPAN Testers是一群使用称为吸烟者的自动脚本测试所有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。如果这个模块按原样发布,它将在运行的所有机器上显示为没有先决条件环境设置(即它将错误地显示为已损坏而不是错误地显示正在工作)。

4 个答案:

答案 0 :(得分:4)

CPAN测试人员运行与安装时模块运行相同的测试。您的测试应该在机器上安装其他软件吗?可能不是。相反,如果不满足先决条件,测试应该大声失败。

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

您还可以考虑使用其他提供商进行更全面的测试,而不是捐赠的CPAN测试员容量,例如:为您的项目设置Travis CI。由于它们为您提供了一个可以玩的容器,因此您可以安装额外的软件。您还可以安全地为测试提供凭据。相比之下,CPAN测试人员的主要优势在于操作系统的多样性,即测试环境中缺乏控制

答案 1 :(得分:3)

如果无法满足构建模块的先决条件,请从dieMakefile.PL致电Build.PL。在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.";
    }
}
...

答案 2 :(得分:2)

  

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

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

您可以要求cpan-testers-discuss上的常客手动设置要求;这样做有先例。当然不是每个人都有责任。

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

答案 3 :(得分:1)

查看具有外部依赖关系的其他CPAN模块,并执行类似的操作。

例如,查看各种数据库的DBI驱动程序。虽然File和SQLite有自己的先决条件,但对于像Oracle和DB2这样的其他人来说却不是这样。或者看看wxGTK,IIRC使用Alien包来安装Wx。

在你的情况下,我建议更多的DBD驱动程序,而不是嵌入Alien,但你必须做出选择。