Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PyConJP 2015 スライド資料

英 谷口
October 14, 2015

PyConJP 2015 スライド資料

『なぜWeb画面自動テストはうまく行かないのか』で使用したスライドを再度共有しました。

動画つきはこちら
http://togetter.com/li/884827

https://docs.google.com/presentation/d/1cWX8fyHUl1rqhZf3eIJHu0JvyYxJLQfkBP6CTMP3sYc/edit#slide=id.p

英 谷口

October 14, 2015
Tweet

More Decks by 英 谷口

Other Decks in Technology

Transcript

  1. if __name__ == '__main__': driver = webdriver.Chrome(executable_path='C:\\tmp\\chromedriver.exe') driver.get('http://store.example.co.jp/') #choromeでECサイトを開く wait_load('http://store.example.co.jp/')

    #ページがロードするまで待機 btn_element = driver.find_element_by_id('target_btn_id') #商品詳細ページを開くボタンをクリックして btn_element.click() wait_load('http://store.example.co.jp/detail_page'') #ページがロードするまで待機 assert driver.title == u'詳細ページ', 'page title is different' #タイトルが期待値でなかった場合、エラー def wait_load(url): while True: #ページがロードするまで待機 if driver.current_url == url: break time.sleep(2)
  2. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } 『どこの何にどうする』とい う実際の動作を 設定しているファイル
  3. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } 作業者にはコードを 記述させない 1クッション 置くイメージ
  4. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } 詳細なテスト内容を記述 せず、 テストしたい項目を 記述する テストケース記述コストを解決
  5. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } 各コマンドを ラッピングすることで 作業者はブラウザ、 プラットフォームの 動作差異を意識せずに 設定できる マルチブラウザ対応コストを解決
  6. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } パラメータファイルと 組み合わせ、 少ない記述でパラメータを 変更し、 繰り返しテストを 実行することが可能 パラメータ変更によるコストを解決
  7. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } $から始まる文字列は パラメータファイルの 設定値にリンク
  8. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } 参照するパラメータ ファイルを変更する ことにより、 他の画面のケースにも 流用可能
  9. { “actions”: [ { “action”: “loop_start”, “key”: “item_count”, “parameter_file”: “./param.csv”

    } { “action”: “get” “url”: “${item_count.url}” } { “action”: “check_item_count” “url”: “${item_count.count}” } { “action”: “loop_end”, “parameter_file”: “./param.csv” } ] } 形式はパーサがある XMLやHTML、 JSONがお勧め
  10. driver = webdriver.Chrome(executable_path='C:\\tmp\\chromedriver.exe') driver.get('http://store.example.co.jp/') #choromeでサイトを開く desired_cap = { 'browserName':'Chrome', 'platform':'Windows

    7', 'version':'45.0', 'chromedriverVersion':'2.15' } driver = webdriver.Remote( command_executor='http://${user}:${pass}@ondemand.saucelabs.com:80/wd/hub', desired_capabilities=desired_cap ) driver.get('http://store.example.co.jp/') #choromeでサイトを開く