Introduction

Introducing Pytest

Pytest is a popular Python testing framework for writing, organizing, and running various types of automated tests. It provides a rich set of features that make it easy to write and manage test cases, as well as generate detailed test reports. Here are some of the key features and benefits of Pytest:

Simple and easy to use

Pytest is designed to make writing test cases simple and easy to understand. You can write test assertions using Python’s standard assert statement without having to learn a new assertion syntax.

Automatic Discovery of Test Cases

Pytest can automatically discover and run test cases in your project without explicitly configuring the test suite. Test case files can be named test_*.py or *_test.py, or use a specific test function naming convention.

Rich plugin ecosystem

Pytest can be extended with plugins. There are many third-party plug-ins available to meet different testing needs, such as Allure reporting, parameterization, coverage analysis, and so on.

Parameterized Testing

Pytest supports parameterized testing, which allows you to run the same test case multiple times, but with different parameters. This reduces code duplication and improves test coverage.

Exception and fault localization

Pytest provides detailed error and exception information that helps you locate and resolve problems more easily. It also provides detailed traceback information.

Parallel Test Execution

Pytest supports parallel execution of test cases, which increases the speed of test execution, especially in large projects.

Multiple Report Formats

Pytest supports multiple test report formats, including terminal output, JUnit XML, HTML reports and Allure reports. These reports can help you visualize test results.

Command Line Options

Pytest provides a rich set of command line options to customize the behavior of test runs, including filtering, retrying, coverage analysis, and more.

Integration

Pytest can be easily integrated with other testing frameworks and tools (e.g. Selenium, Django, Flask, etc.) as well as continuous integration systems (e.g. Jenkins, Travis CI, etc.).

Active Community

Pytest has an active community with extensive documentation and tutorials for learning and reference. You can also get support and solve problems in the community.

In short, Pytest is a powerful and flexible testing framework for projects of all sizes and types. Its ease of use, automation capabilities, and rich set of plugins make it one of the go-to tools in Python testing.

Official website: https://docs.pytest.org/en/latest/

Introduction to python virtual environments

A Python virtual environment is a mechanism for creating and managing multiple isolated development environments within a single Python installation. Virtual environments help resolve dependency conflicts between different projects by ensuring that each project can use its own independent Python packages and libraries without interfering with each other. Here are the steps on how to create and use a Python virtual environment:

Install the Virtual Environment Tool

Before you begin, make sure you have installed Python’s virtual environment tools. In Python 3.3 and later, the venv module is built-in and can be used to create virtual environments. If you’re using an older version of Python, you can install the virtualenv tool.

For Python 3.3+, the venv tool is built-in and does not require additional installation.

For Python 2.x, you can install the virtualenv tool with the following command:

pip install virtualenv

Creating a virtual environment

Open a terminal, move to the directory where you wish to create the virtual environment, and run the following command to create the virtual environment:

Use venv (for Python 3.3+):

python -m venv myenv

Use virtualenv (for Python 2.x):

virtualenv myenv

In the above command, myenv is the name of the virtual environment and you can customize the name.

Activate virtual environment

To start using the virtual environment, you need to activate it. The activation command is slightly different for different operating systems:

  • on macOS and Linux:
source myenv/bin/activate
  • On Windows (using Command Prompt):
myenv\Scripts\activate
  • On Windows (using PowerShell):
.\myenv\Scripts\Activate.ps1

Once the virtual environment is activated, you will see the name of the virtual environment in front of the terminal prompt, indicating that you are in the virtual environment.

Installing dependencies in a virtual environment

In a virtual environment, you can use pip to install any Python packages and libraries required by your project, and these dependencies will be associated with that virtual environment. Example:

pip install requests

Using a virtual environment

When working in a virtual environment, you can run Python scripts and use packages installed in the virtual environment. This ensures that your project runs in a separate environment and does not conflict with the global Python installation.

Exiting the virtual environment

To exit the virtual environment, simply run the following command in a terminal:

deactivate

This returns you to the global Python environment.

By using a virtual environment, you can maintain clean dependencies between projects and ensure project stability and isolation. This is a good practice in Python development.

Project dependencies

The following environments need to be installed in advance

  • python, demo version is v3.11.6

Just install python 3.x or higher.

Project directory structure

The following is an example of the directory structure of a Pytest API automation test project:

Subsequent demo projects will introduce allure reports, so there will be an additional allure-report directory.

Pytest-allure-demo/
    ├── tests/                  # test case files
    │   ├── test_login.py       # Example test case file
    │   ├── test_order.py       # Example test case file
    │   └── ...
    ├── data/                   # test data files (e.g. JSON, CSV, etc.)
    │   ├── dev_test_data.json      #  Test data file for development environment.
    │   ├── prod_test_data.json      #  Test data file for prod environment.
    │   ├── ...
    ├── config/
    │   ├── dev_config.json  # Development environment configuration file
    │   ├── prod_config.json  # Production environment configuration file
    │   ├── ...
    ├── conftest.py             # Pytest's global configuration file
    ├── pytest.ini              # Pytest configuration file
    ├── requirements.txt        # Project dependencies file
    └── allure-report/          # Allure reports

reference