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

2022技育祭_映写資料①

techtekt
November 18, 2022

 2022技育祭_映写資料①

techtekt

November 18, 2022
Tweet

More Decks by techtekt

Other Decks in Technology

Transcript

  1. UIテスト種別 • ユニットテスト • Jest • スナップショットテスト • DOMテスト •

    エンドツーエンドテスト • Selenium • Datadog Browser Test 7
  2. UIテスト種別 • ユニットテスト • Jest • スナップショットテスト • DOMテスト •

    エンドツーエンドテスト • Selenium • Datadog Browser Test 8 こちらに関して 自動化にチャレンジ
  3. WebDriver 14 Browser Supported OS Maintained by Download Issue Tracker

    Chromium/Chrome Windows/macOS/Linux Google Downloads Issues Firefox Windows/macOS/Linux Mozilla Downloads Issues Edge Windows/macOS Microsoft Downloads Issues Internet Explorer Windows Selenium Project Downloads Issues Safari macOS High Sierra and newer Apple Built in Issues
  4. WebDriver - デモ環境 16 • Jupyter Notebook (or Jupyter Lab)

    $ brew install python3 $ pip3 install jupyter $ jupyter notebook • Selenium $ pip3 install selenium • WebDriver $ pip3 install chromedriver-binary==<version>
  5. WebDriver - ブラウザの起動 from selenium import webdriver from selenium.webdriver.chrome.options import

    Options options = Options() options.add_argument('--disable-gpu') options.add_argument('--disable-extensions') options.add_argument('--proxy-server="direct://"') options.add_argument('--proxy-bypass-list=*') options.add_argument('--start-maximized') # options.add_argument(‘--headless’) # ヘッドレスモード # ブラウザの起動 driver = webdriver.Chrome(executable_path= '/Users/mihokoaoki/Library/Python/3.8/lib/python/site-packages/chromedriver_binary/chromedriver’, options=options) # ページの表示 driver.get('https://careerpocket.jp') 18
  6. WebDriver - 要素の表示の待機とクリック from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import

    expected_conditions as EC from selenium.webdriver.common.by import By # 最長180秒待機 wait = WebDriverWait(driver, 180) # 画像が表示されるまで待機 logoImg = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="__layout"]/div/div/div/div[1]/img’))) # リンクが表示されるまで待機 loginLink = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="__layout"]/div/header/div/div/a[2]'))) # リンクをクリック loginLink.click()
  7. WebDriver - フォームの入力とサブミット # ユーザー名の入力 userName = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="__layout"]/div/div/div/div/div/div[3]/div[1]/div/input'))) userName.send_keys('[email protected]’)

    # パスワードの入力 password = driver.find_element(By.XPATH, '//*[@id="__layout"]/div/div/div/div/div/div[3]/div[2]/div/input') password.send_keys('*******’) # サブミット submitButton = driver.find_element(By.XPATH, '//*[@id="__layout"]/div/div/div/div/div/div[6]/button') submitButton.click()
  8. WebDriver - テキストやスクリーンショットの取得 # 見出しテキストの取得 lastColumnHeader = driver.find_element(By.XPATH, '//*[@id="__layout"]/div/div/div/div/div[3]/div[12]/a/div[2]/h2') lastColumnHeaderText

    = lastColumnHeader.text print(lastColumnHeaderText) # スクリーンショットを取る driver.save_screenshot('screenshot_columnDetail.png') Image("screenshot_columnDetail.png")
  9. WebDriver - CI/CD • 前提 • WebDriverをヘッドレスモードで起動 • options.add_argument(‘--headless’) 1.

    ipynbをコマンド実行 $ jupyter nbconvert --execute UI_Test_Automation.ipynb --to notebook 2. ipynbをpyにエクスポートしてコマンド実行 $ python3 UI_Test_Automation.py
  10. 補足: CI/CDとは • 継続的インテグレーション(Continuous Integration) • 開発者が行ったコード変更がリポジトリにマージされたタイミングで、その内容をビルドしテスト する一連のプロセスを繰り返し行う開発手法 • 継続的デリバリー(Continuous

    Delivery) • 開発者が行ったコード変更がリポジトリにマージされたタイミングで、その内容をリリースするプ ロセスを繰り返し行う開発手法 CI/CDを開発プロセスに組み込むメリット • リリースサイクルの向上 • バグの早期発見
  11. WebDriver感想 25 • 品質管理としては以下の管理がしやすい • テストケース変更管理(誰が・いつ・どこを) • テストケースのバージョン管理&必要に応じてロールバック • エクスポート/インポート可能

    • テストケースの作成・メンテナンスするコスト大 • 例: DOM構造が変わるとテストが失敗する • リトライの仕組み等は自力で実装する必要がある • 例: ネットワーク状況が悪いとテストが失敗する • レイアウト崩れはキャッチできない • 実行するインフラを準備する必要がある
  12. WebDriver感想(再) 39 • 品質管理としては以下の管理がしやすい • テストケース変更管理(誰が・いつ・どこを) • テストケースのバージョン管理&必要に応じてロールバック • エクスポート/インポート可能

    • テストケースの作成・メンテナンスするコスト大 • 例: DOM構造が変わるとテストが失敗する • リトライの仕組み等は自力で実装する必要がある • 例: ネットワーク状況が悪いとテストが失敗する • レイアウト崩れはキャッチできない • 実行するインフラを準備する必要がある
  13. • 品質管理としては以下の管理が難しい • テストケース変更管理(誰が・いつ・どこを) • テストケースのバージョン管理&必要に応じてロールバック • エクスポート/インポートできない • テストケースの作成・メンテナンスするコストは場合による

    • 実行のスケジュール、リトライ、記録は自動 • モニタリング機能としては優秀、Dashboardが見やすい • Selenium IDE/Gridと機能面は類似、 より使いやすい印象 40 Browser Test感想(再)
  14. 技術選定する上で考えたほうが良いこと 41 • 解決したい課題は何か • 技術の将来性・メンテナンス状況 • スモールスタートできるか(≒導入コスト) • 継続できるか(≒メンテナンスコスト)

    • 広げていけるか(≒既存リソースとの親和性) • 会社としての規定 コストが意味するものはお金だけではない、それに必要なインフラ、学習、人材、 セキュリティ、などなど踏まえて総合的に判断する必要がある