Webサービスは、特に両者が異なるプラットフォームを使用する場合に、クライアントとサーバー間の通信を整理するための非常に便利な方法です。 通信の形式化により、メッセージの辞書を一意に定義し、既存の膨大な数のライブラリとテクニックを適用できます。 エンタープライズプラットフォーム(.net、jee)には、Webサービスを設計、開発、およびテストするための多くのユーティリティが含まれており、これらのユーティリティの多くは小規模プロジェクトに非常に適しています。
この記事では、PHPでの単純なWebサービスの作成とその自動テストについて説明します。
Webサービスは、ラインリバース、合計、エコーの3つの操作を実装します。
計画
私たちの計画:最初に計画して発表し、それからそれを実現します。 したがって、次の3つの段階を順に実行します。
1.最初にWSDL-辞書を宣言するか、契約を作成します
2. PHPのコントラクトを実装します
3.テストプロセスを自動化する
必要条件
すべてのオープンソースツール
PHP 5以降
NUSOAP-WSを操作するためのphpライブラリ(http://sf.net/projects/nusoap)
EE開発者向けバージョンのeclipse.orgのEclipse-WSDLエディターのみを使用します。
SoapUI-soapui.org。 Webサービス指向アプリケーションのテストパッケージ
最初にWSDL
WSDLは契約、つまり サーバーがクライアントにサービスを提供する義務があり、このプロセスのパラメーターを示す契約。 これは基本的に、メソッド、データ型、およびその他のパラメーターを記述するXMLドキュメントです。
Webサービスを作成するには、2つのアプローチがあります。
1.開発者がプログラムコードを記述し、プラットフォームツールがWSDLを自動的に実装します
2.デザイナーまたはアーキテクトは、WSDLでインターフェイスを記述し、その下にロジックを実装します。
多くの開発者は最初の方法、つまり コード(java、c#など)を記述し、Webサービスについては考えません。 開発者の観点から見ると、これは明らかにプラスです。
しかし、この戦略は、いくつかの分散したチームがある大規模なプロジェクトでは多くのことを失います。 理想的には、インターフェイスを安定させ、たとえば、ライティングクライアントチームがライティングサーバーコマンドからのリリースを待たないようにします。 また、QAはできるだけ早くテストの作成を開始する必要があります。
したがって、最初にWSDLを記述する必要が生じます。
EclipseでWSDLを作成します。日食を開始した後、プロジェクトを作成しますNew-> Other-> Web services-> WSDL
ファイルに名前を付ける:「ws.wsdl」、名前空間:「
sample 」
(名前空間はXMLに一般的な慣習であるため、WSとは関係ありません)作成されると、1つの操作「NewOperation」を持つ新しいWSDLを受け取ります。
それを削除して、「リバース」という名前の新しいものを作成します。 矢印をクリックすると、すべてのパラメーターを表示できますが、変更する必要はありません。
反転操作自体は、クライアントから文字列を受け取り、文字の逆順で返します。 1つのINパラメーター文字列と結果の文字列が必要です。 それらを操作に追加します。
必要なパラメーターを使用してping操作と合計操作を
自分で追加でき
ます(またはアーカイブからwsdlを開きます。最後のリンクを参照してください)。変更を「ws.wsdl」として保存します
これで契約が完了し、クライアント、サーバー、QAなどの開発者に契約を渡すことができます。 それらはすべて、互いに独立して作業を開始できます。
PHPでWSを実装します
public_htmlにsoapディレクトリを作成し、ws.wsdlをコピーします(したがって、ファイルは
yourserver / soap / ws.wsdlとして利用可能です)
サーバーコードをws.phpに配置し、
localhost / soap / ws.phpがWebサービスのリンクになります。
さらに、「soap」でnusoapを解凍します。
ロジックの即時実装に移りましょう。
ws.phpの最初の行:
require('lib/nusoap.php');
$server = new soap_server('ws.wsdl');
この構造は、指定されたコントラクトを実装するようスクリプトに指示します。 呼び出し自体が処理されます。
$server->service($HTTP_RAW_POST_DATA);
WSをサポートするために必要なのはこれだけです。残りはビジネスメソッドです。
コントラクトの各操作に対して、同等の名前を持つphp関数を作成する必要があります。
ファイル全体の例を次に示します。
<?php
require('lib/nusoap.php');
$server = new soap_server('ws.xml');
function reverse($in){
return strrev($in);
}
function ping() {
return time();
}
function sum($a, $b) {
return ($a + $b);
}
$server->service($HTTP_RAW_POST_DATA);
?>
ブラウザーで開く場合:
localhost / soap / ws.php-利用可能なすべての操作が表示されます。
これで、サーバーはクライアントにサービスを提供する準備ができました! しかし、あなたのためのクライアントはありません...そして自動テストを使用するので、私たちはそれを書きません...
(統合テストであるWebサービスをテストし、ビジネスメソッドの単体テストの作成をキャンセルしないことを忘れないでください)SoapUIを使用したテスト
SoapUIは、Webサービスに基づいてシステムをテストおよび開発するための優れたツールです。 このユーティリティは別の記事に値するため、オプションの1つのみを使用します。クライアントをエミュレートしてサーバーをテストします。
これを行うには、数回クリックする必要があります...
soapUiを起動して新しいプロジェクトを作成し、wswlsをws.wsdlとして選択します。 他のパラメーターは変更しないでください。
これによりプロジェクトが作成され、ツリー内のすべての操作が削除されます。 サービスを右クリックして、「TestSuiteを生成」を選択します。 スタイルを「Singe suite ...」に設定します。
結果は、ツリー内のテストスーツとパッケージウィンドウになります(閉じることができます)。
テストパッケージ自体には、操作ごとに1つずつ、一連のステップが含まれています。 ご想像のとおり、これらはサービスをチェックするための要素です。 目標に応じて、一度にすべて実行することも、一度に1つずつ実行することもできます。
事前に設定された一度に1つずつ実行しようとします。
逆のステップをクリックすると、要求パネルと応答パネルの2つのパネルが表示されます。 クエリコンテンツは、データの場所に疑問符が付いた契約に基づいて自動的に生成されます。 この例では、行に1つのプレースホルダーがあり、値123456789を入力します
パネルの上部にあるターゲットURLがサービスを指していることを確認します。パネルの緑色の三角形を使用して実行ステップを開始できます。
要求はサーバーに送信され、2番目のパネルに回答が表示されます。これには、逆順の入力パラメーター987654321が含まれているはずです。
視覚的には、システムが正しく動作することを確認できますが、マイナスがあります。これは視覚的に確認できます。 理想的には、回帰テストのためにこれを自動化したいと考えています。
「実行」のすぐ後ろにあるアイコンに注意してください。 応答を確認するための条件は次のとおりです。応答に行987654321が存在するという条件を追加できます。
これで、手動とビルドサーバーの両方で実行できる自動テストができました。
例
アーカイブの例には
ws.php Webサービスの実装
ws.wsdlコントラクト
WS-soapui-project.xml-SOAP UIプロジェクト
lib nusoapライブラリ
こちらからダウンロードできます
romanenco.com/sites/default/files/phpws.zip英語版
romanenco.com/phpwsアンドリュー・ロマネンコ