我正在编写需要安装和运行外部软件(亚马逊的本地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。如果这个模块按原样发布,它将在运行的所有机器上显示为没有先决条件环境设置(即它将错误地显示为已损坏而不是错误地显示正在工作)。
答案 0 :(得分:4)
CPAN测试人员运行与安装时模块运行相同的测试。您的测试应该在机器上安装其他软件吗?可能不是。相反,如果不满足先决条件,测试应该大声失败。
您还应该区分作者测试和安装测试。不期望安装测试验证所有功能。昂贵的测试(在这种情况下,测试实际上需要花钱)不应该是其中的一部分。您可以在发布之前自己运行它们。但是,最好将它们放在xt/
中并使用EXTENDED_TESTING
变量而不是非标准环境变量来保护它们。有关在测试Perl项目期间各种环境变量的讨论,另请参阅Lancaster Consensus。
您还可以考虑使用其他提供商进行更全面的测试,而不是捐赠的CPAN测试员容量,例如:为您的项目设置Travis CI。由于它们为您提供了一个可以玩的容器,因此您可以安装额外的软件。您还可以安全地为测试提供凭据。相比之下,CPAN测试人员的主要优势在于操作系统的多样性,即测试环境中缺乏控制。
答案 1 :(得分:3)
如果无法满足构建模块的先决条件,请从die
或Makefile.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,但你必须做出选择。