無痛セットアップサイプレス&パーシー
私たちは、完全に、サイプレス、Githubのアクションとパーシーを使用して例を記録し、これは将来的に他の人を助けることができると考えています.
どんなガイドでも、再現性のないコードなしでは、lacklusterですfull repo .
変更前のブランチは Install Percy locally Implement a test Sign up Test locally Test in CI Pull Request integration
Further customization Custom selector Custom viewports and browsers
任意のスペックに視覚的なテストを追加することができます.アプリケーションのE 2 Eテストスイートで最も意味をなす仕様
ビジュアルテストの主なアイデアは以下の通りです. 必要なのは1行です それから、デフォルトと一致する新しいスナップショットは自動的に受け入れられます. 非マッチング新しいスナップショットは、percyインターフェイス上の通知をプロンプト;我々はどちらかこの新しいベースラインを拒否または受け入れる必要があります.我々が拒絶するならば、それは欠陥です.我々が受け入れるならば、我々には新しいベースラインがあります、そして、サイクルは続きます. ビジュアルスナップショットサービスの大きな販売ポイントはAIですAIは時間をかけて訓練可能です、そして、我々は我々が気にしないかもしれないささいなスナップショットdiffsを無視するためにそれを訓練することができます.スナップショットの名前が与えられていることを気にしてください.私たちは、任意のディグリーを受け入れることによって、AIを訓練することができます.我々は、スナップショットの名前、ビューポート、またはコードの任意の部分を変更することにより、トレーニングをリセットすることができます.
ここではどのように視覚テストは、specに見える.
Visual Diffを実行するには、Percyアカウントとトークンが必要です.視覚テストは、このアカウントにフックされ、実行されるときのみ実行されます
Sign up here .
新しいプロジェクトを作成します.
グラブ
また、追加する必要があります
あなたがガイドに従っている場合は、今パーシー検証メールが到着する必要があります.必ず進む前にメールを確認してください.
bashでは、トークンをエクスポートする必要があります.
Percy Webインタフェースで実行できます.
これが最初の実行であるので、許容できるスナップショットであるならパーシーに知らせなければなりません.我々はビッググリーンボタンのいずれかによってビルドを承認することができます-すべてを承認-または我々は一度に1つのスナップショットを承認したい場合は、緑の親指.
別のテストを実行しましょう、今度は、イメージがないように、APIを止めたいです.単に停止
一旦テストが実行されると、percyは視覚の相違を検出することによって壊れた像を確認します、そして、現在、分散はレビューされる必要があります.実生活では、この変更を拒否し、ビルドを失敗します.
既存のジョブに追加のステップを追加するか、Visual Testの完全な新しいジョブを作成できます.我々の意見では、チームが利用しているならば、新しい新しい仕事-後者はより良いカスタマイズ可能性を可能にします.そのシナリオチームでは、すべてのチームに特定のGitHubアクションジョブスを実行するYAMLテンプレートに記入し、テンプレートの末尾にカスタムビジュアルテストジョブを挿入できます.
我々は、スナップショットが失敗したときにチェックCi実行の詳細と外部URLを持っていない究極の開発者の経験をしたい.我々は、ギタブのリンクをクリックして、我々がどこにいる必要があります終了します.GitthubとPercyを統合しましょう.クリック
Juthubレポにパーシーをインストールするプロンプトに従ってください.それは我々がパーシーアクセスを持つべきであるreposとパーミッションを選ぶgithubへのルートです.その後、percyプロジェクトをリポジトリでリンクする必要があります.最終的にはこんなふうに見えます.
この時点でパーシーの仕事を見るためにもう1回押します.詳細をクリックすると、このコミットのパーシーインターフェイスにまっすぐになります.スナップショットが一致しない場合、percyジョブは失敗します.スナップショットを更新し、新しいベースラインとして分散を承認する場合、GITUBジョブはすぐに緑色に変わります.それ以外の場合は失敗します.無痛の開発者の経験は、常に簡単に販売されています.
我々はフルスクリーンのスナップショットを取りたくないが、サブエリアに集中したいとしましょう.percyにはこの機能はありませんが、カスタムコマンドを実装できます.
デフォルトでは、2つのViewports(375 pxと1280 px)は、Safariを含む4台のブラウザーで実行されています.これは、実行あたり8スナップショットがかかります.ブラウザの切り替えを行うProject Configuration Settings , しかし、我々はその機能の有料版が必要です.
パーシーa few configuration options . 私たちはviewport configのためのYAMLファイルを好む.ファイルを作成する
いろいろなブラウザーやビューポートをどう見ているか確認できます.この場合、各々のスナップショットは4×3チェックをアサートします、そして、我々が2つのスナップショットをするので、スペックは24のチェックをします.
それは、我々が視覚テストについて知っていなければならないすべてを包みます.
どんなガイドでも、再現性のないコードなしでは、lacklusterですfull repo .
変更前のブランチは
before-visual-testing
. ステップは、上の最終バージョンに達するために続くことができますmain
枝.ガイドの変更はthis PR . Further customization
ローカルでpercyをインストール
yarn add -D @percy/cli @percy/cypress
アットcypress/support/index.js
行を追加しますimport '@percy/cypress'
テストを実行する
任意のスペックに視覚的なテストを追加することができます.アプリケーションのE 2 Eテストスイートで最も意味をなす仕様
cypress/integration/ui-integration/user-context-retainment.spec.js
我々は、ユーザーのアバターを視覚的に拡散を確認することができます.ビジュアルテストの主なアイデアは以下の通りです.
cy.percySnapshot('any snapshot name')
. これはデフォルトのスナップショットを記録し、そのデフォルトを新しい、以降のテスト実行と比較します.最初のスナップショットを一度受け入れる必要があります.ここではどのように視覚テストは、specに見える.
// cypress/integration/ui-integration/user-context-retainment.spec.js
it('Should keep the user context between routes', () => {
cy.fixture('users').then((users) => {
cy.get('.user-picker').select(users[3].name)
cy.contains('Users').click()
cy.wait('@userStub')
cy.url().should('contain', '/users')
cy.get('.item-header').contains(users[3].name)
// the visual test
cy.percySnapshot('User selection retainment between routes')
})
})
試してみましょうyarn cy:open-e2e
. Repoでは、このコマンドはAPI、UI、テストを開始するすべての作業を行います.テストを選択user-context-retainment
そして実行します.パーシーコマンドでエントリが表示されます.ここでは何も起こりませんでした.Visual Diffを実行するには、Percyアカウントとトークンが必要です.視覚テストは、このアカウントにフックされ、実行されるときのみ実行されます
cy run
.サインアップ
Sign up here .
新しいプロジェクトを作成します.
グラブ
PERCY_TOKEN
. これはマシン、bash、ciの環境変数でなければなりません.サイプレス環境変数でないことに注意してください…でないcypress.env.json
.It makes sense to use dotenv and store this in a .gitignored
.env
file.
また、追加する必要があります
PERCY_TOKEN
ci環境変数に.あなたがガイドに従っている場合は、今パーシー検証メールが到着する必要があります.必ず進む前にメールを確認してください.
ローカルテスト
bashでは、トークンをエクスポートする必要があります.
export PERCY_TOKEN=80f74d9b1fdfce3b4f31331849357fcf...
それから、specを実行する必要があります.# start the ui and the api on a different tab
yarn dev
# run a visual test
# note: you can use any selection of specs
yarn percy exec -- cypress run --spec 'cypress/integration/ui-integration/user-context-retainment.spec.js'
実行の最後に、次のような結果が表示されます.Percy Webインタフェースで実行できます.
これが最初の実行であるので、許容できるスナップショットであるならパーシーに知らせなければなりません.我々はビッググリーンボタンのいずれかによってビルドを承認することができます-すべてを承認-または我々は一度に1つのスナップショットを承認したい場合は、緑の親指.
別のテストを実行しましょう、今度は、イメージがないように、APIを止めたいです.単に停止
yarn dev
スクリプトを起動し、yarn start
. このアプリはlocalhost上で起動されます:3000と画像が壊れて表示されます.下記は前後です.一旦テストが実行されると、percyは視覚の相違を検出することによって壊れた像を確認します、そして、現在、分散はレビューされる必要があります.実生活では、この変更を拒否し、ビルドを失敗します.
CIでテスト
既存のジョブに追加のステップを追加するか、Visual Testの完全な新しいジョブを作成できます.我々の意見では、チームが利用しているならば、新しい新しい仕事-後者はより良いカスタマイズ可能性を可能にします.そのシナリオチームでは、すべてのチームに特定のGitHubアクションジョブスを実行するYAMLテンプレートに記入し、テンプレートの末尾にカスタムビジュアルテストジョブを挿入できます.
We ran out of parallelization during testing, in the source code you will find a slightly different yml.
We disabled video and screen shot recording in visual tests, because we already have a replica of the spec(s) doing normal testing and recording those artifacts.
## .github/workflows/main.yml
# option 1: append the visual testing as a step
cypress-e2e-tests:
strategy:
matrix:
machines: [1, 2]
needs: [install-dependencies]
runs-on: ubuntu-latest
container: cypress/included:9.4.1
steps:
- uses: actions/checkout@v3
- uses: bahmutov/npm-install@v1
with: { useRollingCache: true }
- name: Cypress e2e tests 🧪
uses: cypress-io/[email protected]
with:
install: false
start: yarn dev
wait-on: 'http://localhost:3000'
browser: chrome
record: true
parallel: true
group: e2e-tests
tag: e2e-tests
env:
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
LAUNCH_DARKLY_PROJECT_KEY: ${{ secrets.LAUNCH_DARKLY_PROJECT_KEY }}
LAUNCH_DARKLY_AUTH_TOKEN: ${{ secrets.LAUNCH_DARKLY_AUTH_TOKEN }}
# visual test appended as a step
# preferred if not using GHA Remote Reusable Workflows
- name: Cypress visual tests 🧪
uses: cypress-io/[email protected]
with:
install: false # no need to install because of the above 2
start: yarn dev # concurrently starts ui and api servers
wait-on: 'http://localhost:3000'
browser: chrome
command: yarn percy exec -- cypress run --spec 'cypress/integration/ui-integration/user-context-retainment.spec.js' --config video=false,screenshotOnRunFailure=false
env:
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
## .github/workflows/main.yml
# option 2: use an entire new job for visual testing
# preferred if using remote reusable workflows
# insert at the end of your yml file
cypress-visual-tests:
needs: [install-dependencies]
runs-on: ubuntu-latest
container: cypress/included:9.4.1
steps:
- uses: actions/checkout@v3
- uses: bahmutov/npm-install@v1
with: { useRollingCache: true }
- name: Cypress visual tests 🧪
uses: cypress-io/[email protected]
with:
install: false
start: yarn dev
wait-on: 'http://localhost:3000'
browser: chrome
command: yarn percy exec -- cypress run --spec 'cypress/integration/ui-integration/user-context-retainment.spec.js' --config video=false,screenshotOnRunFailure=false
env:
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
これが新しいCIジョブです.それが通過するとき、パーシーダッシュボードはちょうどローカルにスクリプトを走らせるのと同じように見えます.プルリクエストの統合
我々は、スナップショットが失敗したときにチェックCi実行の詳細と外部URLを持っていない究極の開発者の経験をしたい.我々は、ギタブのリンクをクリックして、我々がどこにいる必要があります終了します.GitthubとPercyを統合しましょう.クリック
Add integration
パーシーインタフェースについてJuthubレポにパーシーをインストールするプロンプトに従ってください.それは我々がパーシーアクセスを持つべきであるreposとパーミッションを選ぶgithubへのルートです.その後、percyプロジェクトをリポジトリでリンクする必要があります.最終的にはこんなふうに見えます.
この時点でパーシーの仕事を見るためにもう1回押します.詳細をクリックすると、このコミットのパーシーインターフェイスにまっすぐになります.スナップショットが一致しない場合、percyジョブは失敗します.スナップショットを更新し、新しいベースラインとして分散を承認する場合、GITUBジョブはすぐに緑色に変わります.それ以外の場合は失敗します.無痛の開発者の経験は、常に簡単に販売されています.
更なるカスタマイズ
カスタムセレクター
我々はフルスクリーンのスナップショットを取りたくないが、サブエリアに集中したいとしましょう.percyにはこの機能はありませんが、カスタムコマンドを実装できます.
// cypress/support/commands.js
import '@percy/cypress'
...
// https://github.com/percy/percy-cypress/issues/56
Cypress.Commands.add(
'percySnapshotElement',
{ prevSubject: true },
(subject, name, options) => {
cy.percySnapshot(name, {
domTransformation: (documentClone) =>
scope(documentClone, subject.selector),
...options
})
}
)
function scope(documentClone, selector) {
const element = documentClone.querySelector(selector)
documentClone.querySelector('body').innerHTML = element.outerHTML
return documentClone
}
ここでは2番目のスナップショットを追加しました.// cypress/integration/ui-integration/user-context-retainment.spec.js
it('Should keep the user context between routes', () => {
cy.fixture('users').then((users) => {
cy.get('.user-picker').select(users[3].name)
cy.contains('Users').click()
cy.wait('@userStub')
cy.url().should('contain', '/users')
cy.get('.item-header').contains(users[3].name)
// the full-page visual test
cy.percySnapshot('User selection retainment between routes')
// using custom command for css selector focus
cy.getByCy('user-details').percySnapshotElement(
'user details with custom selector'
)
})
})
カスタムビューポートとブラウザ
デフォルトでは、2つのViewports(375 pxと1280 px)は、Safariを含む4台のブラウザーで実行されています.これは、実行あたり8スナップショットがかかります.ブラウザの切り替えを行うProject Configuration Settings , しかし、我々はその機能の有料版が必要です.
パーシーa few configuration options . 私たちはviewport configのためのYAMLファイルを好む.ファイルを作成する
.percy.yml
Repoルートで## .percy.yml
version: 2
snapshot:
widths: [750, 1024, 1920]
それぞれのスナップショットは、3つの異なるビューポートになります.いろいろなブラウザーやビューポートをどう見ているか確認できます.この場合、各々のスナップショットは4×3チェックをアサートします、そして、我々が2つのスナップショットをするので、スペックは24のチェックをします.
それは、我々が視覚テストについて知っていなければならないすべてを包みます.
Reference
この問題について(無痛セットアップサイプレス&パーシー), 我々は、より多くの情報をここで見つけました https://dev.to/muratkeremozcan/painlessly-setup-cypress-percy-with-github-actions-in-minutes-1akiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol