Index: [Article Count Order] [Thread]

Date:  Fri, 15 Dec 2000 16:54:37 +0900
From:  Tuyoshi Ushio <t-ushio@....com>
Subject:  [XP-jp:01341] Re: HttpUnit 訳(旧 Web での機能テストに関して)
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <3A39CC79.F94E1022@....com>
References:  <3A306216.3801E545@....com>		<8766kvr0pw.fsf@....jp>		<3A39B6A6.9743A11@....com> <20001215.154317.46637937.u90156@....jp>
Posted:  Fri, 15 Dec 2000 16:47:05 +0900
X-Mail-Count: 01341

牛尾です。

やまの殿リプライありがとうございました。

> なげてもらえるとうれしいです:-)

そうゆうことで、しょぼいですが、投げます。で、私の社外ページは
自分のバンドのページしかなく、

> - Web ページがなく、量が多くない場合は、直接 XP-jp になげる。

のケースなので、この下にテキストで送ることにします。

ほんとしょぼいですが。訳間違いがあったらご指摘ください。。
怪しい訳は元の英語を[ ]にくるんで、記述しています。

-----------------------------------------------------------------
http://httpunit.sourceforge.net/の訳
---------------------------
■HttpUnit

webにアクセスする通常の方法はブラウザを通してのものです。しかしながら、
ブラウザをバイパスしたり、プログラムからサイトにアクセスすることが
望ましいケースもあります。それは以下のようなケースです。

・自動的にWebサイトをテストする
・WebサイトをリリースしたAPの一部として使用する

HttpUnitはこれらを簡単にします。Javaでかかれており、HttpUnitはブラウザ
の重要な一部の振る舞いをエミュレーションします。FormのSubmitや,
http authentication(認証)、cookieや、自動のページリダイレクションや
、java testコードから、戻りページの実験など(テスト)ができ、それは
テキスト、XML、DOMやフォームコンテナやテーブルやリンクをサポート
しています。

■What is it?(それはなんですか?)
HttpUnitはフリーでオープンソースのブラウザなしでWebにアクセスする
JAVA APIで、JavaTestUnit(例えばJUnit)と組み合わせたときにWebサイトの
自動のテストができるユニットのスィートを目指しています。これは
Russell Goldによって設計され、インプリメントされています。

■Documentation(ドキュメント)
  基本的なUser's Manualが利用できます。JavaDocもあります、いくつかの
動作サンプルはディストリビューションのダウロード物件についています。

Where do I get releases?(どこで物件をてにいれるの?)
最新のHttpUnitはzipファイルとして利用できます。
他のビルドはanonymous ftpで利用できます。

注意:JTidyは今はSourceForgeにおかれています。
   the project download ariaでダウンロードしてもいいです。

■How do I contribute,give feed back , fix bugs and so on?
 (どうやって私は(HttpUnitに)貢献したりフィードバックを戻したり、
  バグをつぶしたり、、などなどしたらいいですか)
我々はメーリングリストをもっています。コードに関する議論を行います。
Read-onlyのCVS"HttpUnit"のリポジトリはオンラインと、CVSクライアントで
利用できます。リポジトリへのアクセスは
:pserver:anonymous@....net:/cvsroot/httpunit.


英単語メモ---------------------------------------
via 〜を通して
desirable 望ましい
relevant 関係ある、重要な
portion 一部
ideally できるかわからないがそうなって
    ほしい
rudimentary 基本

---------------------------------------------------------------

http://httpunit.sourceforge.net/doc/Cookbook.htmlの訳
--------------------------------------------
■HttpUnit Cookbook 

ここに、あなたのWebサイトをテストすつために、どのように、
JUnitと一緒にHttpUnitをどうやって使うかの説明があります。

Obtaining a web page response(Webページのレスポンスを得る)
HttpUnitの中核はWebConversationクラスです。これは、
[which takes the place of browser talking to a single site]
  注:正しい意味はよくわかりません。
シングルサイトと通信するブラウザのようなものです。
これは、メンテナンスされたsession contextを返答できます。
それはクッキーを通してサーバーに返されます。
  それを使うためには、[one]はリクエストを作らなければならず、
そして、[ask the WebConversation] responseのために、WebConversation
クラスに答える必要があります。
例えば

    WebConversation wc = new WebConversation;
    WebRequest     req = new GetMethodWebRequest(
             "http://www.meterware.com/testpage.html"; );
    WebResponse   resp = wc.getResponse( req );

responseはpure text(toStringメソッドを通して)や、DOMメソッドやそれ
以外のメソッドで操作(manipulate)されるかもしれません.ですので、
上記の手順はとても一般てきですので、要約できます。

    WebConversation wc = new WebConversation;
    WebResponse   resp = wc.getResponse( 
             "http://www.meterware.com/testpage.html"; );

