Giter VIP home page Giter VIP logo

pytest's Introduction

pytest
Code coverage Status pre-commit.ci status Documentation Status Discord Libera chat

The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries.

An example of a simple test:

# content of test_sample.py
def inc(x):
    return x + 1


def test_answer():
    assert inc(3) == 5

To execute it:

$ pytest
============================= test session starts =============================
collected 1 items

test_sample.py F

================================== FAILURES ===================================
_________________________________ test_answer _________________________________

    def test_answer():
>       assert inc(3) == 5
E       assert 4 == 5
E        +  where 4 = inc(3)

test_sample.py:5: AssertionError
========================== 1 failed in 0.04 seconds ===========================

Due to pytest's detailed assertion introspection, only plain assert statements are used. See getting-started for more examples.

Features

  • Detailed info on failing assert statements (no need to remember self.assert* names)
  • Auto-discovery of test modules and functions
  • Modular fixtures for managing small or parametrized long-lived test resources
  • Can run unittest (or trial) test suites out of the box
  • Python 3.8+ or PyPy3
  • Rich plugin architecture, with over 1300+ external plugins and thriving community

Documentation

For full documentation, including installation, tutorials and PDF documents, please see https://docs.pytest.org/en/stable/.

Bugs/Requests

Please use the GitHub issue tracker to submit bugs or request features.

Changelog

Consult the Changelog page for fixes and enhancements of each version.

Support pytest

Open Collective is an online funding platform for open and transparent communities. It provides tools to raise money and share your finances in full transparency.

It is the platform of choice for individuals and companies that want to make one-time or monthly donations directly to the project.

See more details in the pytest collective.

pytest for enterprise

Available as part of the Tidelift Subscription.

The maintainers of pytest and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use.

Learn more.

Security

pytest has never been associated with a security vulnerability, but in any case, to report a security vulnerability please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.

License

Copyright Holger Krekel and others, 2004.

Distributed under the terms of the MIT license, pytest is free and open source software.

pytest's People

Contributors

nicoddemus avatar hpk42 avatar bluetech avatar blueyed avatar ronnypfannschmidt avatar asottile avatar the-compiler avatar benjaminp avatar flub avatar dependabot[bot] avatar pre-commit-ci[bot] avatar bubenkoff avatar pytestbot avatar zac-hd avatar twmr avatar hackebrot avatar github-actions[bot] avatar jeffreyrack avatar kalekundert avatar andras-tim avatar gnikonorov avatar feuillemorte avatar graingert avatar jurko-gospodnetic avatar symonk avatar pierre-sassoulas avatar hugovk avatar altendky avatar jaraco avatar pfctdayelise avatar

pytest's Issues

Sweep: Attribute error in pytest.approx for types implicitly convertible to numpy arrays

a detailed description of the bug or problem you are having
When using pytest.approx with custom types which are implicitly convertible to numpy arrays, the following error is observed:

E AssertionError: assert <test_matrix_...x7f9169ac4ca0> == approx([1.0 ±....0 ± 4.0e-06])
E (pytest_assertion plugin: representation of details failed: ~/.venv/lib/python3.10/site-packages/_pytest/python_api.py:175: AttributeError: 'MyType' object has no attribute 'shape'.
E Probably an object has a faulty repr.)
Note: The line number in the error message is a little off from the current head. That line is here.

Looking at the code, pytest.approx sensibly chooses the numpy implementation ApproxNumpy, because the expected value is implicitly convertible to a numpy array. However, the shape check assumes that other_side is a numpy array (rather than assuming its implicitly convertible to a numpy array, like the expected value is) and so assumes that it has a shape attribute (which is not part of how approx determines if something is a numpy array).

It seems like either:

ApproxNumpy._repr_compare() needs to convert other_side to a numpy array (ie _as_numpy_array(other_side))
_as_numpy_array needs to check if the object has a shape attribute, if the code is going to assume that's the case
output of pip list from the virtual environment you are using:
Relevant packages:
numpy: 1.26.1

pytest and operating system versions

pytest: 7.4.3
Ubuntu: 22.04

minimal example if possible
import numpy as np
import pytest

class MyType:
"""Type which is implicitly convertible to a numpy array."""
def init(self, vals):
self.vals = vals

def __repr__(self):
    return f"{self.__class__.__name__}({self.vals})"

def __array__(self, dtype=None, copy=None):
    return np.array(self.vals)

def test_approx_eq():
vec1 = MyType([1.0, 2.0, 3.0])
vec2 = MyType([1.0, 2.0, 4.0])
assert vec1 == pytest.approx(vec2)

Checklist
  • Modify src/_pytest/python_api.py85ee9af Edit
  • Running GitHub Actions for src/_pytest/python_api.pyEdit

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.