Skills
The tools and practices I work with, grouped by where they sit in the testing lifecycle.
Featured Work
Three independent Python builds.
A pytest plugin that measures test reliability instead of hiding failures. Unlike retry plugins that immediately rerun failed tests to make builds pass, it preserves the original execution, reruns failures in isolated subprocesses, and classifies every test as PASS, BROKEN, or FLAKY.
- Deliberate rerun strategy — completes the full initial run first, then reruns only the failures in isolated pytest subprocesses, appending each attempt to a preserved execution history.
- Classification, not suppression — a failed test that later passes is FLAKY; one that never passes is BROKEN — so intermittent failures are surfaced explicitly rather than hidden by retries.
- CI-consumable output — a versioned JSON report with per-attempt history plus a console summary, designed to plug into pipelines; linted and type-checked (Ruff, mypy) with GitHub Actions CI.
A generic API test-automation framework built around a layered test pyramid and a staged CI strategy — smoke, nightly, and release pipelines with progressively stricter quality gates. A FastAPI service stands in as the system under test.
- Three-tier quality gates — a fast smoke pipeline on every push, a nightly pipeline running full regression, contract, k6 performance, and coverage, and a release pipeline that blocks tagging until every gate passes.
- Layered test pyramid — unit (mocked), integration (CRUD against a live API), contract (OpenAPI validation via Schemathesis), and end-to-end journeys, with pytest markers for selective, parallel-safe runs.
- Failure diagnostics — captures request method, URL, payload, and response on any failed test, surfaced through JUnit XML for CI and Allure for human investigation.
A payment-correctness testbed that reproduces one of the most common distributed-systems failures — the customer is charged, but the application never records the payment. Instead of asserting HTTP responses, every test verifies the PostgreSQL ledger, where financial truth actually lives.
- Deterministic fake gateway — a test double (not the system under test) that makes rare production failures repeatable: successful charges, idempotent charging, and intentionally lost confirmations (504), with inspection endpoints.
- Flagship dual-write scenario — the customer is charged, the API returns 504, and the order stays pending with no payment row; a reconciler then uses the durable idempotency key to query the gateway, writes the missing payment, and marks the order paid — with no second charge.
- Ledger-truth assertions — integration tests verify order state, payment rows, and charge count in PostgreSQL rather than trusting the API, covering idempotency and concurrent duplicate requests.
Projects
Selected client and product work across my career — at Pepper Square and Sharp.
A React Native app (iOS and Android) with a Node.js/NestJS API and a web CMS, for a US-based outdoor-fitness organization — workouts, progress tracking, nearby-location discovery, and an in-app checkout flow.
Expanded and maintained an existing Appium (Java) automation framework, adding automated coverage for onboarding, authentication, workouts, challenges, geolocation, and HealthKit / Google Fit sync across Android and iOS. Developed and maintained REST API tests (REST Assured) covering authentication, schema validation, and negative scenarios, contributed reusable test utilities, and supported the team's Jenkins CI pipeline — helping reduce full regression from around two days to under four hours.
An online-ordering and account web app for a US national restaurant brand.
Contributed UI test automation (Selenium, Java) across critical ordering flows — location search, menu, cart, and checkout — with mobile-web validation across iOS and Android viewports, feeding the team's Jenkins smoke and regression runs.
A WCAG 2.1 A/AA accessibility audit of a global pharmaceutical company's corporate website — roughly 20 page templates across home, content, and contact flows.
Ran screen-reader and keyboard testing (NVDA, JAWS, VoiceOver) alongside automated scans (axe-core, Lighthouse), executing ~30 manual test cases mapped to WCAG success criteria across browsers. Logged ~60 accessibility issues with severity, WCAG references, and reproduction steps, validated fixes with developers, and proposed integrating automated a11y checks into CI.
Sharp's cloud business-IoT portal for managing multifunction printers and office devices, used by enterprise IT administrators — device registration, configuration, dashboards, and reporting.
Performed functional and exploratory testing across the admin portal — authentication, role-based access, device management, reporting — and expanded and maintained an existing Selenium (Java) automation suite, adding regression coverage for business-critical workflows and contributing reusable test utilities within the team's framework, helping improve regression efficiency as part of a collaborative QA team.
Sharp's Windows document-management desktop application and its companion iOS/Android apps — scanning, printing, document workflows, and printer connectivity.
Executed manual functional and regression testing across the desktop and mobile apps — document management, printer connectivity, synchronization, and end-user workflows — and contributed Selenium automation for stable workflows under senior-QA guidance while learning structured defect investigation. Logged and retested defects in Jira.