Open to new roles
Özgür Çetintaş
Senior QA engineer who builds things. Eight years of making software trustworthy, from payment flows to video engines to AI features, and a few apps of my own on the App Store.
- 8 years in testing
- ~1,000 automated tests
- 1–2 days → 3–4 hours regression
- 20+ apps in the portfolio
Work
At work
-
AI-driven end-to-end tester
At workAn LLM agent drives a real headless browser through payment funnels like a customer: answers quizzes, registers, pays with a declined card and then a successful one. Afterwards it checks what actually happened: the confirmation email, the purchase in the back end and the analytics events.
- Playwright
- LLM agents
- function calling
- MCP
- Cloudflare Workers
How it works
- Problem
- Our internal funnel builder ships many onboarding, quiz and paywall funnels, each ending in a real registration and payment. Checking them by hand before and after every release did not scale, and nobody had asked for automation. I built it on my own initiative.
- What I built
- A Playwright headless browser driven by an LLM agent (function calling) that reads the accessibility tree and acts like a customer: answers the quiz, registers, pays with a declined card and then a successful one in payment-provider sandboxes. Then it checks real outcomes, not the UI: the confirmation email, the purchase granted in the back end and the analytics events. It runs from the editor, on a schedule for regression, or from an AI assistant through MCP tools, with A/B variants, locales and viewports. Each run leaves step logs, screenshots, a session replay and a Slack alert on failure.
- What it caught
- Reviewing the tester’s own code, I found retry logic that could charge a payment twice (I fixed it) and a race condition in the cancel flow (a developer fixed it).
-
Video engine regression suite
At workWith one colleague I built a Robot Framework suite that compares every rendered frame of a C/C++ video rendering engine with a golden reference and checks timing such as dropped frames. If a single pixel in the worst frame differs, the release is blocked.
- Python
- Robot Framework
- Jenkins
- C/C++
How it works
- Problem
- Our core product was a cross-platform video rendering engine with a C/C++ core. Regressions were checked by a manually triggered process, and visual or timing bugs could reach a release.
- What I built
- In 2021, with one colleague, a Robot Framework suite with our own Python keyword libraries, running in a Jenkins pipeline I set up, still in use. It compares every rendered frame with a golden reference (PSNR on the worst frame, plus bit-exact MD5 checks per frame), and analyses timing from frame timestamps: jitter, dropped and duplicated frames. A fault injector generates streams with known defects to prove the checks actually detect them. Suites are tagged by requirement and run in parallel.
- What it changed
- Any result below the threshold blocked the release. It caught real failures caused by non-deterministic effects; each was root-caused with the engine team before the reference was updated. One flaky check taught me to verify the measurement first: the test sometimes captured a frame before rendering finished, so I made it wait for a reliable completion signal.
-
Build and deployment platform
At workThe company's internal build and deployment platform: it replaced Bitrise for 10 mobile apps and cut build times from 40 to 13 minutes.
- Java
- Jenkins
- Docker
- Node.js
- React
- MongoDB
How it works
- Problem
- Testers and stakeholders needed the right app build quickly, with clear versions, across many apps.
- What I built
- A platform on Java, Jenkins and Docker with a Node.js/Express/React/MongoDB front end that builds, distributes and tracks iOS and Android builds, with queued runs and automatic retries. Incremental builds and reusable submodule artifacts cut build times from 40 to 13 minutes.
- What it changed
- It replaced Bitrise for 10 apps, avoiding an estimated $24K a year in external tooling costs.
-
Testing AI image generation
At workRegression tests for the prompts behind AI image features, so user requirements are not lost on the way to the model.
- Promptfoo
- LLM evaluation
- regression testing
How it works
- Problem
- In our image-generation features, a user’s requirement, for example a specific colour or “no text or logo”, could get lost while the app built the prompt for the model.
- What I built
- Promptfoo test scenarios that check the generated prompt against the user’s requirements, and re-run the same inputs after every template change to compare old and new versions. The images themselves are reviewed manually.
- What it changed
- I made mandatory requirements explicit in the template and added each failure to regression. Store reviews complaining about irrelevant images went down.
-
Mobile, web and API automation framework
At workAs Pixery’s first dedicated QA hire (2019 – 2022), I built its test automation framework from scratch: one Java codebase for mobile (Appium), web (Selenium) and API (REST Assured) tests, written as Cucumber scenarios and run with TestNG and Maven. I also set up the Jenkins CI/CD pipeline that runs it. It became the base of the regression suite that later grew to ~1,000 automated tests.
- Java
- Appium
- Selenium
- REST Assured
- Cucumber
- TestNG
- Maven
- Jenkins
-
3-D Secure 2.0 payment authentication
At workAt Finartz (2018 – 2019), with one colleague, I built the test automation framework for a 3-D Secure 2.0 Access Control Server and wrote 10,000+ data-driven Cucumber scenarios against the EMVCo, Mastercard and Visa specifications, plus API and performance tests. The server passed certification.
- Java
- Selenium
- REST Assured
- Cucumber
- TestNG
- Maven
- JMeter
Career
Experience
- 2022 – now
- Senior Test Automation Engineer, Pixery Netherlands / Istanbul
Release quality for 20+ iOS, Android and web apps; ~1,000 automated tests; regression cut from 1–2 days to 3–4 hours.
- 2019 – 2022
- Test Automation Engineer, Pixery Istanbul
First dedicated QA hire; built the quality function and its automation framework from scratch.
- 2018 – 2019
- Software Test Automation Engineer, Finartz Istanbul
Test automation for a 3-D Secure 2.0 ACS that passed certification.
- 2017 – 2018
- Software Developer, computer vision, Udentify Istanbul
C++ and Python with OpenCV on embedded camera systems for in-store analytics.
- 2013 – 2018
- B.Sc. Computer Engineering, Kadir Has University
Projects
Built on my own
-
TestLease
Open sourceOpen-source tool that stops parallel test runs from colliding on shared test accounts, with expiring leases, crash recovery and an MCP server for AI agents. Built for a real problem I hit at work.
- open source
- REST API
- Playwright
- MCP
-
Trident
On Maven CentralA modular Java 21 web and API automation framework, consumed as a dependency rather than forked.
Java teams often copy test plumbing from one project to the next until the copies drift apart. Trident provides a single Cucumber runner with a REST Assured API layer and a web layer, with mobile support on the roadmap. Teams generate a project from the archetype, add the modules they need and write feature files. It is developed against a legacy JSP banking application without test hooks, and a separate showcase project adopts it from Maven Central against an unrelated application. An open-source rebuild of the kind of Java framework I built at Pixery and co-built at Finartz.
8 modules on Maven Central at v1.1.0 · 13 scenarios across 3 suites · 8s from archetype:generate to a green suite · 18 ADRs
- Java 21
- REST Assured
- Cucumber
- JUnit 5
- Maven
- GitHub Actions
-
Kafka Ledger Lab
Learning labTesting Kafka event-streaming guarantees for a payments → ledger flow against a real broker.
A Java and Spring Kafka service tested against real Kafka, PostgreSQL and Schema Registry through Testcontainers. The tests cover ordering, idempotency, dead-lettering, replay, consumer rebalances, a SIGKILL inside the at-least-once loss window, and database and broker outages. Most guarantees were first shown failing, or checked by breaking the code on purpose. A personal learning lab, not production experience.
45 tests · 900 executions over 20 consecutive runs, 0 failures · 2 ADRs
- Java
- Spring Kafka
- Testcontainers
- PostgreSQL
-
Shipped apps
App StoreOutguess and CipherBreaker are React Native / Expo apps I built and published on the App Store.
- React Native
- Expo
- TypeScript
More on GitHub: Modern Quality Engineering Lab, TestPlan Studio
About
About me
I started as a developer. In my last year at university I wrote C++ and Python for live human detection on embedded Linux cameras, in a four-person startup. Then I moved into testing, and found that I enjoy breaking systems as much as building them.
At Finartz I co-wrote more than 10,000 data-driven scenarios for a 3-D Secure 2.0 payment authentication server against the EMVCo, Mastercard and Visa specifications; the server passed certification. In 2019 I joined Pixery as the first dedicated QA engineer and built the test process from zero. Since then I have built about 1,000 automated tests across mobile, web, API and back end, set up the CI quality gates that guard every release, and cut regression from one or two days to three or four hours. From 2022 to 2025 I led a team of up to four QA engineers.
I work daily with Claude Code, and I evaluate AI features with Promptfoo. I moved to the Netherlands in 2025 and live near Rotterdam.
Contact
Let's talk
I'm open to senior QA / test automation roles, and to AI and product engineering roles where quality matters. Based near Rotterdam.
Email me- linkedin.com/in/ozgurcetintas
- GitHub
- github.com/cozgur