Domanda

Esiste un modo per integrare i test delle unità in background con l'ambiente Pydev Eclipse?

I miei test unitari funzionano bene, ma vorrei integrarli per l'esecuzione in background in base alle modifiche del file di origine (ad es. con nose) e per integrare il risultato in Eclipse (sto pensando a una grande X rossa quando i test falliscono con una console e una vista del registro di traccia).

No, un prompt dei comandi che esegue il naso sul lato non conta.

Ho avuto questa integrazione Eclipse durante lo sviluppo di roR.

Grazie,

Tal.

MODIFICA: Scopri il nuovo Pydev (1.6.4) http: // pydev .org / manual_adv_pyunit.html

È stato utile?

Soluzione

Questa funzione è stata aggiunta a PyDev 2.0.1 con un'opzione per riavviare i test nell'ultima esecuzione di test ogni volta che cambia un file python, con un'opzione aggiuntiva per rieseguire solo gli errori, anche se eseguirà il test completo suite se non sono stati rilevati errori, poiché l'idea è quella di elaborare gli errori e quando tutti eseguono un avvio finale per l'intera suite (è possibile passare a un'altra attività).

L'attuale build notturna include questa funzione.

Immagine con nuova azione

Altri suggerimenti

Pydev ha un'integrazione unit-test, ma è solo una configurazione di esecuzione ... quindi ...

Questo non è un modo molto elegante, ma se tu:

  1. Abilita Project- > Build automaticamente
  2. Nelle proprietà del progetto, aggiungi un nuovo builder di tipo Programma
  3. Configuralo per eseguire i test e seleziona "durante i build automatici"

Quindi almeno otterrai qualcosa che trasmette i risultati del test alla console durante il salvataggio delle risorse.

Ho appena realizzato che PyDev ha un supporto di scripting piuttosto potente. Purtroppo non ho il tempo di fare tutto per te (ma se lo completi, per favore pubblicalo qui :)

Se crei un file chiamato pyedit_nose.py che assomiglia a questo in una cartella altrimenti vuota:

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)

e imposta Preferenze- > PyDev- > Scripting Pydev per puntare a questa directory otterrai tutti i progetti nell'area di lavoro contrassegnati con un errore ogni volta che un file viene salvato.

Eseguendo uno script che restituisce i risultati del test in un formato facile da analizzare anziché ls e analizzando l'output dovresti essere in grado di posizionare i tuoi marker nei posti giusti.

Vedi questo per alcuni punti di partenza:

  • Jython Scripting in Pydev
  • IMarker è ciò che rappresenta un marcatore.
  • IResource è ciò a cui colleghi i tuoi marker. Possono essere aree di lavoro, progetti, file, directory ecc. resource.createMarker (IMarker.PROBLEM) crea un marker di problemi.
  • IProject è un tipo di IResource che rappresenta un progetto. Utilizzare il metodo members () per ottenere i contenuti.

Eseguo il test a mano per la prima volta ( Esegui > Esegui come > Python unit test ). Dopo quello, io uso Ctrl + Maiusc + F9 per salvare i file e eseguire i test, invece di salvare con Ctrl + S e aspettarsi che avvenga un po 'di magia.

La combinazione di tasti Ctrl + Shift + F9 riavvia l'ultima configurazione della corsa.

Disclaimer : sono nuovo su Eclipse e PyDev, quindi potrei suggerire qualcosa di sciocco / ovvio / sbagliato

Ho migliorato " nosy " script per compilare automaticamente la documentazione ed eseguire test continuamente. Niente di eccezionale, ma ottiene il lavoro fatto. Pubblicandolo qui perché l'originale il link è andato giù. A differenza dello script originale ficcanaso, questo analizza ricorsivamente la directory e consente di cercare più pattern.

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)

Spero che questo aiuti.

=)

Uso Nosy (disponibile su pypi):

  

Esegui lo strumento di individuazione ed esecuzione del test del naso ogni volta che un file di origine   è cambiato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top