我使用PHP编写了一个bot检测脚本。我想通过发送机器人点击链接来测试该脚本,以便我知道脚本是否有效。我怎么能这样做?
这是PHP代码:
function bot_detected($USER_AGENT){
$crawlers = array(
'Googlebot',
'msnbot',
'Yahoo',
'Lycos',
'facebookexternalhit'
);
$crawlers_agents = implode('|', $crawlers);
if(strpos($crawlers_agents, $USER_AGENT) === false){
return false;
} else {
return TRUE;
}
}
答案 0 :(得分:0)
您可以使用Chrome插件设置自定义用户代理,以便对其进行测试,例如this one
答案 1 :(得分:0)
测试的核心是模拟环境。
首先,下载测试套件。我建议并使用PHPUnit。这将允许您编写可以在单独文件中存在的代码更改中存活的测试。如果没有测试套件,您将不可避免地编写一个名为驱动程序的程序并执行相同的操作,但驱动程序文件经常会丢失或被遗忘,因为每个文件都是编码的根据需要,它们通常没有系统地将驱动程序存储在一起或使用一致且可预测的命名模式。出于这些原因,我建议学习一个测试套件,比如PHPUnit,它将迫使你考虑测试寿命和文件名约定。
选择测试套件后,首先要设计测试套件。你的短程序实际上只是一个函数调用,所以你需要测试将多个值传递给你的函数,然后测试响应以确保你得到预测的结果。
在混合PHP伪代码中,这可能如下所示:
require 'myfile.php'
class MyTest extends TestClass{
/**
* Provides parameters and expected results to the test method.
*/
public function providerOfTestCases(){
return [
'Googlebot Test Case' => [ 'Googlebot', true ],
'msnbot Test Case' => [ 'mstbot' , true ],
.
.
'nonbot test case' => [ 'randomStringData', false ]
];
}
/**
* @dataProvider providerOfTestCases
*/
public function testBotDetector( $userString, $expectedResult ){
$functionResult = bot_detected( $userString );
$message_on_failure = "When testing $userString, we expect "
. ( $expectedResult ? "TRUE" : "FALSE" )
. " but instead the function outputs "
. ( $functionResult ? "TRUE" : "FALSE" );
$this->assertEquals( $expectedResult, $functionResult, $message_on_failure );
}
}
对于这样一个简单的函数,这个测试将告诉你大部分你已经知道的,对于你得到真实结果的bot名称列表中的每个字符串。
除此之外,我还会在生产系统中添加一个日志记录功能,以跟踪所测试的所有$ USER值。与您编写的函数类似的最大问题是它依赖于您的预设数据列表是准确的。事先没有办法测试您列出的值实际上是传递给系统的值。通过记录测试的所有值,您可以定期检查日志中是否存在应考虑的新值以及可能出现的错误。
第二个过程依赖于@RiggsFolly对原始帖子的评论。您的日志文件只会被实际的机器人访问填充,因此您必须耐心等待日志填写。定期检查日志,并确保您看到了您希望看到的值。
请记住在日志中包含函数输出的结果,以便您可以检查函数的性能。
我希望所有这一切都有所帮助。快乐的编码!