๐Ÿงช Open Source ยท Playwright + pytest

Automate your web tests
with ease

Record interactions in the browser, Run tests across Chrome & Edge, Report results with screenshots. Zero boilerplate.

๐Ÿš€ Get Started View on GitHub
Python 3.11+ Playwright pytest Windows macOS Linux MIT License Open Source
1

Clone & Setup

One command installs everything

2

Record

Interact in browser โ†’ code generated

3

Run

Interactive menu, Chrome & Edge

4

Report

HTML report + screenshots on fail

5

Ship

Confident deploys, every time

Built to remove every friction point

Every feature exists to solve a real pain that QA engineers face daily.

๐ŸŽฌ

Record instead of write

Click record, interact with your browser โ€” Tesqo generates clean pytest code automatically. No Playwright API knowledge required.

๐Ÿ”

Secrets stay secret

All credentials live in .env. BASE_URL, USERNAME, PASSWORD never appear hardcoded in any test file.

โ–ถ๏ธ

Interactive runner menu

No memorising pytest flags. run.bat gives you a numbered menu โ€” pick smoke, regression, single file, or record new.

๐Ÿ“Š

Excel data-driven tests

Point at an Excel sheet โ€” every row becomes a named test case automatically. No code changes needed.

๐Ÿ“ธ

Screenshots on every failure

Failed tests auto-capture screenshots with timestamps. HTML reports are self-contained, shareable files.

๐ŸŒ

Chrome & Edge โ€” one command

Run on Chrome, Edge, or both in parallel. One flag change โ€” no test modifications needed.

๐Ÿ“‹

Table & pagination helper

Built-in TablePage iterates every row across all pages. No boilerplate pagination loops.

๐Ÿ’ป

Windows, macOS & Linux

setup.bat for Windows, setup.sh for macOS/Linux, and a Makefile with universal targets that work everywhere.

โšก

5-minute setup

Clone โ†’ setup.bat / setup.sh / make setup โ†’ done. Creates venv, installs deps, and installs browsers in one step.

From zero to running tests in 5 minutes

No pytest knowledge required to get started.

1

Clone the repo

Download Tesqo from GitHub

2

Run setup

Windows: setup.bat  |  macOS/Linux: bash setup.sh  |  Any: make setup

3

Edit .env

Set your BASE_URL, USERNAME, PASSWORD

4

Record your first test

record.bat / make record โ†’ interact in browser โ†’ code saved automatically

5

Run & see results

run.bat / make run โ†’ pick option โ†’ HTML report opens automatically

Windows (cmd / PowerShell)
:: 1. Clone
git clone https://github.com/shaik-shahansha/tesqo.git
cd tesqo

:: 2. One-time setup
setup.bat

:: 3. Set your app details
notepad .env

:: 4. Record a test
record.bat

:: 5. Run & report
run.bat
.env โ€” configuration
# Application
BASE_URL=https://myapp.com
USERNAME=admin
PASSWORD=secret123

# Browser (chromium | msedge)
BROWSER=chromium
HEADLESS=false

Record any interaction โ€” code is written for you

