2017-02-09 1 views
-1

나는 PHP를 사용하여 봇 탐지 스크립트를 작성했다. 스크립트가 작동하는지 알 수 있도록 링크를 클릭하여 봇을 보내 스크립트를 테스트하고 싶습니다. 어떻게해야합니까? 여기 봇 탐지 스크립트를 테스트하려면 어떻게해야합니까?

는 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

다른 사용자 에이전트를 사용하여 웹 페이지를 서핑하는 중 ... – Jerodev

+0

빌드하는 경우 ** 사용자가 원하는지 여부와 관계없이 ** 볼 것입니다 ** – RiggsFolly

답변

0

당신이 을 시뮬레이션 예를 들어, this one

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-names의.

이 외에도 테스트중인 모든 $ USER 값을 추적하기 위해 프로덕션 시스템에 로깅 기능을 추가 할 것입니다. 귀하가 작성한 것과 같은 기능의 가장 큰 문제점은 미리 설정된 데이터 목록에 의거하여 정확하다는 것입니다. 나열된 값이 실제로 시스템에 전달되는 값이라는 것을 미리 테스트 할 수있는 방법이 없습니다. 테스트 된 모든 값을 기록함으로써 로그에서 고려해야 할 새로운 값과 가능한 실수를 정기적으로 검사 할 수 있습니다.

이 두 번째 프로세스는 @RiggsFolly가 작성한 의견을 원래 게시물에 의존합니다. 로그 파일은 실제 봇 방문으로 만 채워지므로 로그가 채워지기를 기다릴 때까지 기다려야합니다. 로그를 정기적으로 확인하고보고자하는 값이 보이는지 확인하십시오.

함수 출력 결과를 로그에 기록하여 함수의 성능을 3 자릿수로 확인할 수 있어야합니다.

이 모든 것이 도움이 되었기를 바랍니다. 해피 코딩!

관련 문제