简体   繁体   中英

travis ci isn't collecting my tests when using pytest

I've been googling this issue for over an hour and have absolutely 0 idea what to do - I'm trying to set up travis ci on my public repo and for some reason every time I commit and build, I consistently get this:

============================= test session starts ==============================
platform linux2 -- Python 2.7.13, pytest-3.2.1, py-1.4.34, pluggy-0.4.0
rootdir: /home/travis/build/epitone/digitron, inifile:
plugins: cov-2.5.1
collected 0 items                                                               
========================= no tests ran in 0.01 seconds =========================
The command "pytest" exited with 5.
Done. Your build exited with 1.

For some reason, my tests aren't being collected even though on my local machine, pytest runs just fine and even passes my (single) test that I've set up. Does anyone know exactly what's going on here?

My directory setup is something like this:

digitron/
├── bot.py
├── lib
│   ├── _config.py
│   ├── config.py
│   ├── __init__.py
│   └── utils.py
├── README.md
├── requirements.txt
└── tests
    └── auth_test.py

my .travis.yml file:

language: python
python:
  - "2.7"
  - "3.2"
  - "3.3"
  - "3.4"
  - "3.5"
  - "3.6"
  - "nightly" # currently points to 3.7-dev
before_install:
    - pip install pytest pytest-cov
# command to install dependencies
install: "pip install -r requirements.txt"
# command to run tests
script: pytest

my requirements.txt file contains:

pytest>=3.2.1
py>=1.4.31
pluggy>=0.4.0

and my auth_test.py file is simply:

"""
Testing for Digitron
"""
#  Necessary to find parent directory
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import bot
import pytest

    def test_connect():
        """Test connect() method in bot.py

        Returns True or false
        """
        assert(bot.connect("irc.chat.twitch.tv", 6667, "oauth:key", "username", "#channel")) == True

I'm basically pulling my hair out over here trying to figure out what I'm doing wrong - googling error code 5 gets me nothing, and I'm even following along with someone elses setup and still getting nowhere - is there something I'm missing?

edit: tried explicitly calling the tests/ directory in the pytest command - works locally, fails yet again on travis.ci

  1. While I can't tell if this is the cause of your problem, at least the method to coerce sys.path is not very orthodox. pytest performs this automatically: https://docs.pytest.org/en/latest/goodpractices.html#tests-as-part-of-application-code so there may be import issues.

  2. The error number 5 is caused by pytest not finding any test, see the documentation

  3. Possible tests for resolution:

    1. Rename your test file to test_auth.py
    2. Add diagnostic information to your script: pwd , ls , etc. Try simply executing the file: python tests/auth_test.py .

This is a bit long and annoying to format in a comment, hence the answer.

You should add a pytest.ini file with the contents:

[pytest]
testpaths = <path to your tests here>

Without this, Travis cannot find your tests, hence why you are getting the error number 5.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM