Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ON-WEEK][POC] Playwright #190803

Merged
merged 79 commits into from
Sep 6, 2024
Merged

Conversation

MadameSheema
Copy link
Member

@MadameSheema MadameSheema commented Aug 20, 2024

UPDATE

It has been removed the execution of the playwright tests on buildkite, the execution will be re-enabled as soon as we are ready and as described below in the PR, there are still steps pending to be done.

Motivation

Cypress is not performing well lately.

  • We have been facing significant performance issues with Cypress. For instance, it takes a long time to open the visual interface and start executing tests.

Teams are finding it increasingly challenging to write new tests and debug existing ones.

  • The time and effort required to create new tests or troubleshoot existing ones have become burdensome.

Concern about the impact this could have on our testing practices.

  • Lose motivation to write tests or, worse, skip writing crucial tests.

Why Playwright?

  • Compared to Cypress, Playwright seems to be known for its faster execution times and lower resource consumption. What could have a positive impact by having faster feedback during development and execution of new tests as well as more efficient use of CI resources.

  • Provides powerful debugging tools which can make easier to write, debug and execute tests.

  • Seems to provide the same capabilities we currently use in our Cypress tests.

  • Given Playwright's active development and backing by Microsoft, it is likely to continue evolving rapidly, making it a safe long-term choice.

Considering all the above, Playwright seems to be a strong candidate to replace Cypress and address all the issues we are facing lately regarding UI test automation.

Objective of this POC

To write in Playwright a couple of tests we currently have on Cypress to check the performance of the tool as well as the development experience.

The tests selected have been:

  • enable_risk_score_redirect.cy.ts

    • Owned by Entity Analytics team and selected by its simplicity since it does not need any special setup to be executed and is short.
  • manual_rule_run.cy.ts

    • Owned by Detection Engine team and selected because is short and adds a bit more of complexity due to it needs of clean-up and setting up initial data through the API.

How to execute the tests

Visual mode

  • Navigate to: x-pack/test/security_solution_playwright
  • Execute: yarn open:ess for ESS environment or yarn open:serverless for serverless environment.

Headless mode

  • Navigate to: x-pack/test/security_solution_playwright
  • Execute: yarn run:ess for ESS environment or yarn run:serverless for serverless environment.

From VScode

  • Install Playwright Test for VScode extension by Microsoft
  • Navigate to: x-pack/test/security_solution_playwright
  • Execute: yarn open:ess for ESS environment or yarn open:serverless for serverless environment.
  • Open your IDE
  • Click on the Testing icon
  • On the Test Explorer click on the three dots to select the profile you are going to execute ess or serverless
  • Click on the test you want to execute or navigate to the spec file of the test and execute it from the same spec.

My experience

  • Tests are way easier to implement than with Cypress.
  • Playwright does not rely on chainable commands. Chainable commands on Cypress can lead to confusing code.
  • Without chainable commands, the flow of the tests is more explicit and easier to understand.
  • You can notice that the tool has been designed with Typescript in mind.
  • Is super easy to implement the Page Object Model pattern (POM).
  • With POM the test code is clean and focused on "what" rather than "how".
  • Love the fact that you can execute the tests from the same IDE without having to switch windows during test development.
  • The visual mode execution gives you lots of information out of the box.

The scope of this PR

  • Sets the initial infrastructure to write and execute tests with Playwright.
  • Has examples and set a basis about how to write tests using the POM.
  • Allows the execution of the tests in ESS and serverless (just stateless environment).
  • Integrates the execution of the tests with buildkite.

Pending to be done/investigate

  • Proper readme
  • How to split tests and PO between the different teams
  • Good reports on CI
  • Upload screenshots on CI
  • Flaky test suite runner
  • Complete the labeling
  • Execution of the tests on MKI environments

FAQ

Can I start adding tests to playwright?
Currently, you can explore and experiment with Playwright, but there is still work pending to be done to make the tool officially usable.

Why security engineering productivity is the owner of the playwright folder?
This is something temporary to make sure that good practices are followed.

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

@MadameSheema
Copy link
Member Author

/ci

renovate.json Outdated Show resolved Hide resolved
Co-authored-by: Aleh Zasypkin <[email protected]>
@MadameSheema
Copy link
Member Author

MadameSheema commented Sep 3, 2024

MISSING REVIEWS

Files by Code Owner

elastic/appex-qa

  • x-pack/test/api_integration/deployment_agnostic/default_configs/stateful.config.base.ts

elastic/kibana-operations

  • .buildkite/ftr_security_serverless_configs.yml
  • .buildkite/ftr_security_stateful_configs.yml
  • .buildkite/pipelines/pull_request/security_solution/playwright.yml
  • .buildkite/scripts/pipelines/pull_request/pipeline.ts
  • .buildkite/scripts/steps/functional/security_serverless_playwright.sh
  • .buildkite/scripts/steps/functional/security_solution_playwright.sh
  • kbn_pm/src/lib/bazel.mjs

@MadameSheema MadameSheema self-assigned this Sep 5, 2024
Copy link
Member

@jbudz jbudz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.buildkite / kbn_pm/src/lib/bazel.mjs lgtm

@kibana-ci
Copy link
Collaborator

💛 Build succeeded, but was flaky

