how to make a Python Test Driven Development environment automatically
preview
Here is the program I have by the end of the chapter to automatically make a python test driven development environment, it is only 27 lines of code, with spaces
1#!/bin/bash
2mkdir more_magic
3cd more_magic
4mkdir src
5touch src/more_magic.py
6mkdir tests
7touch tests/__init__.py
8
9echo "import unittest
10
11
12class TestMoreMagic(unittest.TestCase):
13
14 def test_failure(self):
15 self.assertFalse(True)
16
17
18# Exceptions seen
19# AssertionError
20" > tests/test_more_magic.py
21
22echo "pytest" > requirements.txt
23echo "pytest-watcher" >> requirements.txt
24uv init
25rm main.py
26uv add --requirement requirements.txt
27uv run pytest-watcher . --now
questions about making a Python Test Driven Development Environment automatically
Here are questions you can answer after going through this chapter
how to make a shell script
I go to the terminal and use touch to make an empty file with a name that is easy to remember later. I want the name to also describe the program that will automatically make a Test Driven Development environment for me
touch makePythonTdd.shthe terminal goes back to the command line
I name this project
magic_againI open
makePythonTdd.shin the editor of the Integrated Development Environment (IDE)Tip
I can use the terminal to open a file in the Integrated Development Environment (IDE) by typing the name of the program and the name of the file. That means when I type this in the terminal
code makePythonTdd.shVisual Studio Code opens
makePythonTdd.shin the editorI add the commands I use to make a Python Test Driven Development environment for a project in
makePythonTdd.sh1#!/bin/bash 2mkdir magic_again 3cd magic_again 4mkdir src 5touch src/magic_again.py 6mkdir tests 7touch tests/__init__.py 8touch tests/test_magic_again.py 9echo "pytest" > requirements.txt 10echo "pytest-watcher" >> requirements.txt 11uv init 12rm main.py 13uv add --requirement requirements.txt 14uv run pytest-watcher . --now#!/bin/bashis called a shebang line, it tells the computer to use bash to run this programtest_magic_again.pyis empty because I made it with touch. I want the file to have the text for the first failing test so I do not have to open the editor to add the text for it in each project.I use echo in place of touch to make the
makePythonTdd.shprogram add the text totest_magic_again.pywhen it makes the file in thetestsfolder, the same way I use echo to add text to therequirements.txtfile1#!/bin/bash 2mkdir magic_again 3cd magic_again 4mkdir src 5touch src/magic_again.py 6mkdir tests 7touch tests/__init__.py 8echo "" > tests/test_magic_again.py 9echo "pytest" > requirements.txt 10echo "pytest-watcher" >> requirements.txt 11uv init 12rm main.py 13uv add --requirement requirements.txt 14uv run pytest-watcher . --nowI add the text for the the first failing test inside the quotes (“”) I just added to
makePythonTdd.sh, the way I do with echo when I add"pytest"as text inrequirements.txtAttention
Indentation is important in Python, I use 4 spaces as convention in this book, see the Python Style Guide for more
1#!/bin/bash 2mkdir magic_again 3cd magic_again 4mkdir src 5touch src/magic_again.py 6mkdir tests 7touch tests/__init__.py 8 9echo "import unittest 10 11 12class TestMagicAgain(unittest.TestCase): 13 14 def test_failure(self): 15 self.assertFalse(True) 16 17 18# Exceptions seen 19# AssertionError 20" > tests/test_magic_again.py 21 22echo "pytest" > requirements.txt 23echo "pytest-watcher" >> requirements.txt 24uv init 25rm main.py 26uv add --requirement requirements.txt 27uv run pytest-watcher . --now
how to run a shell script
I go back to the terminal to run the program
makePythonTdd.sh
the terminal shows
command not found: makePythonTdd.sh
I have to tell the computer where the file is
./makePythonTdd.sh
./ is shorthand for this directory which in this case is pumping_python where makePythonTdd.sh is saved. The computer checks a few directories when a command is given. Those directories are where commands like mkdir, cd, tree and echo are saved. The terminal shows
permission denied: ./makePythonTdd.sh
I have to make the file executable for the computer to be be able to run the program.
how to view the permissions of a file
I use ls to check the permissions of the file
ls -l makePythonTdd.sh
-l is the option to show the long listing format which includes permissions for the file
the terminal shows
-rw-r--r-- 1 abcdef ghijk XX Month Y ZA:BC makePythonTdd.sh
Note
the first 10 characters above (-rw-r--r--) are grouped
- rw- r-- r--
the groups that have 3 characters show read, write and execute permissions with
rfor canreadwfor canwriteto, andxfor canexecute-for CANNOT
here is what it means for makePythonTdd.sh
the first group with just 1 character tells if this is a file or directory :
-means this is a file, it is NOT a directorythe second group has 3 characters, and is for the owner of the file:
rw-means the owner of the file can read (r), write to (w), and CANNOT (-) execute the filethe next group also has 3 characters, and is for the group of the owner of the file:
r--means the group can read (r), CANNOT (-) write to, and CANNOT (-) execute the filethe last group has 3 characters and is for other users:
r--means other users can read (r), CANNOT (-) write to, and CANNOT (-) execute the file
I want to add execute permissions so I can run (execute) the file
how to make a shell script run as a command
I change the mode of the file to add executable permissions
chmod +x makePythonTdd.shchmod is a program that changes the mode (permissions) of the given file, the terminal goes back to the command line
I list the permissions again with ls
ls -l makePythonTdd.shthe terminal shows
-rwxr-xr-x 1 abcdef ghijk XX Month Y ZA:BC makePythonTdd.shI try the command again
./makePythonTdd.shthe terminal shows
============================== FAILURES =============================== ____________________ TestMagicAgain.test_failure ______________________ self = <tests.test_magic_again.TestMagicAgain testMethod=test_failure> def test_failure(self): > self.assertFalse(True) E AssertionError: True is not false tests/test_magic_again.py:7: AssertionError ====================== short test summary info ======================== FAILED tests/test_magic_again.py::TestMagicAgain::test_failure - AssertionError: True is not false ========================= 1 failed in X.YZs ===========================Success! I just made a program that can make the
magic_againproject anytime I want and it automatically does the steps I used to do.I hold ctrl on the keyboard and click on
tests/test_magic_again.pyto open it in the editor then make the test passI click in the terminal and use q on the keyboard to leave the tests, the terminal shows
.../pumping_pythonI am back in the
pumping_pythondirectoryI close
test_magic_againin the editorI want to use
makePythonTdd.shto make another project with a different name. I changemagic_againto the name of the new project in the editorNote
The lines that are changing in the code are highlighted
1#!/bin/bash 2mkdir more_magic 3cd more_magic 4mkdir src 5touch src/more_magic.py 6mkdir tests 7touch tests/__init__.py 8 9echo "import unittest 10 11 12class TestMoreMagic(unittest.TestCase): 13 14 def test_failure(self): 15 self.assertFalse(True) 16 17 18# Exceptions seen 19# AssertionError 20" > tests/test_more_magic.py 21 22echo "pytest" > requirements.txt 23echo "pytest-watcher" >> requirements.txt 24uv init 25rm main.py 26uv add --requirement requirements.txt 27uv run pytest-watcher . --nowI run
makePythonTdd.shin the terminal to make a project namedmore_magic./makePythonTdd.shthe terminal shows AssertionError
============================== FAILURES =============================== _____________________ TestMoreMagic.test_failure ______________________ self = <tests.test_more_magic.TestMoreMagic testMethod=test_failure> def test_failure(self): > self.assertFalse(True) E AssertionError: True is not false tests/test_more_magic.py:7: AssertionError ====================== short test summary info ======================== FAILED tests/test_more_magic.py::TestMoreMagic::test_failure - AssertionError: True is not false ========================== 1 failed in X.YZs ==========================I make the test pass
I click in the terminal and use q on the keyboard to leave the tests, the terminal shows
.../pumping_pythonI am back in the
pumping_pythondirectoryI close
test_more_magic.pyin the editor
makePythonTdd.sh works and can automatically make a Python Test Driven Development environment the way I want every time. What a beautiful life.
review
Computer Programming allows me to take some steps and make them a one line command for the computer to do for me. You have seen a way I can make a Python Test Driven Development environment, with a program to do it on any Linux, Windows or MacOS computers.
How many questions can you answer after going through this chapter?
code from the chapter
what is next?
you have gone through a few things
rate pumping python
If this has been a 7 star experience for you, please CLICK HERE to leave a 5 star review of pumping python. It helps other people get into the book too