Pydev (Python and Eclipse)를 사용한 연속 장치 테스트
-
06-07-2019 - |
문제
배경 단위 테스트를 Pydev Eclipse 환경과 통합하는 방법이 있습니까?
내 단위 테스트는 잘 실행되지만 소스 파일 변경 (예 : 코로)을 기반으로 백그라운드에서 실행되도록 통합하고 결과를 ECLIPSE에 다시 통합하려고합니다 (콘솔에서 테스트가 실패 할 때 Big Red X라고 생각합니다. 추적 로그보기).
아니요, 측면에서 코를 실행하는 명령 프롬프트는 계산되지 않습니다.
ROR 작업을 개발할 때이 일식 통합을 받았습니다.
감사,
탈.
편집하다: 새로운 pydev (1.6.4)를 확인하십시오. http://pydev.org/manual_adv_pyunit.html
해결책
이 기능은 Python 파일이 변경 될 때마다 테스트를 다시 시작할 수있는 옵션과 함께 Pydev 2.0.1에 추가되었습니다. Python 파일이 변경 될 때마다 테스트를 다시 시작하고 오류 만 다시 실행하는 추가 옵션이 있습니다. 아이디어가 오류를 통해 작업하고 전체 스위트에 대한 최종 출시가 완료되면 오류가 발견되었습니다 (그러면 다른 작업으로 이동할 수 있음).
현재 야간 빌드에는이 기능이 포함되어 있습니다.
다른 팁
Pydev는 단위 테스트 통합이 있지만 실행 구성 일뿐입니다 ... 그래서 ...
이것은 매우 우아한 방법은 아니지만 다음과 같은 경우 :
- 프로젝트-> 빌드를 자동으로 활성화하십시오
- 프로젝트 속성에서 새로운 유형 프로그램 빌더를 추가하십시오.
- 테스트를 실행하고 '자동 빌드 중'을 선택하도록 구성하십시오.
그런 다음 적어도 테스트 결과를 자원 저장에 대한 콘솔에 출력하는 무언가를 얻을 수 있습니다.
방금 PYDEV가 강력한 스크립팅 지원을 가지고 있음을 깨달았습니다. 불행히도 나는 당신을 위해 모든 것을 할 시간이 없습니다 (그러나 당신이 이것을 완료하면 여기에 게시하십시오 :)
이름이 지정된 파일을 작성하는 경우 pyedit_nose.py
그렇지 않으면 빈 폴더에서 다음과 같습니다.
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)
환경 설정-> pydev-> 스크립팅 pydev이 디렉토리를 가리 키도록 파일이 저장 될 때마다 오류가 표시된 작업 영역의 모든 프로젝트를 얻게됩니다.
테스트를 반환하는 스크립트를 실행하여 ls
출력을 구문 분석하면 마커를 올바른 장소에 넣을 수 있어야합니다.
몇 가지 시작점은 다음과 같습니다.
- Pydev의 Jython 스크립팅
- Imarker 마커를 나타내는 것입니다.
- Iresource 마커를 부착하는 것입니다. 작업 공간, 프로젝트, 파일, 디렉토리 등이 될 수 있습니다.
resource.createMarker(IMarker.PROBLEM)
문제 마커를 만듭니다. - iproject 유형입니다
IResource
그것은 프로젝트를 나타냅니다. 사용members()
내용을 얻는 방법.
나는 처음으로 손으로 테스트를 실행합니다 (> 파이썬 단위 테스트로 실행하십시오). 그 후, 나는 사용한다Ctrl+Shift+F9
저장하는 대신 파일을 저장하고 테스트를 실행하도록 Ctrl+S
그리고 마법이 일어날 것으로 기대합니다.
그만큼 Ctrl+Shift+F9
키 조합은 마지막 실행 구성을 다시 시작합니다.
부인 성명: 나는 Eclipse와 Pydev를 처음 접 했으므로 어리석은/명백한/잘못을 제안 할 수 있습니다.
"Nosy"스크립트를 강화하여 설명서를 자동으로 작성하고 테스트를 지속적으로 실행합니다. 별은 없지만 작업을 완료합니다. 원래 링크가 다운되어 여기에 게시합니다. 원래 코 스크립트와 달리 디렉토리를 재귀 적으로 스캔하고 여러 패턴을 찾을 수 있습니다.
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)
도움이 되었기를 바랍니다.
=)
나는 사용한다 코 (PYPI에서 사용 가능) :
소스 파일이 변경 될 때마다 코 테스트 검색 및 실행 도구를 실행하십시오.