自社開発サイトの認証周りのテストをCypressを使用して自動化する
目次
テストケース
今回作成するテストケース
・ログインを実施する(正常系)
・ログアウトを実施する(正常系)
の2パターンを作成しようと思います
シナリオを考える
まず、ログインを実施する(正常系)から
条件:
・未ログイン状態であること
・ログイン画面が表示されていること
手順:
・メールアドレスを入力する
・パスワードを入力する
・ログインボタンをクリックする
期待値:
・ログイン後ページが表示されること
・ログイン済み状態であること
次に、ログアウトを実施する(正常系)です。
条件:
・ログイン済み状態であること
・ログイン済み画面が表示されていること
手順:
・ログアウトボタンをクリックする
期待値:
・ログアウト後ページが表示されること
・未ログイン状態であること
テストコードを書いていく
それでは、作成したシナリオに沿ったテストを作成していきます。
ログインを実施する(正常系)
条件:
・未ログイン状態であること
今回テストを行うwebアプリケーションの認証方法はセッションベース認証の為、「未ログイン状態であること」を「cookieがクリアされていること」というように言い換え、記載していきます。
Cypressはテスト実行タイミングにてcookieはクリアされるようなのですが、念の為行っておきましょう
cy.clearCookie("cookie");
cy.reload(); //念の為ページをリロード
次に
・ログイン画面が表示されていること
こちらを記載します。
ルートURLは環境変数化を行っているので、こちらを編集しログイン画面のURLとします。
環境変数に関してはこちら
const baseUrl = Cypress.config("baseUrl"); //環境変数で設定
const path = "/login";
const fullUrl = baseUrl + path;
cy.visit(fullUrl);
これで条件は設定完了です。
手順:
・メールアドレスを入力する
・パスワードを入力する
・ログインボタンをクリックする
上記を記載していきます、メールアドレス、パスワードはplaceholderから検索し、環境変数に設定した値をを入力するようにします。
cy.get('[placeholder="info@examlpe.jp"]').type(Cypress.config("email"));
cy.get('[placeholder="半角英数字8文字以上"]').type(Cypress.config("password"));
cy.get("button").contains("ログイン").click();
期待値:
・ログアウト後ページが表示されること
・未ログイン状態であること
上記を記載していきます、「ログイン済み状態であること」を「Cookieに”session”が存在すること」に置き換えます
cy.url().should("include", "/jp/home");
cy.getCookie("session").should("exist");
それでは、条件、手順、期待値を繋げてみます。
//条件
cy.clearCookie("cookie");
cy.reload();
const baseUrl = Cypress.config("baseUrl");
const path = "/login";
const fullUrl = baseUrl + path;
cy.visit(fullUrl);
//手順
cy.get('[placeholder="info@examlpe.jp"]').type(Cypress.config("email"));
cy.get('[placeholder="半角英数字8文字以上"]').type(Cypress.config("password"));
cy.get("button").contains("ログイン").click();
//期待値
cy.url().should("include", "/jp/home");
cy.getCookie("session").should("exist");
これでログインに関するテストはできました。
次にログアウトのテストを作成します。
ログアウトを実施する(正常系)
条件:
・ログイン済み状態であること
・ログイン済み画面が表示されていること
こちらは先ほど作成したログインのテストコードを使用します。
あと、このタイミングで、ログイン後(ログイン可能な)のセッションIDを取得しておきます
cy.clearCookie("cookie");
cy.reload();
cy.visit(fullUrl);
cy.get('[placeholder="info@examlpe.jp"]').type(Cypress.config("email"));
cy.get('[placeholder="半角英数字8文字以上"]').type(
Cypress.config("password")
);
cy.get("button").contains("ログイン").click();
cy.url().should("include", "/jp/home");
cy.getCookie("session").then((loginCookie) => {
const loginSessionValue = loginCookie.value;
}); //ログイン後ののセッションIDを取得
手順:
・ログアウトボタンをクリックする
上記を記載します。
cy.get("p").contains("ログアウト").click();
期待値:
・ログアウト後ページが表示されること
・未ログイン状態であること
上記を記載していきます、「未ログイン状態であること」を「ログイン中のセッションIDと現在のセッションIDが相違していること」に置き換えます
cy.url().should("include", "/jp/logout");
cy.getCookie("session").then((logoutcookie) => {
const logoutSessionValue = logoutcookie.value;
expect(logoutSessionValue).to.not.equal(loginSessionValue);
});
それでは、条件、手順、期待値を繋げてみます。
//条件
cy.clearCookie("cookie");
cy.reload();
cy.visit(fullUrl);
cy.get('[placeholder="info@examlpe.jp"]').type(Cypress.config("email"));
cy.get('[placeholder="半角英数字8文字以上"]').type(
Cypress.config("password")
);
cy.get("button").contains("ログイン").click();
cy.url().should("include", "/jp/home");
cy.getCookie("session").then((loginCookie) => {
const loginSessionValue = loginCookie.value;
//手順
cy.get("p").contains("ログアウト").click();
//期待値
cy.url().should("include", "/jp/logout");
cy.getCookie("session").then((logoutcookie) => {
const logoutSessionValue = logoutcookie.value;
expect(logoutSessionValue).to.not.equal(loginSessionValue);
});
});
これでログアウトに関するテストも完了です。
テストを実行する
最後に作成したテストを実行してみましょう
ログイン、ログアウトのテストの成功を確認しました。