■Exammining and following links (審査(?)と以下のリンク)

もっとも単純で、もっとも一般的なWebページのナビゲーションのフォームは
リンクを通したものです。HttpUnitはユーザがテキストの中にリンクがある
のを見つけることを許します
(もしくは割り当てます。注:allow の意図する意味は不明)そして、
これらのリンクを新しいページのリクエストとして使うためにです。
 例えば、このページは上にWebResponseクラスのJavaDocへのリンクを含ん
でいます。
このページはそれゆえ、以下のように得られます。

    WebConversation wc = new WebConversation;
    WebResponse   resp = wc.getResponse( 
    "http://httpunit.sourceforge.net/doc/Cookbook.html";
      ); // read this page
    WebLink       link = resp.getLinkWith( "response"
);                                        // find the link
    WebRequest    req  =
link.getRequest();                                                    
// convert it to a request
    WebResponse   jdoc = wc.getResponse( req );  

imageのリンクはすぐ見つけられます。
WebResponse.getLinkWithImageText()メソッドはALTテキストを検査する
ことで、リンクを探します。また、
HttpUnitOptions.setImagesTreatedAsAltTextメソッドはALTテキスト
を引き起こし[cause]通常に探せるテキストように扱います。

■Using the table structure of a web page(テーブルを使う)
多くのwebデザイナーはページのフォーマットをコントロールするため、
テーブルを多用します。
 あなたはページの要素をテーブルを見ることによってアドバンテージを
得ることができます。getTables()メソッドはこのページのトップレベルの
配列を戻します。
(これは、他のテーブルが内部にネストされてないということです。)
[ in the order in which they appear in the document??]
テーブルを与え、あなたはその一つのセルをたずねることができます。
そして、その結果をテキストだろうがDOMだろうが、尋ねられたものだろうが、
そして、テーブルだろうが、リンクだろいうが、そのなかにネストされた
フォームだうがたずねられます。
 例えば、以下のコードは4行3列のテーブルを埋めます。そして、最初の行
の最後のセルに単体のリンクがあります。

    WebTable table = resp.getTables()[0];
    assertEquals( "rows", 4, table.getRowCount() );
    assertEquals( "columns", 3, table.getColumnCount() );
    assertEquals( "links", 1, 
           table.getTableCell( 0, 2 ).getLinks().length );

たいていのケースで、テストの目的はフォーマットより、テキストを
チェックすることです。HttpUnitはこれをショートカットすることを
提供します。

 例えば、次の2つめのテーブルを想像してください。こんなふうなのです。

---------------------
Name     Color
guest    red
sable    black
---------------------
注 http://httpunit.sourceforge.net/doc/Cookbook.htmlの図参照

以下のJUnitコードがこれをテストします。

    String[][] colors = resp.getTables()[1].asText();
    assertEquals( "Name",  colors[0][0] );
    assertEquals( "Color", colors[0][1] );
    assertEquals( "gules", colors[1][0] );
    assertEquals( "red",   colors[1][1] );
    assertEquals( "sable", colors[2][0] );
    assertEquals( "black", colors[2][1] );

気をつけることには、asText()メソッドはすべてのテーブル
をすべてのフォーマットを無視して、ストリング配列に変換する
ことを注意しましょう。
 [At Times]そのときに、全てのテーブルの行と列は表示目的に
のみ使われなくてはいけない。あなたはイメージや空白のタブ
をそのテーブルのpurgeEmptyCellsを呼び出すことにより、無視する
ことができる。
 多くのケースで、テーブルはいくつかの固定のテキストで始まります。
テストの目的はダイナミックな一部(ページ?)をチェックすることである。
 一般的なルールとして、最初のセルはいくつかの固定項目で、あなたは
それを探すことができる。しかしながら、たとえテーブルが他のテーブルの
一部としてネストされていても。
 このように[above table]上記のテーブル?は以下のように見つけられる。

String[][] colors = resp.getTableStartingWith( "Name" );

これは、たくさんのページのフォーマット変更に、影響されない
利点があります。3、4番目のテーブルになったとしても。

■Working with forms (フォームとして動作する。)
ダイナミックWebサイトは多くのHTMLフォームを持つ傾向にあります。
それらはみな、いろいろな種類のコントロールを持ちます。テキストボックス、
プルダウンメニュー、ラジオボタンなど、、。これらのコントロールのための
HTMLはとても広範囲です。しかしながら、意図は大体において同じなので、
HttpUnitはそれらを同じとみなします。

テスターがフォームで行いたいことにはいくつかの基本があります。
 もっとも明白な最初のステップはコントロールをチェックして、それらの
