Vedro Screenshot Matcher
The screenshot_matcher (a.k.a. Machu Picchu) is a powerful tool designed for developers and testers to visually compare two versions of an application. By contrasting a production version (known as "golden") with a development version (referred to as "test"), spotting visual inconsistencies becomes more straightforward.
Integrated seamlessly with the vedro testing framework, it aids in performing visual regression tests with ease.
Installation
-
Install the Plugin
vedro plugin install vedro-screenshot-matcher -
Configure the Plugin In your
vedro.cfg.py:
import vedro
import screenshot_matcher
class Config(vedro.Config):
class Plugins(vedro.Config.Plugins):
class ScreenshotMatcher(screenshot_matcher.ScreenshotMatcher):
test_app_url = "http://localhost"
golden_app_url = "http://golden-app.com"
Make sure to provide the correct test_app_url and golden_app_url in the configuration.
Quick Start
Suppose you have a basic test as below:
import vedro
from contexts import opened_index_page
class Scenario(vedro.Scenario):
subject = "share page"
def given_opened_page(self):
self.page = opened_index_page()
def when_user_click_on_share(self):
self.page.get_by_text("Share").click()
def then_it_should_show_share_popup(self):
share_popup = self.page.locator(".share-popup .title")
assert share_popup.text_content() == "Share Page"
The context that opens the index page:
import vedro
import playwright
from os import environ
@vedro.context
async def opened_index_page():
browser = await playwright.chromium.launch()
page = await browser.new_page()
await page.goto(environ["APP_URL"])
return page
To implement a screenshot assertion:
- Add the
@screenshot_assertsdecorator at the beginning of the scenario - Include the
match_screenshotassertion where needed
import vedro
from screenshot_matcher import screenshot_asserts, match_screenshot
@screenshot_asserts() # Step 1: Add decorator
class Scenario(vedro.Scenario):
subject = "share page"
def given_opened_page(self):
self.page = opened_index_page()
def when_user_click_on_share(self):
self.page.get_by_text("Share").click()
def then_it_should_show_share_popup(self):
share_popup = self.page.locator(".share-popup .title")
assert share_popup.text_content() == "Share Page"
assert match_screenshot(share_popup) # Step 2: Add screenshot assertion
By following these steps, the plugin will:
- Execute the test using
APP_URLset to yourgolden_app_url - Capture a screenshot, storing it as the expected outcome
- Run the test again with
APP_URLset to yourtest_app_url - Finally, it will compare the new screenshot with the previously saved one
Metadata
Release files for machu-picchu 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| machu-picchu-0.1.0.tar.gz | 5.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| machu_picchu-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.9 kB
Release files / machu-picchu-0.1.0.tar.gz
| Download URL | machu-picchu-0.1.0.tar.gz |
|---|---|
| Size | 5.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bdeee360b1e37fe3cb10170736dc75fa3b71b2e3e2b92b5333195fa28b229c86
|
|
BLAKE2b-256 checksum How to use checksums |
127d60e08d61c39ff5eecb86e5cba040672d2e8827cfb3477b72f78609d73a29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.13
|
Release files / machu_picchu-0.1.0-py3-none-any.whl
| Download URL | machu_picchu-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ac0baaea3bbd0597ab6dc7ca48bc0dea039f492bae2c460dbfb238eac39f76cf
|
|
BLAKE2b-256 checksum How to use checksums |
c4e45b493812cc6f8dc0d8a2e885ee37d0a7d132e887304abbba4289a6caa8d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.13
|