Frage

Gibt es eine Möglichkeit Hintergrund Unit-Tests mit der Pydev Eclipse-Umgebung zu integrieren?

Meine Unit-Tests laufen gut, aber ich möchte sie integrieren im Hintergrund auf Basis von Quelldatei Änderungen (zB mit Nase) und integrieren das Ergebnis zurück an Eclipse (ich denke großen roten X laufen, wenn Tests fehlschlagen mit einer Konsole und Trace-Protokoll-Ansicht).

Nein, eine Eingabeaufforderung Nase auf der Seite zählt nicht.

Ich habe diese Eclipse-Integration hatte, als RoR Sachen zu entwickeln.

Danke,

Tal.

EDIT: , um den neuen Pydev Check out (1.6.4) http: // pydev .org / manual_adv_pyunit.html

War es hilfreich?

Lösung

Diese Funktion wurde zu PyDev 2.0.1 mit einer Option hinzugefügt, um die Tests in dem letzten Testlauf, wenn eine Python-Datei ändern, mit einer zusätzlichen Option wiederzubeleben nur die Fehler wieder laufen zu lassen - obwohl sie den vollen Test ausgeführt werden Suite, wenn keine Fehler gefunden wurden, wie die Idee, dass Sie arbeiten durch Ihre Fehler ist und wenn alle eine endgültige Start für die gesamte Suite passieren erfolgt (dann können Sie zu einer anderen Aufgabe bewegen auf).

Die aktuelle Nightly Build hat diese Funktion eingebaut.

Bild mit neuer Aktion

Andere Tipps

Pydev hat einige Unit-Test-Integration haben, aber das ist nur als Lauf Konfiguration ... so ...

Dies ist keine sehr elegante Art und Weise, aber wenn Sie:

  1. Aktivieren Project-> Build automatisch
  2. In den Projekteigenschaften, einen neuen Builder vom Typ Programm hinzufügen
  3. Konfigurieren Sie Ihre Tests ausführen und wählen Sie ‚während der automatischen Builds‘

Dann zumindest werden Sie etwas, das die Testergebnisse an die Konsole ausgibt, auf Ressource speichert.

Ich habe erkannt, dass PyDev hat ziemlich leistungsfähige Scripting-Unterstützung. Leider ich habe nicht die Zeit haben, um alles für Sie tun (aber wenn Sie dies abgeschlossen haben, bitte hier posten:)

Wenn Sie eine Datei mit dem Namen pyedit_nose.py, die in einem ansonsten leeren Ordner wie folgt aussieht:

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)

und einrichten Einstellungen-> PyDev-> Scripting Pydev in dieses Verzeichnis Punkt finden Sie alle Projekte im Arbeitsbereich mit einem Fehler markiert bekommen jedes Mal, wenn eine Datei gespeichert wird.

Durch ein Skript ausgeführt werden, die die Testergebnisse in einigen leicht zurück Format zu analysieren, anstatt ls und Parsen der Ausgabe sollte Sie in der Lage sein, Ihre Markierungen an den richtigen Stellen zu setzen.

Sehen Sie dies für einige Ansatzpunkte:

  • Jython Scripting in Pydev
  • IMarker ist, was eine Markierung darstellt.
  • IResource ist, was Sie bringen Sie Ihre Marker. Kann Workspaces, Projekte, Dateien, Verzeichnisse usw. resource.createMarker(IMarker.PROBLEM) schafft ein Problem Marker sein.
  • IProject ist eine Art von IResource, der ein Projekt darstellt. Verwenden Sie die members() Methode, um den Inhalt zu bekommen.

ich den Test von Hand ausführen, um die erste Zeit ( Ausführen> Ausführen als> Python Unit-Test ). Danach benutze ich Ctrl+Shift+F9 hat, um die gespeicherten Dateien und die Tests ausgeführt werden, anstatt mit Ctrl+S zu sparen und etwas Magie erwarten zu passieren.

Die Ctrl+Shift+F9 Tastenkombination relauncht die letzte Lauf-Konfiguration.

Hinweis : Ich bin neu in Eclipse und PyDev, so dass ich sein kann, was darauf hindeutet, etwas Dummes / offensichtlich / falsch

ich verstärkt die „Nosy“ Skript automatisch Dokumentation zu erstellen und führt Tests ständig. Nichts stellar, aber bekommt den Job zu erledigen. Posting hier, weil das Original Link einging. Im Gegensatz zum ursprünglichen nosey Skript scannt dies das Verzeichnis rekursiv und ermöglicht mehrere Muster suchen.

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)

Hope, das hilft.

=)

Ich benutze Nosy (auf pypi):

  

Führen Sie die Nase Test Entdeckung und Ausführungswerkzeug, wenn eine Quelldatei   geändert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top