エンドツーエンド試験入門


エンドツーエンドテストは何ですか?


あなたは、自動テストをスペクトル上に存在すると考えることができます.彼らはall valuableですが、様々なタイプとそれらを使用するときの違いを知っているのは役に立ちます.

一端は単体テストで、個々のメソッドやコンポーネントの機能をテストするために使用されます.これらは、アプリケーションのコアビルディングブロックが分離して期待通りに機能することを保証するのに役立ちます.
中間は統合テストです.これらは、複数のユニットまたはモジュール間を横断するコードパスで、単体テスト、実行、アサートからレベルを抽象化したテストです.今、我々はアプリケーションとは、お互いと相互作用の異なる部分を確保するために開始している.
最後に、反対側に、エンドツーエンド(E 2 E)テストです.これらのテストは、上から下にアプリケーションの全体の表面積をカバーすることを目的としています.これらは一般的にエンドユーザから期待されるコードパスに従うべきです.

エンドツーエンドのテストをなぜ書くべきですか?



典型的な「テストピラミッド」(上記)で、E 2 Eテストはピラミッドのまさしくそのトップを表します.これは、彼らが書くことができて、維持するために高価で、遅くなることができるという事実のため、したがって、あなたのチームが責任があるテストのより少ないパーセンテージを作るべきです.しかし、このピラミッドの周りで一般的に言及することができないのは、ピラミッドの段を動かすので、それぞれのテストの形式がより自信を持っているということです.
なぜエンドツーエンドのテストが正確に信頼を提供するのか?前に述べたように、彼らはできるだけ密接に本当のユーザーをエミュレートするべきです.これは、あなたのE 2 Eテストの1つが本当の失敗に終わるとき、あなたが本当のユーザーが彼ら自身で後で発見したバグを捕えていることを意味します.これは、私の個々のメソッドが正しい文字列、または私の統合テストを返す私の個々のメソッドが私の終点が正しく私のメソッドを呼び出すことを返すことを伝える単位テストよりもはるかに有用です.
それで、なぜ、E 2 Eはテストピラミッドの最小の層ですか?我々が上記に触れたように、E 2 Eテストは歴史的に、チームが維持するのが遅かった、痛くて、高価でした.フレームワークはセットアップして、使用するのが難しかったです、テストはvariety of common reasonsのためにflakyでした、そして、しばしば、会社はこの役割を満たすためにマニュアルQAチームさえ持っていました.
幸運にも、物事は変化し、エンドツーエンドのテストはこれまで以上に実行可能です.

どのように、あなたは終わりから終わりまでテストを書き始めますか?


E 2 Eテストがどのようなものか、なぜ重要なのかを理解しているので、どのように実装を開始するのですか?今日、いくつかの人気のオプションをWebアプリケーションのために行きましょう.
以下の例では、Amazonの「Add to to cart」機能をテストしているとしましょう.我々は、“靴”を検索するつもりだ、私たちのカートに結果を追加し、単にそれが実際にカートにあることを確認します.

操り人形


PuppeteerはChromeの「ヘッドレス」インスタンスを実行するためのGoogleによるノードライブラリです.長年にわたって広く知られていて、それは現在いくつかの時間の間、テストコミュニティで大きな存在でした.これは、プログラムとのインターフェイスを使用してクロムを操作することができます.
Patpeteer自体は単にテスト目的のために意図されていないので、テストするためには、既存のテストライブラリと組み合わせる必要がありますと我々は期待すると主張する(パンを意図).Jestは最も人気のあるJavaScriptのオプションであり、jest-puppeteerを使用して操り人形とペアにすることができます.
describe('amazon.com', () => {
    beforeAll(async () => {
        await page.goto('https://amazon.com');
    });

    it('should allow adding to cart', async () => {
        const searchInput = await page.$('input#twotabsearchtextbox');
        searchInput.type('shoes');

        const productLink = await page.$('#SEARCH_RESULTS-SEARCH_RESULTS a');
        const productTitle = productLink.evaluate((node) => node.innerText);

        await productLink.click();
        await page.click('#add-to-cart-button');

        await page.click('#hlb-view-cart');
        await page.waitForFunction(`document.querySelector(".sc-product-link").innerText.includes("${productTitle}")`);
    });
});

セレン


Selenium WebDriverは、ブラウザを自動化し、インタフェースするための別のAPIである.Petpeteerとは対照的に、セレンはすべての人気のブラウザをサポートしています.
お祭りのように、セレン自体はテストやアサーション機能を提供しません.しかしながら、我々はJESTと統合するもう一つの方法を持っています.
describe('amazon.com', () => {
    beforeAll(async () => {
        await page.goto('https://amazon.com');
    });

    it('should allow adding to cart', () => {
        const searchInput = driver.findElement(By.css('input#twotabsearchtextbox'));
        searchInput.sendKeys('shoes');

        const productLink = driver.findElement(By.css('#SEARCH_RESULTS-SEARCH_RESULTS a'));
        const productName = productLink.getText();

        productLink.click();
        driver.findElement(By.css('#add-to-cart-button')).click();

        driver.findElement(By.css('#hlb-view-cart')).click();
        expect(driver.findElements(By.css('.sc-product-link'))).resolves.toHaveText(productName);
    });
});

ジェスト環境 サイプレス.io


おそらく最も人気のあるオプションは、 JavascriptのフレームワークとSaaSはE 2 Eのアプリケーションをテストするための提供です.フレームワークとCLIを通して、簡単なJavaScriptテストを書き始め、結果を見ることはかなり簡単です.
describe('amazon.com', () => {
    beforeAll(() => {
        cy.visit('https://amazon.com');
    });

    it('should allow adding to cart', () => {
        const searchInput = cy.get('input#twotabsearchtextbox');
        searchInput.type('shoes');

        const productLink = cy.get('#SEARCH_RESULTS-SEARCH_RESULTS a');
        const productName = productLink.invoke('text');

        productLink.click();
        cy.contains('Add to Cart').click();

        cy.contains('Cart').click();
        cy.contains(productName);
    });
});

サイプレス.io セイウチ愛


は、真のエンドツーエンドテストの複雑さと痛み点を離れて抽象的に見えている新しい、最初のSaaSオプションです.AIと人間の検証の組み合わせで、セイウチ.AIは平易な英語でテストを指定することができますし、単一のAPIの呼び出しだけで.
walrus -a YOUR_API_TOKEN -u https://amazon.com -i \
    'Search for "shoes"' \
    ‘Add a result to your shopping cart’ \
    'Ensure the shoes are in your cart'
人間が読める文の使用のおかげで我々が必要とする多くのより少ない指示に注意してください?彼らのより高いレベルの記述のために、彼らは本質的に特定のセレクタより本質的に壊れやすいです.
それはあなたのために意味があるかどうかを確認するためにwalrus.aiで始まることも無料です.walrus.ai!

今日それを試してください ラッピング


あなたが既にしなかったならば、うまくいけば、あなたは現在、自動化されたテストのいろいろなタイプの違いを理解します、そして、あなたのアプリケーションのために終わりから終わりまでテストを書くことの利点と同様に.たぶん、あなたは、あなたの最初のE 2 Eテストを至急実行するために、 を使いさえしました!
将来のポストでは、エンドツーエンドのテストを確実にするためのベストプラクティスを議論します.