SlideShare a Scribd company logo
1 of 10
Download to read offline
画面テスト自動化
ってどうなの??
武藤 梨沙
今更だけど
ぶとー@産業3部3Gr
社内LTは3回目です!
モバイルアプリが間に合わな
かったので別の話をします
自己紹介
デメリット
メリット
画面テスト自動化のメリット/デメリット
不具合の早期発見
テストの人為ミス防止
手動よりも楽になる
入力パターン網羅
大量データ
マルチブラウザでの入力
少なからず導入コスト
UI変更に伴うテストコードメンテ
手動テストとのカバー範囲を考え
る必要がある
デメリット
メリット
画面テスト自動化のメリット/デメリット
不具合の早期発見
テストの人為ミス防止
手動よりも楽になる
入力パターン網羅
大量データ
マルチブラウザでの入力
少なからず導入コスト
UI変更に伴うテストコードメンテ
手動テストとのカバー範囲を考え
る必要がある
どれくらいコストが
掛かるか試してみる
ライブラリ 

多言語・多くのブラウザで実行可
メジャーどころ
特徴
ブラウザドライバーなしで動作
chrome × js/tsならこちら
java、kotlin、python、ruby、c#、
javascript、typescript
対応言語 javascript、typescript
chrome、firefox、edge、
safari、opera、IE
対応ブラウザ chrome、firefox
今回試したブラウザテストのライブラリ
新しめのplaywrightというライブラリもあるそうです(今度試してみます)
ステップ
パッケージ管理アプリでインストール
まずはnpm install!!
1
ステップ
2
ステップ
3
導入ステップ(結構簡単!)
ブラウザ設定&操作シナリオ&assertを
tsファイルに書く
package.json scriptに上記tsファイルを
実行するよう記述(nodeでOK)
こんな画面を作って試してみました
実際のコード(Selenium)
const webdriver = require('selenium-webdriver');
const { Builder, By, until } = webdriver;
// ブラウザ設定
const webdriver = require('selenium-webdriver');
const { Builder, By, until } = webdriver;
const assert = require('assert');
const capabilities = webdriver.Capabilities.chrome();
capabilities.set('chromeOptions', {
args: [
'--headless',
'--no-sandbox',
'--disable-gpu',
`--window-size=1980,1200`
]
});
// ログイン成功
(async () => {
const driver = await new Builder().withCapabilities(capabilities).build();
await driver.get("http://localhost:3000");
// IDパスワードを入力
let userId = await driver.findElement(By.id('loginId'));
userId.sendKeys("buto.risa");
let password = await driver.findElement(By.id('password'));
password.sendKeys("xxxxx");
// ログイン
let loginButton = await driver.findElement(By.id('loginButton'));
loginButton.click();
await driver.wait(until.elementLocated(By.id('paymentList')), 10000);
// 支払い一覧ページへ遷移していること
assert.strictEqual(await driver.getCurrentUrl(),
"http://localhost:3000/payment");
driver.quit();
})();
実際のコード(puppeteer)
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('http://localhost:3000');
// IDパスワードを入力
const userId = await page.$('#loginId');
await userId.type('buto.risa');
const password = await page.$('#password');
await password.type('xxxxx');
// ログイン
const loginButton = await page.$('#loginButton');
await loginButton.click();
await page.waitForTimeout(3000);
// 支払い一覧ページへ遷移していること
assert.strictEqual(await page.url(), "http://localhost:3000/payment");
await browser.close();
})();
30分程で導入できたのが良い
開発中の動作確認として使いたい
修正→打鍵の繰り返し辛いよね
入出力項目多めの画面に使いたい
脳死している時に使いたい
そもそもコード書けるかが怪しい
簡単に導入できるので一旦使ってみて
合わなかったら止めるでも良いのかも
感想

More Related Content

More from risa buto

無償ケア労働図鑑 〜これって愛なの?搾取なの?〜
無償ケア労働図鑑 〜これって愛なの?搾取なの?〜無償ケア労働図鑑 〜これって愛なの?搾取なの?〜
無償ケア労働図鑑 〜これって愛なの?搾取なの?〜risa buto
 
電子工作で猫との暮らし改善
電子工作で猫との暮らし改善電子工作で猫との暮らし改善
電子工作で猫との暮らし改善risa buto
 
