what this history actually is
A test automation framework is an application.
It has an architecture, a concurrency model, a deployment target, and a
pipeline that runs it. It talks to real systems over real networks, on
hardware you do not control, in parallel, and it has to be right. When it is
wrong, people stop trusting it, and a suite nobody trusts gets skipped and
then deleted. Writing one is easy. Writing one a team still runs two
years later is the job.
That is what the nine years below are. Seven companies, five languages, four
browser and device stacks. Frameworks built from scratch four times, one
migration led, two engineers mentored.
the short version
All of it, at a glance.
the long version
Every role, in full.
jun 2024 — now
2 yr 2 mo
A US insurance company
qa engineer · mooresville, us · remote from montevideo
Two automation frameworks in JavaScript, one on Cypress and one on
Playwright, covering web, mobile and API. I also led the move off the
team's Ruby and Capybara suite onto them, and wired both into CI/CD so
they run as part of the build rather than as something someone remembers
to kick off.
the hard part
A framework migration never gets a quiet quarter. The Ruby suite has to
keep passing while the JavaScript one grows underneath it, and at the end
the team has to prefer the new one, which is a different problem from the
new one being better. Two frameworks instead of one is also a choice you
have to keep earning: Cypress and Playwright are good at different things,
and the cost of that decision is paid in maintenance every week.
- javascript
- cypress
- playwright
- ci/cd
- web
- mobile
- api
jan — jun 2024
6 mo
OrangeLoops
qa lead · montevideo, uruguay
A mobile automation framework in Java on TestNG and Appium. It ran the
same suite four ways: Android emulators, iOS simulators, real handsets on
a desk, and BrowserStack device farms. It pulled the device console log
into the test output, so a red test arrived with the evidence attached. I
also led two junior QA engineers and reviewed their work.
the hard part
Mobile is four environments wearing one costume. An emulator, a physical
phone and a farm device fail in different ways at different speeds, and a
suite that is only green on one of them is not a suite. Getting the console
log into the report is the difference between "the checkout test failed"
and "the checkout test failed because the token refresh 401'd", and only
one of those gets fixed the same day.
- java
- testng
- appium
- android
- ios
- browserstack
- emulators and real devices
feb 2022 — aug 2023
1 yr 7 mo
DataArt
test automation engineer · montevideo, uruguay
A Selenium suite in Java on TestNG, structured with Page Object and Page
Factory, with the WebDriver instance held in a ThreadLocal so the whole
thing runs in parallel. Separately, I automated asset validation in Python
for work that had been a manual check.
the hard part
Parallelism is where a test suite goes flaky, and shared driver state is
usually why. Giving each thread its own driver through ThreadLocal fixes
the mechanism, but the discipline is keeping every fixture, every wait and
every piece of test data thread-safe afterwards, forever, including in code
written by people who were not in the room when you chose the pattern. A
flaky suite trains a team to ignore red, and once that happens the suite has
negative value.
- java
- selenium webdriver
- testng
- threadlocal
- page object and page factory
- maven
- git
- python
- jira
mar 2021 — jan 2022
11 mo
Altimetrik
specialist qa automation · montevideo, uruguay
A UI automation framework from an empty repository, in JavaScript and
TypeScript on Selenium WebDriver, with Cucumber-js and Jest, running
against a Salesforce API. I owned the delivery too: deployment to Azure
Blob storage and the Azure DevOps pipeline that ran it.
the hard part
From scratch means every decision is yours, and the ones you skip become
the thing the team works around for the next two years. Where a test finds
its data. What a failure prints. Who is allowed to run the suite and against
which environment. Where the report lands so that somebody reads it. There
was no platform team to hand the pipeline to either, so the framework and
the infrastructure it ran on were one piece of work.
- selenium webdriver
- javascript
- typescript
- cucumber-js
- jest
- testng
- maven
- azure devops
- azure blob storage
- salesforce api
apr 2019 — mar 2021
2 yr
Globant
test automation engineer · montevideo, uruguay
I designed and then maintained the team's automation framework for two
years: TypeScript on Protractor and Jasmine, with Cucumber for the BDD
layer, plus API coverage using Postman and Chai against an Express
service, all running on Jenkins. I reviewed other engineers' code and was
the person the dev team came to about automation.
the hard part
Two years on one framework is mostly maintenance, and maintenance is
harder than the build. The application changes underneath you, the team
turns over, and the suite either absorbs that or rots. Being the reference
point is the other half: the framework is only as good as the worst test
anyone is allowed to merge into it, which makes code review part of the
architecture rather than a chore next to it.
- typescript
- protractor
- jasmine
- cucumber
- bdd
- postman
- chai
- express
- npm
- jenkins
- bitbucket
jan — mar 2019
3 mo
Oktana
qe automation · montevideo, uruguay
A short engagement writing Selenium coverage in Java on TestNG,
structured with Page Object.
- java
- selenium webdriver
- testng
- page object
oct 2017 — dec 2018
1 yr 3 mo
Abstracta
qe automation · montevideo, uruguay
My first job out of university. Selenium coverage in Java on TestNG with
Page Object, working against MySQL for data setup and verification, on a
team that worked test-first.
the hard part
Learning that the test is not the interesting part. Keeping the page
structure out of the test is what lets the test survive a redesign, and
writing the test before the code is what stops you from writing a test that
only asserts what the code already does. I have used both since,
everywhere.
- java
- selenium webdriver
- testng
- page object
- mysql
- tdd
education
BSc Computer Science.
- 2013 — 2017
- BSc, Computer Science · Universidad ORT Uruguay, Montevideo
- 2010 — 2011
- Associate degree, Computer Science · Universidad ORT Uruguay · final score 92/100
stack
What I build with.
- languages
- java · javascript · typescript · python · sql
- web automation
- playwright · cypress · selenium webdriver · protractor
- mobile
- appium · android and ios emulators · real devices · browserstack
- api and data
- postman · chai · express · mysql
- runners and bdd
- testng · jest · jasmine · cucumber · cucumber-js
- ci/cd and build
- github actions · jenkins · azure devops · azure blob storage · maven · npm · git · bitbucket
- practice
- framework architecture · page object and page factory · threadlocal · parallel execution · design patterns · exploratory testing · code review · mentoring
- spoken
- english · spanish
Working together
I contract with US clients through a Wyoming LLC and work from Montevideo on
UTC-3, which overlaps most of a US Eastern or Central working day.
Mateo Briosso is a software engineer in Montevideo, Uruguay, working remotely
and contracting with US clients through a Wyoming LLC. Since 2017 he has built
test automation frameworks as production software across seven companies: a US
insurance company (Cypress and Playwright in JavaScript, plus a Ruby and
Capybara migration), OrangeLoops (Java, TestNG and Appium on emulators, real
devices and BrowserStack, as QA Lead), DataArt (Selenium and Java with
ThreadLocal parallel execution), Altimetrik (a UI framework built from scratch
with Azure DevOps and Azure Blob deployment), Globant (Protractor, Jasmine,
Cucumber and Jenkins, plus code review for peer engineers), Oktana, and
Abstracta. He holds a BSc in Computer Science from Universidad ORT Uruguay
(2013–2017).