13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

地味なテスト作業を自動化へ (Jest、Puppeteer)

Last updated at Posted at 2020-07-15

WEBサイトの動作確認など、地味な手動テスト作業をで自動スクリプトでやって貰います。こんな感じです。
2.gif

開発環境

  • node.js & npm すでにインストール
  • なんかのコードエディター (VS Code 2019)
  • Chrome or Chromium ブラウザ

利用モジュール

##テスト目標

今回は例でAmazon.co.jpをテスト対象として使います。
通常であれば、検索結果のページは最大48個表示されます。
検索結果のページに表示される商品の数は通常に表示されるかどうかの動作確認する目的

1. プロジェック新規作成

フォルダを新規作成し、ネームタグは任意でフォルダ内に下記のコーマンド実行:

npm init
npm install --save jest
npm install --save puppeteer

2. テストコマンドを指定

package.jsonで実行スクリプトの"test": "jest --verbose true""scripts"の下に指定します。

package.json

   {
    "name": "test-automation",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "jest --verbose true"
    },
    "author": "",
    "license": "ISC",
    "dependencies": {
        "jest": "^26.1.0",
        "puppeteer": "^5.1.0"
    }
}

3. 自動スクリプト作成

amz.test.js

let puppeteer = require('puppeteer');
let browser = null;
let page = null;

describe('AMAZON TEST', () => {

    // ユニットテスト起動
    beforeAll(async() => {
        //{headless:false}を除いたら、ブラウザを開かずにテスト実行可能
        browser = await puppeteer.launch({ headless: false });
        page = await browser.newPage();
        await page.setViewport({
            width: 1280,
            height: 720
        });

        // ロード時間が長いかもしれないので、60秒のタイムアウト設定しておく
        jest.setTimeout(60000);
    });

    // テスト終了後ブラウザを終了させる
    afterAll(async() => {
        await browser.close();
    });

    // テストケース前にamazonへ移動
    beforeEach(async() => {
        await page.goto('https://www.amazon.co.jp/');
    });

    test('うどん', async() => {
        expect.assertions(1);
        // 検索ボックスを特定、`うどん`を入力してEnterキーを押す
        const searchBox = await page.$('#twotabsearchtextbox');
        await searchBox.type('うどん');
        await searchBox.press('Enter');

        // ページがロードできたまで待機、商品ごと表示させる要素を特定し、
        // 想定した数で表示されるかどうかチェック
        await page.waitForNavigation();
        const products = await page.$$('div[class="s-expand-height s-include-content-margin s-border-bottom s-latency-cf-section"]');
        expect(products.length).toBe(48);
    });

}) 

4. テスト実行

npm run test

ページ毎ちゃんと48個の商品が表示させ、テスト合格とのコンソールアウトプット
image.png

テストFAILの場合(48以外のテスト値を設定するなど)、エラーが投げられます
image.png

##参考先
https://www.youtube.com/watch?v=wqRKEd0_suw
https://www.youtube.com/watch?v=lgkyhEHIC_c
https://www.youtube.com/watch?v=7r4xVDI2vho

13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?