座禅入門 by佐谷さん
座禅入門 by佐谷さん座禅入門 by佐谷さん
座禅入門 by佐谷さんrisa buto
 
20230108_AWS試験山張り会
20230108_AWS試験山張り会20230108_AWS試験山張り会
20230108_AWS試験山張り会risa buto
 
20230107_AWS試験山張り会
20230107_AWS試験山張り会20230107_AWS試験山張り会
20230107_AWS試験山張り会risa buto
 
20221231_資格もくもく会
20221231_資格もくもく会20221231_資格もくもく会
20221231_資格もくもく会risa buto
 
エンジニアとして生き残るには
エンジニアとして生き残るにはエンジニアとして生き残るには
エンジニアとして生き残るにはrisa buto
 
node.js入門
node.js入門node.js入門
node.js入門risa buto
 
汗っかき問題と対策
汗っかき問題と対策汗っかき問題と対策
汗っかき問題と対策risa buto
 
terraform基礎
terraform基礎terraform基礎
terraform基礎risa buto
 
手作りのものが食べたい
手作りのものが食べたい手作りのものが食べたい
手作りのものが食べたいrisa buto
 
Invitation of Musical
Invitation of MusicalInvitation of Musical
Invitation of Musicalrisa buto
 
発声練習
発声練習発声練習
発声練習risa buto
 
ミュージカル入門
ミュージカル入門ミュージカル入門
ミュージカル入門risa buto
 
Javaキャッチアップ(SE9-12)
Javaキャッチアップ(SE9-12)Javaキャッチアップ(SE9-12)
Javaキャッチアップ(SE9-12)risa buto
 
Androidの非同期
Androidの非同期Androidの非同期
Androidの非同期risa buto
 
Pixel game creation
Pixel game creationPixel game creation
Pixel game creationrisa buto
 
pygame+gymで強化学習
pygame+gymで強化学習pygame+gymで強化学習
pygame+gymで強化学習risa buto
 
料理はじめました
料理はじめました料理はじめました
料理はじめましたrisa buto
 

More from risa buto (20)

無償ケア労働図鑑 〜これって愛なの?搾取なの?〜
無償ケア労働図鑑 〜これって愛なの?搾取なの?〜無償ケア労働図鑑 〜これって愛なの?搾取なの?〜
無償ケア労働図鑑 〜これって愛なの?搾取なの?〜
 
電子工作で猫との暮らし改善
電子工作で猫との暮らし改善電子工作で猫との暮らし改善
電子工作で猫との暮らし改善
 
座禅入門 by佐谷さん
座禅入門 by佐谷さん座禅入門 by佐谷さん
座禅入門 by佐谷さん
 
20230108_AWS試験山張り会
20230108_AWS試験山張り会20230108_AWS試験山張り会
20230108_AWS試験山張り会
 
20230107_AWS試験山張り会
20230107_AWS試験山張り会20230107_AWS試験山張り会
20230107_AWS試験山張り会
 
20221231_資格もくもく会
20221231_資格もくもく会20221231_資格もくもく会
20221231_資格もくもく会
 
エンジニアとして生き残るには
エンジニアとして生き残るにはエンジニアとして生き残るには
エンジニアとして生き残るには
 
node.js入門
node.js入門node.js入門
node.js入門
 
汗っかき問題と対策
汗っかき問題と対策汗っかき問題と対策
汗っかき問題と対策
 
terraform基礎
terraform基礎terraform基礎
terraform基礎
 
手作りのものが食べたい
手作りのものが食べたい手作りのものが食べたい
手作りのものが食べたい
 
Invitation of Musical
Invitation of MusicalInvitation of Musical
Invitation of Musical
 
発声練習
発声練習発声練習
発声練習
 
ミュージカル入門
ミュージカル入門ミュージカル入門
ミュージカル入門
 
Javaキャッチアップ(SE9-12)
Javaキャッチアップ(SE9-12)Javaキャッチアップ(SE9-12)
Javaキャッチアップ(SE9-12)
 
Androidの非同期
Androidの非同期Androidの非同期
Androidの非同期
 
about me
about meabout me
about me
 
Pixel game creation
Pixel game creationPixel game creation
Pixel game creation
 
pygame+gymで強化学習
pygame+gymで強化学習pygame+gymで強化学習
pygame+gymで強化学習
 
料理はじめました
料理はじめました料理はじめました
料理はじめました
 

画面テスト自動化