This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2017年02月24日 16:48 by Andrei Fokau, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 282 | closed | python-dev, 2017年02月24日 21:56 | |
| Messages (10) | |||
|---|---|---|---|
| msg288529 - (view) | Author: Andrei Fokau (Andrei Fokau) * | Date: 2017年02月24日 16:48 | |
Hi, As far as I see, unittest.TestLoader doesn't search in PEP-420 packages, i.e. packages without __init__.py files. Is there some motivation behind this, or the loader was just not yet adapted for Implicit Namespace Packages? |
|||
| msg288531 - (view) | Author: Andrei Fokau (Andrei Fokau) * | Date: 2017年02月24日 20:16 | |
Ok, it's actually not so hard to work around (for Python 3.6, at least):
import os
from unittest import TestLoader
class CustomTestLoader(TestLoader):
def _find_test_path(self, full_path, pattern, namespace=False):
original_isfile = os.path.isfile
def patched_isfile(path):
return str(path).endswith('__init__.py') or original_isfile(path)
os.path.isfile = patched_isfile
result = super()._find_test_path(full_path=full_path, pattern=pattern,
namespace=namespace)
os.path.isfile = original_isfile
return result
I'll try to submit a pull request if it can be resolved properly.
|
|||
| msg288534 - (view) | Author: Andrei Fokau (Andrei Fokau) * | Date: 2017年02月24日 21:59 | |
Alright, I made an initial fix in #282. I believe that I still need to update the docs and run it with something big, e.g. Django. |
|||
| msg288545 - (view) | Author: Andrei Fokau (Andrei Fokau) * | Date: 2017年02月25日 07:32 | |
Docs promise already support for namespace packages, so just a minor clarification was done. |
|||
| msg288558 - (view) | Author: Andrei Fokau (Andrei Fokau) * | Date: 2017年02月25日 10:48 | |
Ok, testing with Django was a bad idea due to compatibility with 3.7. I could apply it to 3.6.x and test Django with it. Is there a better idea how to trial the test discovery? |
|||
| msg288567 - (view) | Author: Andrei Fokau (Andrei Fokau) * | Date: 2017年02月25日 15:00 | |
Testing with Django seems indicated an issue. I did the following with 3.6 patch (cherry-pick to bea9d2f64) on macOS with OpenSSL installed via Homebrew: $ cd /Users/andrei/Python/cpython/ $ export CFLAGS="-I/usr/local/opt/openssl/include" $ export LDFLAGS="-L/usr/local/opt/openssl/lib" $ ./configure --with-pydebug --prefix=/Users/andrei/Python/installed/ $ make -j $ make install Then in Django (master, b427f0d674): $ cd /Users/andrei/Python/django/ $ ../../installed/bin/pip3.6 install -r ./requirements/py3.txt $ PYTHONPATH=.. DJANGO_SETTINGS_MODULE=test_sqlite ../../installed/bin/python3.6 ./runtests.py That produced one error: ====================================================================== ERROR: auth_tests.test_hashers (unittest.loader._FailedTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/andrei/Python/installed/lib/python3.6/unittest/case.py", line 59, in testPartExecutor yield File "/Users/andrei/Python/installed/lib/python3.6/unittest/case.py", line 601, in run testMethod() File "/Users/andrei/Python/installed/lib/python3.6/unittest/loader.py", line 34, in testFailure raise self._exception ImportError: Failed to import test module: auth_tests.test_hashers Traceback (most recent call last): File "/Users/andrei/Python/installed/lib/python3.6/unittest/loader.py", line 426, in _find_test_path module = self._get_module_from_name(name) File "/Users/andrei/Python/installed/lib/python3.6/unittest/loader.py", line 367, in _get_module_from_name __import__(name) File "/Users/andrei/Python/django/tests/auth_tests/test_hashers.py", line 20, in <module> if crypt.crypt('', '') is None: File "/Users/andrei/Python/installed/lib/python3.6/crypt.py", line 47, in crypt return _crypt.crypt(word, salt) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfb in position 1: invalid start byte Ran 11695 tests in 259.390s FAILED (errors=1, skipped=1149, expected failures=4) Then I ran the same tests in 3.6.0 virtualenv installed via pyenv: $ pyenv virtualenv 3.6.0 djtest $ pyenv shell djtest $ pip install -r ./requirements/py3.txt $ PYTHONPATH=.. DJANGO_SETTINGS_MODULE=test_sqlite python ./runtests.py and they went fine: Ran 11723 tests in 87.369s OK (skipped=1149, expected failures=4) So the patch causes 1 error and misses 28 tests. I'll try to figure out the problem with failing test and what tests are missing. |
|||
| msg288576 - (view) | Author: Andrei Fokau (Andrei Fokau) * | Date: 2017年02月25日 19:35 | |
Removing `--with-pydebug` parameter helped to avoid issue with _crypto extension. Testing Django with that build produced result identical to 3.6.0: Ran 11723 tests in 83.897s OK (skipped=1149, expected failures=4) The patch is ready for review. |
|||
| msg288697 - (view) | Author: Inada Naoki (methane) * (Python committer) | Date: 2017年02月28日 07:45 | |
I'm afraid this change makes testloader searches unrelated directory contains massive files (like node_modules). I don't think loading all tests from whole namespace package is not usual use case. |
|||
| msg288698 - (view) | Author: Inada Naoki (methane) * (Python committer) | Date: 2017年02月28日 07:51 | |
When using import, (namespace) package name is explicitly specified. Only specified name is searched. In test loader's case, there are no such limit. Loader may search millions of completely unrelated directories. It may include directories in NFS or samba over slow network. |
|||
| msg290064 - (view) | Author: Andrei Fokau (Andrei Fokau2) | Date: 2017年03月23日 22:10 | |
I was wrong. The ticket can be closed now. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:43 | admin | set | github: 73828 |
| 2020年07月19日 03:35:55 | methane | set | superseder: unittest discovery doesn't detect namespace packages when given no parameters |
| 2017年04月12日 04:02:31 | berker.peksag | set | status: open -> closed resolution: not a bug stage: patch review -> resolved |
| 2017年03月23日 23:05:52 | nedbat | set | nosy:
+ nedbat |
| 2017年03月23日 22:10:40 | Andrei Fokau2 | set | nosy:
+ Andrei Fokau2 messages: + msg290064 |
| 2017年02月28日 07:51:39 | methane | set | messages: + msg288698 |
| 2017年02月28日 07:45:00 | methane | set | nosy:
+ methane messages: + msg288697 |
| 2017年02月25日 19:35:56 | Andrei Fokau | set | messages: + msg288576 |
| 2017年02月25日 15:00:45 | Andrei Fokau | set | messages: + msg288567 |
| 2017年02月25日 10:48:17 | Andrei Fokau | set | messages: + msg288558 |
| 2017年02月25日 07:32:43 | Andrei Fokau | set | messages: + msg288545 |
| 2017年02月25日 01:50:07 | Mariatta | set | versions: - Python 3.4 |
| 2017年02月24日 22:19:37 | serhiy.storchaka | set | nosy:
+ rbcollins, ezio.melotti, michael.foord stage: patch review |
| 2017年02月24日 21:59:13 | Andrei Fokau | set | messages: + msg288534 |
| 2017年02月24日 21:56:07 | python-dev | set | pull_requests: + pull_request251 |
| 2017年02月24日 20:17:00 | Andrei Fokau | set | messages: + msg288531 |
| 2017年02月24日 16:52:51 | barry | set | nosy:
+ barry |
| 2017年02月24日 16:48:45 | Andrei Fokau | create | |