
🧪 So You’ve Started Writing Tests…
Welcome to the world of Pytest command-line arguments — You’ve just written a handful of tests in Pytest. You run them with pytest
… and boom 💥 — a wall of output hits your screen. Some dots, some letters, maybe a failure or two, but you’re left wondering…
“Uhh… What just happened?!” 😅
If that sounds familiar, you’re not alone. Pytest is powerful, but its true magic unlocks when you start using it smartly — with command-line flags like -v
, -rA
, and -k
.
Today, I’ll break down exactly what these flags mean, when to use them, and how to combine them to supercharge your test runs like a pro 🧪💪
🔍 Why Use Pytest CLI Arguments?
Running tests with just pytest
is okay for quick checks. But when your test suite grows, you’ll want to:
✅ Filter specific tests
✅ Get detailed reports
✅ Stop tests after a failure
✅ Categorize and run test groups
✅ Clean up noisy output
Let’s level up! 💪
🛠️ Pytest Arguments: Quick Reference Table
Argument | Description | Example | Use Case |
---|---|---|---|
-v | Verbose output | pytest -v | See full test names and statuses |
-q | Quiet mode | pytest -q | Minimal output (just dots or short letters) |
-rA | Show full report | pytest -rA | Include skipped, xpassed, failed, etc. |
-rf | Report only failed tests | pytest -rf | Quickly focus on failed cases |
-rs | Report skipped tests | pytest -rs | Find which tests were skipped |
-k "name" | Run tests that match string | pytest -k "login" | Filter by test name pattern |
-k "not api" | Exclude matching tests | pytest -k "not api" | Skip certain tests |
-m "tag" | Run tests with a marker | pytest -m "smoke" | Run only smoke tests, for example |
--maxfail=2 | Stop after 2 failures | pytest --maxfail=2 | Useful for quick debugging |
--tb=short | Short traceback | pytest --tb=short | Less clutter in error logs |
--disable-warnings | Hide warnings | pytest --disable-warnings | Clean terminal output |
--capture=no | Show print statements | pytest --capture=no | Debug using print() inside tests |
🧪 Sample Use Cases (Real Examples)
Let’s say your file is called test_login.py
and it contains:
import pytest
@pytest.mark.smoke
def test_valid_login():
assert "Dashboard" in "Dashboard Page"
@pytest.mark.regression
def test_invalid_login():
assert "Error" in "Login Error Message"
Here’s how you could use CLI options effectively:
Scenario | Command | Why It Helps |
---|---|---|
Run all tests with names that include “login” | pytest -v -k "login" | Target specific functionality |
Run only smoke tests | pytest -v -m "smoke" | Great for fast validation |
Run all tests but stop after 1 failure | pytest --maxfail=1 -v | Save time in large test suites |
Run all tests and hide warnings | pytest -v --disable-warnings | Clean up noisy output |
Run tests and print debug output | pytest --capture=no | See print() statements in terminal |
Show only failed and skipped test summary | pytest -v -rs -rf | Focus on what’s broken or skipped |
💡 Pro Tips for Pytest CLI
✅ Combine flags like -v -rA -k "add"
for maximum insight
✅ Use -m
with markers to categorize and run logical groups of tests
✅ Try --maxfail
when you want quick feedback without running the full suite
✅ Use --tb=short
to make tracebacks more readable
✅ Add to pytest.ini
for default behaviors across the team
⚠️ Common Pitfalls to Avoid
🚫 Running all tests every time — it’s slow and wasteful
🚫 Ignoring skipped tests — they might contain hidden bugs
🚫 Not using markers — makes filtering test types harder later
🚫 Hardcoding too many custom flags in CI — keep it DRY with config files
🎓 Expert Takeaway
Command-line options are more than convenience — they’re critical for productivity and test strategy. Whether you’re debugging locally, running tests in CI/CD pipelines, or managing a growing test suite, mastering Pytest CLI arguments is a game-changer 🧪💻
Subscribe to QABash Weekly 💥
Dominate – Stay Ahead of 99% Testers!