PHPスクリプトのテスト方法を詳しく説明、スクリプトのテスト方法を詳しく説明
1. よく使われるテスト例
私たちはよくこのような状況に遭遇します。それは、まったくテストされていないレガシー コードを書き直すことですが、これらのコードでさえ依然としてオブジェクト指向モードで書かれています。このようなコードをテストする場合の私のアドバイスは、テストしやすいようにコードをいくつかのチャンクに分割することです。
ただし、これらのレガシー コードは、元のプログラムへの影響を避けるため、リファクタリングが簡単ではありません。
PHP プログラムでは、通常、コードの一部が複数の Index.php および script.php ファイルに記述されており、これらの .php ファイルは複数の異なるフォルダーに保存されます。エントリ ポイントが見つからない場合、Web サーバーから直接アクセスすることはできません。
テストコピー
PHP スクリプトをテストするには、HTTP リクエストをシミュレートし、返された応答が期待値と等しいかどうかを確認する必要があります。ここで注意が必要なのは、リクエストをシミュレートし、レスポンスとリクエストの内容が異なるだけでなく、ヘッダーも異なることです。
また、データを操作するトランザクション スクリプトをテストする場合は、それが実際のデータベースやアプリケーションの残りの部分に接続しないようにする必要があります。
実際には、通常、書き換えテストのために元の PHP スクリプトを直接使用する人は誰もいません。コードが回復不能になるのが怖いからです。 PHP コードに簡単な操作を実行できるように、PHP スクリプトのコピーを使用することをお勧めします。
コードに最小限の変更を加える方法: include ステートメントと require ステートメントを削除し (使用されていない場合)、内部関数の呼び出し方法を変更します。たとえば、header() を $object->header() として記述します。
最後に、このトランザクション スクリプトをテストしてみましょう。テスト後、重複したスクリプトからそれらを抽出し、新しいスクリプト ファイルに配置できます。
具体的な手順
1. HTTP リクエストをシミュレートし、変数 $_GET と $_POST を再定義し、$_SERVER のヘッダーも変更します。
2. リクエストのレスポンスを取得します。レスポンスの本文は、ob_start() および ob_get_clean() を介して取得できます。echo() または
注: 出力バッファリングは PHP の複数レベルのネストをサポートしているため、スクリプトが ob_* 呼び出し自体を使用している場合でも、ほとんどのケースがキャプチャされます。
3. テスト スクリプトにはトランザクション スクリプトの内部メソッドが含まれている必要があり、このスクリプトのスコープ内のすべてのメソッドを呼び出すことができます。例:
1. スクリプトに必要な変数は、ローカル変数として定義してカプセル化できます (データベース接続としての $connection など)。
2. これは PHP のオリジナルの組み込み関数ではありません。たとえば、header() は $this->header() として記述されます。
特定のコード
これはテストしたいトランザクション スクリプト オブジェクトであり、スクリプトに固有のものであり、カプセル化する必要もあります。
リーリー
リーリー
テストコピーは一時的なものです。これにより、変更のないテストを作成できるようになります。最後に、テストに合格した PHP スクリプトをリファクタリングして、冗長なコードを削除します。
テストが完了すると、handleRequest() の内容を実際のロジック コードに置き換えることができます。このようなテスト スクリプトを多数作成する場合は、テストのニーズを満たす一般的なテスト オブジェクトを作成できます。
2. PHP開発者向けの単体テストツールキット
PHP の分野には、PHPUNIT、PHPUNIT2、SimpleTest の 3 つの主要な単体テスト ツールがあります。その中で、PHPUNIT は機能が非常に単純で完璧ではありません。PHPUNIT2 は PHP5 用に特別に作成された単体テスト ツールであり、構造と機能が Junit と一致しています。SimpleTest は非常に実用的なテスト ツールであり、webTest は以下のテストをサポートします。 Web プログラム インターフェイスは、Easy が最も推奨するテスト ツールです。この記事では、導入のために SimpleTest を選択します。
関連知識: PHPUNIT2 も、特にアーキテクチャの点で非常に優れたツールです。今後、特別な記事で紹介する機会があればと思います。
SimpleTest: とてもシンプルです
SimpleTest のインストールは非常に簡単です。sf.net からソース コード パッケージをダウンロードし、Web ディレクトリに解凍して使用します。ここでは詳しく説明しません。
まず例を見てみましょう: Web サイトにアクセスできるかどうかを確認するテストを作成します。
まず、使用するファイルを紹介します:
コードリスト:
リーリー
次に、テストクラスを作成します:コードリスト:
リーリー
まず、Web をテストする機能を自動的に取得できるように webTestCase クラスを拡張します。次に、コンストラクターで基本クラスを直接使用し、それにタイトルを渡すだけです。次に、テスト メソッドを作成する必要があります。テスト メソッドはすべて「test」で始まり、テストの実行時にクラス内のどのメソッドを呼び出す必要があるかを識別します。
而$this->get将取得网页的内容,我们指定它的标题为 ".: facebook :.", 接着我们要做的就是实例化这个类的对象,并运行它。
代码列表:
$test = &new TestOfSite(); $test->run(new HtmlReporter());
下边是运行结果:
如果测试出错则会出现下边的界面:
到这里一个简单的测试就算完成了。
实战演习 – 一个Login测试
下面我们进入实战,在这个基础上完成一个login的测试。这次我们先贴出完整的代码:
代码列表:
require_once("../simpletest/unit_tester.php"); require_once("../simpletest/web_tester.php"); require_once("../simpletest/reporter.php"); class TestOfLogin extends WebTestCase { function TestOfLogin() { $this->WebTestCase("Login测试"); } function testLoginOk() { // 取得页面 $this->get("http://howgo.net/prettyface/login.php"); // 添加测试表项 $this->setField("name","Easy"); $this->setField("pass","******"); // 提交 $this->clickSubmit("提交"); // 察看提交后返回页面是否正确 $this->assertWantedPattern("/成功登录/"); // 点击页面链接 $this->clickLink("点击这里进入管理页面"); // 察看指定页面标题和关键内容 $this->assertTitle("ADMINCP"); $this->assertWantedPattern("/请选择要进行的任务/"); // 退出登陆 $this->clickLink("退出管理"); $this->clickLink } }

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1
使いやすく無料のコードエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
