Как должна выглядеть структура проекта Python, чтобы Travis CI мог найти и запустить тесты?

В настоящее время у меня есть проект со следующим файлом .travis.yml:

language: python
install: "pip install tox"
script: "tox"

Локально tox правильно выполняет и запускает 35 тестов, но в Travis CI он выполняет 0 тестов.

Дополнительные сведения: https://travis-ci.org/neverendingqs/pyiterable/builds/78954867

Я также пробовал другие способы, в том числе:

language: python
python:
  - "2.6"
  - "2.7"
  - "3.2"
  - "3.3"
  - "3.4"
  - "3.5.0b3"
  - "3.5-dev"
  - "nightly"
# also fails with just `nosetest` and no `install` step
install: "pip install coverage unittest2"
script: "nosetests --with-coverage --cover-package=pyiterable"

Они также не смогли найти никаких тестов.

Структура моего проекта подобна этой:

- ...
- <module>
- tests (for the module)
- ...

Неправильно ли структурированы проект/папки?


person neverendingqs    schedule 06.09.2015    source источник
comment
Пробовали ли вы указать расположение тестов в команде Nosetest? Я использую Travis CI только в одном из своих проектов и использую nosetest tests/ для запуска тестов. Попробуйте изменить файл tox.ini на nosetests tests/ --with-coverage --cover-package=pyiterable.   -  person bnlucas    schedule 06.09.2015
comment
Только что попробовал - безуспешно =[   -  person neverendingqs    schedule 07.09.2015
comment
@bnlucas, могу я увидеть вашу структуру репо?   -  person neverendingqs    schedule 07.09.2015
comment
Да, извините за это. Должен был добавить. github.com/bnlucas/python-basehash   -  person bnlucas    schedule 07.09.2015


Ответы (1)


В структуре папок не было ничего плохого.

Похоже, файлы на Travis CI считаются исполняемыми (журналы с https://travis-ci.org/neverendingqs/pyiterable/builds/79049179):

nosetests --verbosity=3
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
nose.selector: INFO: /home/travis/build/neverendingqs/pyiterable/LICENSE.txt is executable; skipped
nose.selector: INFO: /home/travis/build/neverendingqs/pyiterable/pyiterable/iterable.py is executable; skipped
nose.selector: INFO: /home/travis/build/neverendingqs/pyiterable/readme.md is executable; skipped
nose.selector: INFO: /home/travis/build/neverendingqs/pyiterable/setup.cfg is executable; skipped
nose.selector: INFO: /home/travis/build/neverendingqs/pyiterable/tox.ini is executable; skipped
nose.selector: INFO: /home/travis/build/neverendingqs/pyiterable/tests/test_iterable.py is executable; skipped

Я изменил tox.ini на запуск nosetests с --exe (nosetests --exe --with-coverage --cover-package=pyiterable) на основе Выполнить все тесты в Каталог с использованием Nose. После исправления некоторых несвязанных ошибок я смог запустить тесты @ https://travis-ci.org/neverendingqs/pyiterable/builds/79049983!

person neverendingqs    schedule 06.09.2015
comment
Чтобы уточнить, TravisCI не думает, что они исполняемые — они являются исполняемыми, по крайней мере, в соответствии с текущим репозиторием GitHub (перейдите к любому файлу, например iterable.py и посмотрите вверху, что там написано "исполняемый"). Иногда исполняемые файлы являются правильным вызовом, но я не думаю, что он будет выполняться без шебанга (#!/usr/bin/env python или подобного), поэтому я предполагаю, что вы либо хотите оба (шебанг и права на исполняемый файл), либо ни один из них. - person dwanderson; 15.03.2016
comment
Несмотря на мой комментарий, когда вам нужны исполняемые файлы Python, тег --exe — это то, что вам нужно — хорошая находка! - person dwanderson; 15.03.2016