Ciągłe testy jednostkowe z Pydev (Python i Eclipse)
Czy jest sposób na zintegrowanie testów jednostkowych w tle ze środowiskiem Pydev Eclipse?
Moje testy jednostkowe działają dobrze, ale chciałbym je zintegrować, aby uruchomić je w tle na podstawie zmian plików źródłowych (np. z nose) i zintegrować wynik z powrotem do Eclipse(myślę o big red x, gdy testy nie powiodą się z widokiem console i trace log).
Nie, nos wiersza polecenia z boku się nie liczy.
Miałem tę integrację Eclipse podczas tworzenia RoR rzeczy.
Dzięki,
Tal.
EDIT: Zobacz nowy Pydev (1.6.4) http://pydev.org/manual_adv_pyunit.html
6 answers
Ta funkcja została dodana do PyDev 2.0.1 z opcją ponownego uruchomienia testów w ostatnim uruchomieniu testowym za każdym razem, gdy zmieni się plik Pythona, z dodatkową opcją ponownego uruchomienia tylko błędów-chociaż uruchomi pełny pakiet testowy, jeśli nie znaleziono błędów, ponieważ chodzi o to, że pracujesz nad swoimi błędami i kiedy wszystkie przechodzą ostateczne uruchomienie całego pakietu (możesz przejść do innego zadania).
Obecna wersja nightly posiada tę funkcję.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-13 14:09:41
Pydev ma jakąś integrację testów jednostkowych, ale to tylko jako run configuration...so...
To nie jest zbyt elegancki sposób, ale jeśli:
- Włącz Projekt - > Buduj Automatycznie
- we właściwościach projektu Dodaj nowy kreator typu Program
- skonfiguruj go tak, aby uruchamiał testy i wybierz "podczas automatycznych kompilacji"
Wtedy przynajmniej dostaniesz coś, co wyświetli wyniki testów w konsoli na zapisanych zasobach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-24 16:44:23
Właśnie zdałem sobie sprawę, że PyDev ma dość potężną obsługę skryptów. Niestety nie mam czasu, aby zrobić to wszystko za ciebie (ale jeśli to wypełnisz, zamieść to tutaj :)
Jeśli utworzysz plik o nazwie pyedit_nose.py
, który wygląda tak w innym pustym folderze:
assert cmd is not None
assert editor is not None
if cmd == 'onSave':
from java.lang import Runtime
from java.io import BufferedReader
from java.io import InputStreamReader
from org.eclipse.core.resources import ResourcesPlugin
from org.eclipse.core.resources import IMarker
from org.eclipse.core.resources import IResource
proc = Runtime.getRuntime().exec('ls -al')
extra_message = BufferedReader(InputStreamReader(proc.inputStream)).readLine()
r = ResourcesPlugin.getWorkspace().getRoot()
for marker in r.findMarkers(IMarker.PROBLEM, False, IResource.DEPTH_INFINITE):
if marker.getAttribute(IMarker.MESSAGE).startsWith("Some test failed!"):
marker.delete()
for rr in r.getProjects():
marker = rr.createMarker(IMarker.PROBLEM)
marker.setAttribute(IMarker.MESSAGE, "Some test failed! " + extra_message)
marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH)
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR)
I skonfiguruj Preferencje - > PyDev- > skrypt Pydev, aby wskazać ten katalog, wszystkie projekty w Twojej przestrzeni roboczej będą oznaczone błędem za każdym razem, gdy plik zostanie zapisany.
Wykonując skrypt, który zwraca wyniki testu w łatwym do przetworzenia formacie, a nie ls
i analizując wynik powinieneś być w stanie umieścić swoje znaczniki w odpowiednich miejscach.
Zobacz to dla niektórych punktów wyjścia:
- Jython Scripting in Pydev
- IMarker jest tym, co reprezentuje marker.
-
IResource jest tym, do czego przywiązujesz swoje markery. Mogą to być przestrzenie robocze, Projekty, pliki, katalogi itp.
resource.createMarker(IMarker.PROBLEM)
tworzy problem marker. -
IProject jest typem
IResource
, który reprezentuje projekt. Użyj metodymembers()
, aby uzyskać zawartość.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-24 19:29:25
Test wykonuję ręcznie za pierwszym razem (Run > Run As > Python unit test ). Potem używam
Ctrl+Shift+F9
aby zapisać pliki i wykonać testy, zamiast zapisywać za pomocą {[1] } i oczekiwać, że wydarzy się jakaś magia.
Kombinacja klawiszy Ctrl+Shift+F9
uruchamia ponownie ostatnią konfigurację uruchomienia.
Jeśli chodzi o Eclipse 'a i PyDev' a, to może sugeruję coś głupiego / oczywistego / błędnego.]}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-21 22:04:19
Ulepszyłem skrypt "wścibski", aby automatycznie budować dokumentację i uruchamiać testy ciągle. Nic wspaniałego, ale wykonuje swoją pracę. Zamieszczanie go tutaj, ponieważ oryginał link padł. W przeciwieństwie do oryginalnego skryptu nosy, ten skanuje katalog rekurencyjnie i pozwala na szukanie wielu wzorów.
import os
import os.path
import sys
import stat
import time
import subprocess
from fnmatch import fnmatch
def match_patterns(pathname, patterns):
"""Returns True if the pathname matches any of the given patterns."""
for pattern in patterns:
if fnmatch(pathname, pattern):
return True
return False
def filter_paths(pathnames, patterns=["*"], ignore_patterns=[]):
"""Filters from a set of paths based on acceptable patterns and
ignorable patterns."""
result = []
if patterns is None:
patterns = []
if ignore_patterns is None:
ignore_patterns = []
for path in pathnames:
if match_patterns(path, patterns) and not match_patterns(path, ignore_patterns):
result.append(path)
return result
def absolute_walker(path, recursive):
if recursive:
walk = os.walk
else:
def walk(path):
return os.walk(path).next()
for root, directories, filenames in walk(path):
yield root
for directory in directories:
yield os.path.abspath(os.path.join(root, directory))
for filename in filenames:
yield os.path.abspath(os.path.join(root, filename))
def glob_recursive(path, patterns=["*"], ignore_patterns=[]):
full_paths = []
for root, directories, filenames in os.walk(path):
for filename in filenames:
full_path = os.path.abspath(os.path.join(root, filename))
full_paths.append(full_path)
filepaths = filter_paths(full_paths, patterns, ignore_patterns)
return filepaths
def check_sum(path='.', patterns=["*"], ignore_patterns=[]):
sum = 0
for f in glob_recursive(path, patterns, ignore_patterns):
stats = os.stat(f)
sum += stats[stat.ST_SIZE] + stats[stat.ST_MTIME]
return sum
if __name__ == "__main__":
if len(sys.argv) > 1:
path = sys.argv[1]
else:
path = '.'
if len(sys.argv) > 2:
command = sys.argv[2]
else:
command = "make -C docs html; bin/python tests/run_tests.py"
previous_checksum = 0
while True:
calculated_checksum = check_sum(path, patterns=['*.py', '*.rst', '*.rst.inc'])
if calculated_checksum != previous_checksum:
previous_checksum = calculated_checksum
subprocess.Popen(command, shell=True)
time.sleep(2)
Mam nadzieję, że to pomoże.
=)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-02 18:29:34
Używam Nosy (dostępne na pypi):
Uruchom narzędzie do wykrywania i wykonywania testów nosa, gdy plik źródłowy zmienił się.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-16 16:32:52