Mutli-Mechanize


Multi-Mechanize


インストール方法

■Mac等

virtualenvでアクティブにする

pipでインストール

pip install multi-mechanize
pip install numpy #Lionだと動かないので個別にインストールする
pip install matplotlib #Lionだと動かないので個別にインストールする

=> numpy / matplotlibインストール


■パッケージの配置場所■

仮想実行環境が
/Users/komuro/Projects/Programming/pykeeper/
#仮想環境を有効にする際のコマンドの場所を確認
$ source ~/Projects/Programming/pykeeper/bin/active
だとすると
/Users/komuro/Projects/Programming/pykeeper/lib/python2.7/site-packages/
配下にある

./mechanize-0.2.5-py2.7.egg-info/
   \_PKG-INFO
   \_SOURCES.txt
   \_dependency_links.txt
   \_installed-files.txt
   \_top_level.txt
   \_zip-safe

■Debian

sudo apt-get install python-pip python-matplotlib
sudo pip install -U multi-mechanize


プロジェクト作成

multimech-newproject my_project

 プロジェクトフォルダーがコマンドを実行した場所に作成される

./my_project
  \__config.cfg
  \__test_scripts
  \__v_user.py

設定ファイル

* 必須

[global] #共通設定
run_time = 300 #テストの時間(秒)*
rampup = 300 #全スレッドを生成する時間(秒)*
 results_ts_interval = 30 #結果解析用の時間(秒)*
progress_bar = on #テストが走っている時に処理中バーを表示するかどうか(ディフォルトOn) console_logging = off #標準出力にログを出すかどうか(ディフォルトoff)
xml_report = off #xml/拡張子jtlのレポートを出力する(ディフォルトoff)
results_database = sqlite:///my_project/results.db #データーベース接続
post_run_script = python my_project/foo.py #テスト完了をフックにして呼び出せるスクリプト

[user_group-1] #個別設定
threads = 30 #ユーザー毎のスレッド数
script = vu_script1.py #ユーザー毎に走らせるスクリプト

 [user_group-2]
threads = 30
script = vu_script2.py #my_project/test_scripts/配下に置く

個別設定は[user_group-番号]で作成出来る。

スクリプトの書き方

config.cfgの[user_group-X]のscriptで呼び出される

基本構成

class Transaction(object):
     def run(self):
     # ここに処理書く
      return
 

テストではTransaction()が一度呼ばれて、run()が何度も呼ばれる。def run()では、処理をループさせる書き方ではなく、1種類につき1回の処理を書くとよさげ。

http://testutils.org/multi-mechanize/scripts.html

import mechanize class Transaction(object):     def run(self):         br = mechanize.Browser()         br.set_handle_robots(False)         resp = br.open('http://www.example.com/')         resp.read()

import mechanize ---> /Users/komuro/Projects/Programming/pykeeper/lib/python2.7/site-packages/mechanize/_mechanize.py

br=mechanize.Browser()
# ブラウザーのように履歴[ History() ]、フォーム、リンクをサポート

br.open() #リクエストする --> ._mech_open()
br.close()

br.viewing_html() #現在のレスポンス内のHTMLを取得する
br.open_novisit() #URLを訪問無しで開く。履歴等が変更されず、.open()と同じ挙動
br.visit_response() #.open()になっていたら訪問する
br.response() #現在のレスポンスを取得する
br.reload() #現在のドキュメントをリロードする

#ファイル操作
br.open_local_file()


br.geturl() #現在のドキュメントのURLを取得する
br.title() #タイトルを取得する

#セット
br.set_response()
br.set_handle_referer() #各リクエストにリファラーヘッダーを追加する

#リンク
br.links() #イタレート出来るリンクobjectを返却する #TODO調べる
br.click_link() #リンクを探して、その先のリクエストobjectを取得する
br.follow_link() #リンクを探して、.open()する
br.find_link() #リンクを探す

#クッキー
br.set_cookie()  #自動で対応するのでわざわざ呼び出す必要はない
#例
#browser.set_cookie("sid=abcdef; expires=Wednesday, 09-Nov-06 23:12:40 GMT")

#フォーム
br.forms() #イテラブルなフォームを取得する
br.global_form() #共通のフォームを取得する
br.select_form() #インプット用にフォームを取得する
br.click()  #TODO mechanize.HTMLForm.click見る
br.submit() #フォームをサブミットする

#エンコード
br.encoding()

#履歴関連
br.clear_history()
br.back() #履歴の一つ前に戻る








プロジェクト実行

multimech-run my_project
$ multimech-run -h
使い方: multimech-run <プロジェクト名> [オプション]

オプション:
  -h, --help  ==> このヘルプのメッセージを表示し終了する
  -p <ポート>, --port=<ポート>    ==> RPCリスナーポート指定
  -r <結果ディレクトリ>, --results=<結果ディレクトリ>   ==> 結果出力用ディレクトリ
  -b <バインドアドレス>, --bind-addr=<バインドアドレス>   ==> RPCバインド用アドレス
  -d <プロジェクトディレクトリ>, --directory=<プロジェクトディレクトリ> ==> プロジェクトフォルダー






実行ログ
(pykeeper)Komuro-no-MacBook-Air:Programming komuro$ multimech-run perf_test01
  user_groups:  1
  threads: 3
[================100%==================]  30s/30s   transactions: 183  timers: 0  errors: 0
analyzing results...
transactions: 186
errors: 0
test start: 2012-06-16 00:17:34
test finish: 2012-06-16 00:18:03
created: ./perf_test01/results/results_2012.06.16_00.17.33/results.html
done.




結果ファイル

./my_project
\__results
\__results_2012.06.11_23.26.14
\__results.csv
\__results.html


ログ

virtualenvで仮想環境に入っている状況で実行
(pykeeper)Komuro-no-MacBook-Air:Programming komuro$ pip install multi-mechanize
Downloading/unpacking multi-mechanize
Downloading multi-mechanize-1.2.0.tar.gz
Running setup.py egg_info for package multi-mechanize

Downloading/unpacking Mechanize (from multi-mechanize)
Downloading mechanize-0.2.5.zip (445Kb): 445Kb downloaded
Running setup.py egg_info for package Mechanize

Installing collected packages: multi-mechanize, Mechanize
Running setup.py install for multi-mechanize

Installing multimech-run script to /Users/komuro/Projects/Programming/pykeeper/bin
Installing multimech-newproject script to /Users/komuro/Projects/Programming/pykeeper/bin
Installing multimech-gridgui script to /Users/komuro/Projects/Programming/pykeeper/bin
Running setup.py install for Mechanize

Successfully installed multi-mechanize Mechanize
Cleaning up...



ソースコード

__init__.py
_auth.py
_beautifulsoup.py
_clientcookie.py
_debug.py
_firefox3cookiejar.py
_form.py
_gzip.py
_headersutil.py
_html.py
_http.py
_lwpcookiejar.py
_markupbase.py
_mechanize.py
_mozillacookiejar.py
_msiecookiejar.py
_opener.py
_pullparser.py
_request.py
_response.py
_rfc3986.py
_sgmllib_copy.py
_sockettimeout.py
_testcase.py
_urllib2.py
_urllib2_fork.py
_useragent.py
_util.py
_version.py


Comments