2017-02-09 15 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); 
     } 
} 

このテストで、このような単純な機能のために、あなたのリストの各文字列のために、あなたが既に知っている、ほとんど何のことを教えてくれますボット名の中からTRUEの結果を得ます。

さらに、テスト対象のすべての$ USER値を追跡するために、プロダクションシステムにロギング機能を追加します。あなたが書いたような機能の最大の問題は、プリセットデータリストが正確であることに依存していることです。リストにある値が実際にシステムに渡される値であることを事前にテストする方法はありません。テストされたすべての値をログに記録することで、考慮する必要がある新しい値と間違いの可能性があるログを定期的に調べることができます。

この第2のプロセスは、@ RiggsFollyによるコメントを元の投稿に依存しています。あなたのログファイルは実際のボットの訪問によってのみ満たされるので、ログがいっぱいになるのを待っている間、あなたは忍耐強くなければなりません。定期的にログを確認し、表示されることを期待している値が表示されていることを確認します。

関数の出力結果をログに記録して、関数のパフォーマンスをトリプルチェックできるようにしてください。

このすべてが役に立ちましたことを願っています。ハッピーコーディング!

関連する問題