Answer 3 prompts, interact with your browser, close it. Tesqo handles the rest.

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘ Tesqo โ€” Smart Recorder            โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

  Test name (e.g. login_as_admin): login_admin
  URL to record on [https://myapp.com]:
  Category (smoke|regression|automation): smoke

  ๐ŸŽฌ Opening browser at: https://myapp.com
  โ†’ Interact with the page.
   Close browser when done.

  โœ… Test saved!
      File: tests/smoke/test_login_admin.py
      Marker: @pytest.mark.smoke

After recording, the generated test is automatically cleaned up:

  • โœ“ https://myapp.com โ†’ config.BASE_URL
  • โœ“ "admin" โ†’ config.USERNAME
  • โœ“ "secret123" โ†’ config.PASSWORD
  • โœ“ Adds import pytest and from config.settings import config
  • โœ“ Adds @pytest.mark.smoke to every test function
  • โœ“ Saves to tests/smoke/test_login_admin.py
  • โœ“ Prints exact command to run it immediately

Run tests โ€” no flags to memorise

Interactive menu (run.bat / make run) or direct CLI commands. Browser selection on every run.

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘ Tesqo โ€” Runner                     โ•‘
โ• โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ฃ
โ•‘ 1. Run ALL tests                  โ•‘
โ•‘ 2. Run SMOKE tests                โ•‘
โ•‘ 3. Run REGRESSION tests           โ•‘
โ•‘ 4. Run AUTOMATION scripts         โ•‘
โ•‘ 5. Run a SINGLE test file         โ•‘
โ•‘ 6. Run a SINGLE test function     โ•‘
โ•‘ 7. Record a NEW test             โ•‘
โ•‘ 8. Open last report              โ•‘
โ•‘ 0. Exit                          โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

Browser choice asked every run: Chrome ยท Edge ยท Both in parallel

bash โ€” CLI equivalents
# All tests
pytest tests/

# By marker
pytest tests/ -m smoke
pytest tests/ -m regression

# Single file / function
pytest tests/smoke/test_login.py -v
pytest tests/smoke/test_login.py::test_login_success -v

# Visible browser (debugging)
pytest tests/ --headed

# Edge browser
pytest tests/ --browser msedge

# Both browsers in parallel
pytest tests/ --browser chromium \
              --browser msedge -n auto

# Slow motion for demos
pytest tests/ --headed --slowmo 1000

Organise with markers

Tag every test โ€” run exactly what you need, when you need it.

Marker Purpose When to run
@pytest.mark.smoke Critical path โ€” login, core navigation Every deploy
@pytest.mark.regression Full feature coverage Before every release
@pytest.mark.automation State-changing scripts (bulk activate, update) On demand
@pytest.mark.slow Tests taking >30 seconds Nightly

Excel rows become test cases

No code changes โ€” add a row in Excel, get a new test case automatically.

usernamepasswordroleshould_pass
alicepass_aliceAdminTRUE
bobpass_bobUserTRUE
hackerwrongโ€”FALSE

Each row appears as a named test: [alice], [bob], [hacker]

python โ€” parametrized test
from data.data_loader import load_excel

rows = load_excel("data/test_data.xlsx", sheet="Login")

@pytest.mark.parametrize("row", rows,
    ids=[r["username"] for r in rows])
def test_login_from_excel(page, row):
    page.goto(config.BASE_URL + "/login")
    page.fill("#username", str(row["username"]))
    page.fill("#password", str(row["password"]))
    page.click("button[type='submit']")

    if str(row["should_pass"]).upper() == "TRUE":
        expect(page.locator(".dashboard")).to_be_visible()
    else:
        expect(page.locator(".error-alert")).to_be_visible()

Reusable page helpers built in

BasePage, LoginPage, and TablePage ship with Tesqo. Extend them for your app.

python โ€” login test with POM
from pages.login_page import LoginPage
from config.settings import config

def test_login(page):
    lp = LoginPage(page)
    lp.login(config.USERNAME, config.PASSWORD)
    lp.assert_login_success()
python โ€” paginated table test
from pages.table_page import TablePage

def test_all_users_active(page):
    tbl = TablePage(page,
        table_selector="table#users",
        path="/admin/users")
    tbl.open()
    for row in tbl.iter_all_pages():
        status = row.locator(".status").inner_text()
        assert status == "Active"
python โ€” extend BasePage for your own pages
from pages.base_page import BasePage

class DashboardPage(BasePage):
    def go(self):
        self.navigate("/dashboard")
    def get_welcome_text(self):
        return self.get_text(".welcome-header")

Everything in its place

A clean, predictable layout so you always know where to look.

tesqo/
โ”‚
โ”œโ”€โ”€ .env                   โ† ๐Ÿ” Your secrets (never commit this)
โ”œโ”€โ”€ .env.example           โ† Template โ€” safe to commit
โ”œโ”€โ”€ setup.bat              โ† One-time first-run setup (Windows)
โ”œโ”€โ”€ setup.sh               โ† One-time first-run setup (macOS/Linux)
โ”œโ”€โ”€ Makefile               โ† Universal commands for all platforms
โ”œโ”€โ”€ record.bat             โ† Smart recorder launcher (Windows)
โ”œโ”€โ”€ run.bat                โ† Interactive test runner menu (Windows)
โ”œโ”€โ”€ pytest.ini             โ† pytest config and markers
โ”œโ”€โ”€ requirements.txt       โ† All dependencies pinned
โ”‚
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ settings.py        โ† Loads .env, typed Config object
โ”‚
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ test_data.xlsx     โ† Excel: rows โ†’ test cases
โ”‚   โ””โ”€โ”€ data_loader.py     โ† Reads Excel โ†’ list of dicts
โ”‚
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ conftest.py         โ† Fixtures + auto-screenshot on fail
โ”‚   โ”œโ”€โ”€ smoke/              โ† @pytest.mark.smoke
โ”‚   โ”œโ”€โ”€ regression/         โ† @pytest.mark.regression
โ”‚   โ””โ”€โ”€ automation/         โ† @pytest.mark.automation
โ”‚
โ”œโ”€โ”€ pages/                 โ† Page Object Model helpers
โ”‚   โ”œโ”€โ”€ base_page.py
โ”‚   โ”œโ”€โ”€ login_page.py
โ”‚   โ””โ”€โ”€ table_page.py
โ”‚
โ”œโ”€โ”€ reports/
โ”‚   โ”œโ”€โ”€ html/               โ† HTML reports (auto-generated)
โ”‚   โ””โ”€โ”€ screenshots/        โ† Auto-captured on failure
โ”‚
โ””โ”€โ”€ scripts/
    โ”œโ”€โ”€ record.py           โ† Smart recorder logic
    โ””โ”€โ”€ run.py              โ† Interactive runner logic

Best-in-class open source libraries

No paid services, no lock-in. Everything is open source.

๐ŸŽญ

Playwright

Browser automation ยท v1.51+
๐Ÿงช

pytest

Test runner ยท v8.3+
๐Ÿ”—

pytest-playwright

Playwright fixtures ยท v0.7+
๐Ÿ“„

pytest-html

HTML reports ยท v4.1+
โšก

pytest-xdist

Parallel execution ยท v3.6+
๐Ÿ“Š

openpyxl

Excel data input ยท v3.1+
๐Ÿ”

python-dotenv

Environment secrets ยท v1.0+
๐Ÿ

Python

Language ยท 3.11+

Where Tesqo is headed

From a project template to a fully installable CLI package on PyPI.

v0.1 Current

Project template โ€” clone, setup.bat, record.bat, run.bat. Full POM, data-driven, multi-browser.

v1.0 Next

Installable CLI โ€” pip install tesqo. Commands: tesqo new, tesqo record, tesqo run, tesqo report.

v1.1 Planned

Multi-project workspace. tesqo switch myapp. Allure report integration. Watch mode.

v2.0 Future

AI-assisted test generation. Self-healing selectors. CI/CD templates for GitHub Actions.

bash โ€” future CLI (v1.0)
# Install once, use across all projects
pip install tesqo

# Scaffold a new project
tesqo new myapp

# Record a test
cd myapp
tesqo record

# Run
tesqo run smoke
tesqo run regression --browser edge

# Open last report
tesqo report

# Switch projects
tesqo switch client-portal

Help make Tesqo better

All contributions welcome โ€” new page helpers, CI templates, report themes, bug fixes, docs improvements.

๐Ÿด Fork the repo on GitHub
๐ŸŒฟ Create a feature branch: git checkout -b feature/my-improvement
โœ… Add tests for your changes
๐Ÿš€ Open a pull request โ€” we'll review it promptly
โ˜… Star on GitHub

Meet the creator

The person behind Tesqo.

Shahansha Shaik
Shahansha Shaik
AI Enthusiast

Passionate about making test automation accessible to everyone. Built Tesqo to give QA engineers a batteries-included framework โ€” record, run, and report without writing a single line of boilerplate.