This blog started when I was trying to find a place to put my research notes as I was attempting to switch over from being a manual tester to an automated tester. Since then, this blog has been the place I practice what I am learning on the job in order to deepen my knowledge. It's where I try out new concepts before presenting ideas back to the team. It's where I collaborate with the software testing community.
Visit the Articles and Programming Projects for more content, and Feedback to see what people have said about T.J. and his blog.
Software Quality Assurance
I have been working as a Software Quality Assurance Engineer for a while. Learn more about Waterfall and Agile methodologies, and how software testing has changed over the years.
- What is a QA Engineer? (1/24/2015)
- Waterfall & QA (1/26/2015)
- Before Waterfall (1/26/2015)
- Agile Software Development (1/30/2015)
- How Google Tests Software — thoughts on the book (1/31/2015)
- Shifts in Software Testing (2/1/2015)
- How to Switch Careers in the Software Industry (4/20/2015)
- Should You Have a Dedicated Automation Team in Your QA Team? (9/9/2015)
- Are QA Engineers Becoming Extinct? (9/28/2015)
- How Automation Recaptures the Magic of Testing (5/14/2025)
- When Building Out Automation Frameworks, Keep the Stakeholders in Mind (5/15/2025)
- AI Wants to Take Over QA? Let It! (1/23/2026)
Security Testing
I spent time as a junior security tester early in my career and have found the field fascinating ever since.
- Security Testing with Kali Linux: Installation (4/22/2015)
- Beginners Kali Linux: Setup with RailsGoat (4/23/2015)
- Introduction to OWASP: A Security Testing Resource (4/30/2015)
- OWASP Boston Meetup: Crowdsource Your Bugs (5/7/2015)
Automation Frameworks: Selenium + Java
I worked at Fitbit-Boston (2015–2016) as an automation developer, initially with Selenium + Java. These posts document building an automation framework from scratch: element selectors, page objects, API testing, and infrastructure.
- Setting up a development environment with IntelliJ / Maven and Eclipse / Gradle
- Taking a deeper dive into Gradle, exploring Groovy
- Using TestNG and JUnit 4 assertions; introducing Hamcrest
- Abstracting the page using the Page Object model
- Using CSS Selectors to find and manipulate web elements
- Organizing locators: first in enums, then in By statements
- Wrapping Selenium calls in a CommonUtils library
- Replacing CommonUtils with Page Factory
- Performing API testing with Apache's HTTP Components
- Passing data using POJOs and builder patterns
- Examples of good logging for automated tests
- Playing with Protractor, JavaScript, and Jasmine — an AngularJS testing tool
Infrastructure: Docker, Vagrant, and Selenium Grid
Experiments with virtual dev environments, Docker, and cloud-based Selenium Grid, spanning my time at Fitbit (2016) and Threat Stack (2018).
- Setting Up a Virtual Dev Environment with VirtualBox, Vagrant, and Docker (5/2016)
- Installing Docker with the Docker Toolbox (7/2016)
- Setting Up Selenium Grid (for Beginners) (7/2016)
- Setting Up Selenium Grid in a Docker Container (7/2016)
- Starting a Selenium Grid Using AWS + SeleniumHQ Docker Images + Docker Compose (3/2018)
- Setting Up Ubuntu Linux with Docker (4/2018)
- Basic Chef + Test Kitchen: Setting Up Ubuntu with Vagrant + VirtualBox (6/2018)
AWS Cloud Security Testing (Threat Stack)
Starting in 2018, I wrote automated tests for a cloud security firm, Threat Stack, a provider of cloud security observability and compliance solutions. These posts cover their security domain and public educational content.
- The AWS Alphabet Soup (1/24/2018)
- An Introduction to Good Security Practices, with Sam Bisbee, Chief Security Officer of Threat Stack (1/28/2018)
API Testing (2016 - 2017)
REST API testing using Postman, Newman, REST Assured, and Apache HTTP Components.
- RESTful Testing with Stripe: A Brief Introduction (2/2016)
- Introduction to API Testing with Postman and Newman (7/2016)
- Are You Sure the Bus Line is Still Listed? REST Assured API Testing (2/2017)
Learning Serenity BDD (2017)
Exploring Specification by Example (SBE) and behavior-driven development automation frameworks.
Build a Basic Appium Framework (2017)
A seven-part series building a mobile automation framework using Appium + Java, testing Android apps on emulators. GitHub: basic_appium_framework.
- Part One: Review How to Inspect Mobile Apps with Appium Desktop (5/2017)
- Part Two: Design a Basic Test, Examining Mobile Elements with Appium Desktop (5/2017)
- Part Three: Install and Launch an App Using Desired Capabilities (5/2017)
- Part Four: Set up the Page Objects, Page Factories and Tests (5/2017)
- Part Five: Download the tests and run them on your own MacBook! (5/2017)
- Part Six: How to create and launch an Android emulator from Android Studio (5/2017)
- Part Seven: What happens behind the scenes as Appium installs and launches an Android app? (6/2017)
Ruby + Capybara + Gauge (2018 - 2019)
I created the Introduction to Capybara course for Test Automation University (2019). These posts document the framework setup and BDD integration.
- Intro to setting up a BDD framework with VS Code + Gauge + Ruby (6/2018)
- Basic Capybara + Gauge: Analyzing The-Internet (12/2018)
Ruby + Watir: The Cheezy Internet (2021)
A series based on Jeff "Cheezy" Morgan's Watir framework, testing against Dave Haefner's The-Internet site.
Playwright + TypeScript (2025 - 2026)
Exploring Microsoft Playwright for web automation, including AI-assisted test generation tools released in October 2025.
- Time to Practice Playwright! (5/2025)
- New Playwright Course: Playwright Essential Training by Butch Mayhew (6/2025)
- Hands on Automated Testing with Playwright is the start of a wonderful conversation with the Playwright community! (1/2026)
- Investigating AI: Playwright-Test-Planner and Playwright-Test-Generator (2/2026)
- GitHub Copilot Over-Engineered My Playwright Framework Then Blogged About It! (3/2026)
AI-Assisted Test Development (2025 - 2026)
Head-to-head evaluations of GitHub Copilot, Cursor, and Claude as coding assistants for building test automation frameworks.
- Beware the Hallucinations When Coding with AI (12/2025)
- My LinkedIn Year in Review - AI Style: Coauthor.Studio vs Claude.ai (1/2026)
- AI wants to take over QA? Let it! (1/2026)
- New project: Creating an automated test framework in Playwright + C# using GitHub Copilot (2/2026)
- New Project: Cursor creates a Playwright + C# test framework (2/2026)
- AI: Good as a Research Assistant. Bad for Creating GitHub Action Workflows (2/2026)
- Claude Sonnet 4 Talks About Designing a Cypress Framework for a Login Screen (3/2026)
Detox + React Native Mobile Automation (2025 - 2026)
I built a complete mobile automation framework at SELF ID using Wix's Detox + TypeScript, then created an open-source demo project for his AutomationGuild 2026 talk. All source code is at github.com/tjmaher/detox-demo.
- Two months at SELF already? Happy Anniversary! (9/2025)
- DetoxDemo, my first vibe-coded React Native app, is now complete (12/2025)
- First Time Using GitHub CoPilot to Create a ReactNative LoginPage App. What Could Go Wrong? (1/2026)
- New Features of Detox Demo: CI/CD + Logging + Reports, oh my! (1/2026)
- DetoxDemo: Now with more GitHub Action Workflow CI/CD Options! (1/2026)
- The Facebook Ecosystem: React, React Native, Metro, and Yarn (2/2026)
- Creating a GitHub Actions Workflow for Android Detox Testing with GitHub CoPilot? What Could Go Wrong? (2/2026)
- New Features of Detox Demo: Security Scanning + Android Support + Cross-Platform Builds! (2/2026)
- Getting Slides ready for my Detox + TypeScript talk for TestGuild! (3/2026)
- Save the Date: AutomationGuild talk - Building a React Mobile automated test framework using Detox + TypeScript - April 6, 2026 (3/2026)
1 comment:
Python is a high-level, interpreted programming language known for its simplicity, readability, and versatility.
Key Features –
Easy to Learn & Use – Simple syntax similar to English.
Dynamically Typed – No need to declare variable types explicitly.
Interpreted Language – Runs code line by line.
Multi-Paradigm – Supports object-oriented, procedural, and functional programming.
Cross-Platform – Runs on Windows, macOS, Linux, etc.
Core Concepts –
Variables & Data Types – int, float, str, list, dict, etc.
Functions & Modules – def keyword for functions, import for modules.
Object-Oriented Programming (OOP) – Classes, objects, inheritance, and polymorphism.
Exception Handling – try-except blocks for error handling.
File Handling – Read and write files using open().
Python Libraries & Frameworks –
Web Development – Django, Flask, FastAPI
Data Science & Machine Learning – NumPy, Pandas, TensorFlow, Scikit-learn
Automation & Scripting – Selenium, BeautifulSoup, PyAutoGUI
Game Development – Pygame
Cybersecurity – Scapy, PyCryptodome
Python Versions –
Python 2 (deprecated)
Python 3 (actively developed and recommended)
Advantages –
Readable & Beginner-Friendly – Great for new programmers.
Extensive Libraries – Reduces development time.
Large Community Support – Many resources and tutorials available.
Scalability – Used in small scripts to large applications.
Challenges –
Slower Execution – Due to being an interpreted language.
High Memory Usage – Not ideal for memory-intensive applications.
Not Ideal for Mobile Apps – Limited mobile development support.
Applications of Python –
Web development
Data analysis and machine learning
Automation and scripting
Game development
Cybersecurity and ethical hacking
Post a Comment