デフォルト値を確認することです。もし、それらが、正しいならば、
テスターは普通、いくつかを変えてみて、そして、フォームをSubmit
して、システムからどのように答えが帰ってくるかを見ます。
 HttpUnitはこれらを両方簡単にします。
以下は決められた以下のフォーム定義の例です。
---
Restaurant Name  La Cerentolla(TextBox)
Restaurant Type  (check)Chinese Tex/Mex Italian (Radio)
Location         Manayunk(PullDown)
Accepts Credit Cards (Check)

Update(Submit Button)
---注 http://httpunit.sourceforge.net/doc/Cookbook.htmlの図参照

デフォルト値は以下のようにチェックされる
    WebForm form = resp.getForms()[0];    
            // select the first form in the page

    assertEquals( "La Cerentolla",
         form.getParameterValue( "Name" ) );
    assertEquals( "Chinese",       
        form.getParameterValue( "Food" ) );
    assertEquals( "Manayunk",      
        form.getParameterValue( "Location" ) );
    assertEquals( "on",            
        form.getParameterValue( "CreditCard" ) );

すべてのコントロールが同じように扱われるのに注意しなさい。
チェックボックスを除いて。

フォームのSubmitをシュミレーションすることは、WebConversationクラス
にたずねることを呼び出すことである。返答のために、リクエストの
(フォームで定義されて、、前もってフォームのパラメータを変更できる)
 例えば、レストランタイプを一致させて、クレジットカードが使用不可と
いうことを示すには

    request = form.getRequest();
    request.setParameter( "Food", "Italian" );
    request.removeParameter( "CreditCard" );
    response = wc.getResponse( request );

そして、勿論、テストはレスポンス(このSubmitとおなじ)の検査に進む

■Working with frames(フレームとして動作する)
フレームが無いと、Webインタラクションはすなおで連続的になる傾向
がある。
いま一つのアクティブページがある。そして、新しいページはみな、
それを参照している古いページをリプレースしている。
フレームはそれを変えます。複数のアクティブページシュミレーションを
可能にし、アクティブページからのリンクで、違うページの置換の結果を
引き起こすことができる。

HttpUnitはフレームをサポートしており、現在アクティブになってる
フレームの検査の機能をWebConversationクラスのメソッドとして
提供している。
 すべてのレスポンスは適当なフレームのコンテンツにリプレースされる。
 これらは、必ずしも、たいていのフレームトップの"_TOP"を必要と
しない。以下のセクションで、2つのアクティブなサブフォームが
でてくる。"overview"と"detail"という名前だ。

    WebConversation wc = new WebConversation;

    WebResponse top     = wc.getResponse( 
            "http://www.meterware.com/Frames.html"; ); 
                 // read a page with two frames

    WebResponse summary = wc.getFrameContents( "summary"
);                        
                 // read the summary frame

    WebLink     link    = summary.getLinkWith( "Cake Recipe"
);                     
            // find the link (which targets "details" );

    WebResponse details = wc.getResponse( link.getRequest()
);                     
            // retrieve the referenced page

    WebResponse response= wc.getFrameContents( "details"
);                        
            // retrieve the details frame

この手順の最後として、デティールとレスポンスは同じオブジェクトを
示すはずである。

-----------------------英単語
verify チェックする
entire すべてであることを強調する??
invoke呼び出す
immune〜に有効じゃない
respond答える
assume 〜ととりきめる。間違ってるけど、〜と答えた
brief 情報やインストラクション
straightforward 率直な、平明な、正直な
abbreviated to Compact DiskをCDにするようなもの。(要約?)
-----------------------------

■HttpUnitを使用するためには(訳者補足)

1.sax,DOMが必要が必要です。以下のURLをご参照ください。
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/XMLSAXHelloWorld.html
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/XMLDOMHelloWorld.html

私はapacheプロジェクトのxerces-1_1_3を使用
http://xml.apache.org/xerces-j/index.html

2.Tidyが必要です。jtidy-04aug2000r5.zipを使用
http://sourceforge.net/project/showfiles.php?group_id=13153

3.HttpUnit本体が必要です。
http://httpunit.sourceforge.net/httpunit_1_2.zip

4.JUnitもあったほうがいいです。
http://members.pingnet.ch/gamma/junit-10.zip

5.上記の物件をダウンロードし、展開すると
・Xerces
    xerces-1_1_3\xerces.jar
・JTidy
    jtidy-04aug2000r5\build\Tidy.jar
・HttpUnit
    lib\httpunit.jar
・JUnit
    test.jar

というjarファイルができますので、これをCLASSPATHに追加して
テストAPの実行、コンパイルができるようになります。

尚、私はJDK1.2.2 WindowsNT4.0の環境で実行いたしました。

実際に作成するテストプログラムのサンプルはHttpUnitのexamples
ディレクトリ配下にあります。大変わかりやすいので、簡単です。

以上