Understanding the Python Tox Ecosystem
Tags: python, tox, testing, pytest
Published: 2022-10-21 10:25:36

- This tutorial will show you how to automate testing for python projects using `tox`.
- If you've ever worked on a python package, chances are you have seen files like: `setup.cfg`, `setup.py`, `pyproject.toml`, `tox.ini`, etc.
- This tutorial explains what they are as well as walks you through how you can use them to your benefit.

- ## Table Of Contents
    * Chapter 1: The Need For Test Automation
        * 1.1 - Testing Without A library
        * 1.2 - Using an Existing Testing Library
        * 1.3 - Understanding the TOX Use Case in the Eco System
        {% embed https://dev.to/zim95/the-need-for-test-automation-1952 %}
    * Chapter 2 - The Need of A project Structure in Python Testing
        * 2.1 - Understanding the problem with import statements
        * 2.2 - Solution to the problem with import statements
        * 2.3 - Making our application installable
            * 2.3.1 - Understanding the `pyproject.toml` file
            * 2.3.2 - Understanding the `setup.py` file
            * 2.3.3 - Understanding the `setup.cfg` file {% embed https://dev.to/zim95/chapter-2-the-need-for-a-project-structure-82h %}
    * Chapter 3 - Using `pytest`, `mypy` and `flake8`
        * 3.1 - Adding new dependencies to requirements
        * 3.2 - Adding to our metadata in `setup.cfg`
        * 3.3 - Adding python configurations to `pyproject.toml`
    {% embed  https://dev.to/zim95/chapter-3-using-pytest-mypy-and-flake8-for-testing-30cl %}
    * Chapter 4 - A Quick Tour of `Pytest`
        * 4.1 - Test Discovery
        * 4.2 - Working with parameterising
        * 4.3 - Skipping Tests
        * 4.4 - Handling Failing Tests without breaking the build
        * 4.5 - Handling Tests that raise errors
        * 4.6 - Working with fixtures
            * 4.6.1 - Understanding `fixture scopes`
        * 4.7 - Working with monkey patching
            * 4.7.1 - Understanding the need to mock
            * 4.7.2 - Monkeypatch syntax overview
        * 4.8 - Understanding test coverage  
        {% embed https://dev.to/zim95/chapter-4-a-quick-tour-of-pytest-264d %} 
    * Chapter 5 - Test multiple environments with `Tox`
        * 5.1 - The Need for Tox and the Tox configuration file
        * 5.2 - Understanding the Tox variables
        * 5.3 - Understanding the flow of tox environments
        * 5.4 - Executing Tox
        {% embed https://dev.to/zim95/chapter-5-testing-multiple-environments-with-tox-4if0 %}
    * Chapter 6 - Test on commit with Github Actions
        * 6.1 - The Need for Github Actions
        * 6.2 - Configuring Github Actions
        * 6.3 - Understanding Tox GH Actions
        * 6.4 - Adding Build Results to README
        {% embed https://dev.to/zim95/chapter-6-test-on-commit-with-github-actions-39po %}
- ## Credits - Study Material
    - This article is based on the following youtube video:
        [https://www.youtube.com/watch?v=DhUpxWjOhME] 
        (https://www.youtube.com/watch?v=DhUpxWjOhME)   
    - Please check it out. This video offers a visual counterpart to this article. It is the original video this article is based out of.
    - Other articles used throughout the article to understand various concepts better:
        - SetupTools Documentation - https://setuptools.pypa.io/en/latest/index.html
        - Type Checking with MyPy - https://realpython.com/lessons/type-checking-mypy/#:~:text=%E2%80%9CMypy%20is%20an%20optional%20static,background%20on%20the%20Mypy%20project
        - Test Discover in PyPy - https://docs.pytest.org/en/stable/explanation/goodpractices.html#test-discovery
        - Grouping multiple tests in a class - https://docs.pytest.org/en/stable/getting-started.html#group-multiple-tests-in-a-class
        - Understanding grouping of tests in a class - https://stackoverflow.com/questions/20277058/py-test-does-not-find-tests-under-a-class#:~:text=test%20does%20not%20find%20tests%20under%20a%20class,-Ask%20Question
        - Testing unittest based classes - https://docs.pytest.org/en/7.1.x/how-to/unittest.html
        - Change the standard in Test Discovery - https://docs.pytest.org/en/7.1.x/example/pythoncollection.html
        - Fixture Scopes - https://betterprogramming.pub/understand-5-scopes-of-pytest-fixtures-1b607b5c19ed
        - Understanding the structure of tox configuration file: https://tox.wiki/en/latest/config.html
    - Finally my `TDD In Python` course: 
        [https://www.youtube.com/watch?v=NAjCDSqxrQ&list=PLVWk3kKbCAAuPPr_eh4KNKdL2hDSNFH3H](https://www.youtube.com/watch?v=NAjCDS-qxrQ&list=PLVWk3kKbCAAuPPr_eh4KNKdL2hDSNFH3H)