Failed CI Steps

Metrics [docs]

✅ unchanged

History

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

cc @MadameSheema

@dmlemeshko dmlemeshko self-requested a review September 6, 2024 11:07
Copy link
Member

@dmlemeshko dmlemeshko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Appex-QA changes lgtm

@MadameSheema MadameSheema merged commit 4041d27 into elastic:main Sep 6, 2024
42 checks passed
@kibanamachine kibanamachine added the backport:skip This commit does not require backporting label Sep 6, 2024
crespocarlos pushed a commit to crespocarlos/kibana that referenced this pull request Sep 11, 2024
## UPDATE
It has been removed the execution of the playwright tests on buildkite,
the execution will be re-enabled as soon as we are ready and as
described below in the PR, there are still steps pending to be done.

## Motivation

**Cypress is not performing well lately.**
* We have been facing significant performance issues with Cypress. For
instance, it takes a long time to open the visual interface and start
executing tests.

**Teams are finding it increasingly challenging to write new tests and
debug existing ones.**
* The time and effort required to create new tests or troubleshoot
existing ones have become burdensome.

**Concern about the impact this could have on our testing practices.**
* Lose motivation to write tests or, worse, skip writing crucial tests.

## Why Playwright?

* Compared to Cypress, Playwright seems to be known for its faster
execution times and lower resource consumption. What could have a
positive impact by having faster feedback during development and
execution of new tests as well as more efficient use of CI resources.

* Provides powerful debugging tools which can make easier to write,
debug and execute tests.

* Seems to provide the same capabilities we currently use in our Cypress
tests.

* Given Playwright's active development and backing by Microsoft, it is
likely to continue evolving rapidly, making it a safe long-term choice.

Considering all the above, Playwright seems to be a strong candidate to
replace Cypress and address all the issues we are facing lately
regarding UI test automation.

## Objective of this POC

To write in Playwright a couple of tests we currently have on Cypress to
check the performance of the tool as well as the development experience.

The tests selected have been:
-
[enable_risk_score_redirect.cy.ts](https://github.com/elastic/kibana/blob/main/x-pack/test/security_solution_cypress/cypress/e2e/entity_analytics/dashboards/enable_risk_score_redirect.cy.ts)
- Owned by Entity Analytics team and selected by its simplicity since it
does not need any special setup to be executed and is short.

-
[manual_rule_run.cy.ts](https://github.com/elastic/kibana/blob/main/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_gaps/manual_rule_run.cy.ts)
- Owned by Detection Engine team and selected because is short and adds
a bit more of complexity due to it needs of clean-up and setting up
initial data through the API.
  
## How to execute the tests

### Visual mode
- Navigate to: `x-pack/test/security_solution_playwright`
- Execute: `yarn open:ess` for ESS environment or `yarn open:serverless`
for serverless environment.

### Headless mode
- Navigate to: `x-pack/test/security_solution_playwright`
- Execute: `yarn run:ess` for ESS environment or `yarn run:serverless`
for serverless environment.

### From VScode
- Install `Playwright Test for VScode` extension by Microsoft
- Navigate to: `x-pack/test/security_solution_playwright`
- Execute: `yarn open:ess` for ESS environment or `yarn open:serverless`
for serverless environment.
- Open your IDE
- Click on the `Testing` icon
- On the `Test Explorer` click on the three dots to select the profile
you are going to execute `ess` or `serverless`
- Click on the test you want to execute or navigate to the spec file of
the test and execute it from the same spec.

## My experience
- Tests are way easier to implement than with Cypress.
- Playwright does not rely on chainable commands. Chainable commands on
Cypress can lead to confusing code.
- Without chainable commands, the flow of the tests is more explicit and
easier to understand.
- You can notice that the tool has been designed with Typescript in
mind.
- Is super easy to implement the Page Object Model pattern (POM).
- With POM the test code is clean and focused on "what" rather than
"how".
- Love the fact that you can execute the tests from the same IDE without
having to switch windows during test development.
- The visual mode execution gives you lots of information out of the
box.

## The scope of this PR
- Sets the initial infrastructure to write and execute tests with
Playwright.
- Has examples and set a basis about how to write tests using the POM.
- Allows the execution of the tests in ESS and serverless (just
stateless environment).
- Integrates the execution of the tests with buildkite.

## Pending to be done/investigate
- Proper readme
- How to split tests and PO between the different teams
- Good reports on CI
- Upload screenshots on CI
- Flaky test suite runner 
- Complete the labeling
- Execution of the tests on MKI environments

## FAQ
**Can I start adding tests to playwright?**
Currently, you can explore and experiment with Playwright, but there is
still work pending to be done to make the tool officially usable.

**Why security engineering productivity is the owner of the playwright
folder?**
This is something temporary to make sure that good practices are
followed.

---------

Co-authored-by: kibanamachine <[email protected]>
Co-authored-by: dkirchan <[email protected]>
Co-authored-by: Aleh Zasypkin <[email protected]>
Co-authored-by: Jon <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport:skip This commit does not require backporting release_note:skip Skip the PR/issue when compiling release notes Team: SecuritySolution Security Solutions Team working on SIEM, Endpoint, Timeline, Resolver, etc. v8.16.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.