Python setuptools hides the real reason for the lack of tests

I have a package with a fairly extensive test suite, which I support with a very low change rate. From time to time, I forget to install the component necessary for testing, or that my changes violate the test code. And very often, when this happens, setuptoolsit hides the real cause of the problem.

Here is an example:

$ python setup.py test
running test
running egg_info
writing requirements to pwman3.egg-info/requires.txt
writing pwman3.egg-info/PKG-INFO
writing top-level names to pwman3.egg-info/top_level.txt
writing dependency_links to pwman3.egg-info/dependency_links.txt
writing entry points to pwman3.egg-info/entry_points.txt
reading manifest file 'pwman3.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pwman3.egg-info/SOURCES.txt'
running build_ext
Traceback (most recent call last):
  File "setup.py", line 361, in <module>
    'console_scripts': ['pwman3 = pwman.ui.cli:main']
  File "/usr/lib64/python2.7/distutils/core.py", line 151, in setup
    dist.run_commands()
  File "/usr/lib64/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/lib64/python2.7/site-packages/setuptools/command/test.py", line 146, in run
    self.with_project_on_sys_path(self.run_tests)
  File "/usr/lib64/python2.7/site-packages/setuptools/command/test.py", line 127, in with_project_on_sys_path
    func()
  File "/usr/lib64/python2.7/site-packages/setuptools/command/test.py", line 167, in run_tests
    testRunner=self._resolve_as_ep(self.test_runner),
  File "/usr/lib64/python2.7/unittest/main.py", line 94, in __init__
    self.parseArgs(argv)
  File "/usr/lib64/python2.7/unittest/main.py", line 149, in parseArgs
    self.createTests()
  File "/usr/lib64/python2.7/unittest/main.py", line 158, in createTests
    self.module)
  File "/usr/lib64/python2.7/unittest/loader.py", line 130, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib64/python2.7/unittest/loader.py", line 100, in loadTestsFromName
    parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'test_pwman'

Sometimes I spend a few disappointing minutes trying to figure out why I am getting this error, despite having a python module named in the test directory test_pwman.

Corresponding code inside setup.py:

from setuptools.command.install import install

setup(name=pwman.appname,
      ...
      test_suite='tests.test_pwman.suite',
      ...
      )

After spending some time looking at the screen, I would remember that I can run the test suite as follows:

$ python -m tests.test_pwman

This shows, for example, the real reason for the lack of tests:

Traceback (most recent call last):
  File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/ozn/Software/pwman3/tests/test_pwman.py", line 27, in <module>
    from .test_postgresql import TestPostGresql
  File "tests/test_postgresql.py", line 26, in <module>
    import psycopg2 as pg
  File "/home/ozn/.virtualenvs/pwman3/lib/python2.7/site-packages/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: libpq.so.5: cannot open shared object file: No such file or directory

Postgresql Python . :

setuptools ?
, setup.py ?

+4
2
+3

iElectric, , ​​ python 3.5. , python 2.7.

unittest2, python 2.7.

unittest2, (pip install unittest2), import unittest import unittest2.

unittest2 , stdlib unitest, , .

+3

Source: https://habr.com/ru/post/1623465/


All Articles