Merge pull request #784 from pytest-dev/create-dirs-xml-log
Automatically create directories for junit-xml and resultlog
This commit is contained in:
commit
0431b8bb74
28
.travis.yml
28
.travis.yml
|
@ -1,8 +1,32 @@
|
|||
sudo: false
|
||||
language: python
|
||||
# command to install dependencies
|
||||
install: "pip install -U detox"
|
||||
install: "pip install -U tox"
|
||||
# # command to run tests
|
||||
script: detox --recreate -i ALL=https://devpi.net/hpk/dev/
|
||||
env:
|
||||
matrix:
|
||||
- TESTENV=flakes
|
||||
- TESTENV=py26
|
||||
- TESTENV=py27
|
||||
- TESTENV=py34
|
||||
- TESTENV=pypy
|
||||
- TESTENV=py27-pexpect
|
||||
- TESTENV=py33-pexpect
|
||||
- TESTENV=py27-nobyte
|
||||
- TESTENV=py33
|
||||
- TESTENV=py27-xdist
|
||||
- TESTENV=py33-xdist
|
||||
- TESTENV=py27
|
||||
- TESTENV=py27-trial
|
||||
- TESTENV=py33
|
||||
- TESTENV=py33-trial
|
||||
# inprocess tests by default were introduced in 2.8 only;
|
||||
# this TESTENV should be enabled when merged back to master
|
||||
#- TESTENV=py27-subprocess
|
||||
- TESTENV=doctesting
|
||||
- TESTENV=py27-cxfreeze
|
||||
- TESTENV=coveralls
|
||||
script: tox --recreate -i ALL=https://devpi.net/hpk/dev/ -e $TESTENV
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
|
|
1
AUTHORS
1
AUTHORS
|
@ -8,6 +8,7 @@ Andreas Zeidler
|
|||
Andy Freeland
|
||||
Anthon van der Neut
|
||||
Armin Rigo
|
||||
Aron Curzon
|
||||
Benjamin Peterson
|
||||
Bob Ippolito
|
||||
Brian Dorsey
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
2.7.2 (compared to 2.7.1)
|
||||
-----------------------------
|
||||
|
||||
- Automatically create directory for junitxml and results log.
|
||||
Thanks Aron Curzon.
|
||||
|
||||
- fix issue713: JUnit XML reports for doctest failures.
|
||||
Thanks Punyashloka Biswal.
|
||||
|
||||
|
|
|
@ -205,6 +205,9 @@ class LogXML(object):
|
|||
self.suite_start_time = time.time()
|
||||
|
||||
def pytest_sessionfinish(self):
|
||||
dirname = os.path.dirname(os.path.abspath(self.logfile))
|
||||
if not os.path.isdir(dirname):
|
||||
os.makedirs(dirname)
|
||||
logfile = open(self.logfile, 'w', encoding='utf-8')
|
||||
suite_stop_time = time.time()
|
||||
suite_time_delta = suite_stop_time - self.suite_start_time
|
||||
|
|
|
@ -3,6 +3,7 @@ text file.
|
|||
"""
|
||||
|
||||
import py
|
||||
import os
|
||||
|
||||
def pytest_addoption(parser):
|
||||
group = parser.getgroup("terminal reporting", "resultlog plugin options")
|
||||
|
@ -14,6 +15,9 @@ def pytest_configure(config):
|
|||
resultlog = config.option.resultlog
|
||||
# prevent opening resultlog on slave nodes (xdist)
|
||||
if resultlog and not hasattr(config, 'slaveinput'):
|
||||
dirname = os.path.dirname(os.path.abspath(resultlog))
|
||||
if not os.path.isdir(dirname):
|
||||
os.makedirs(dirname)
|
||||
logfile = open(resultlog, 'w', 1) # line buffered
|
||||
config._resultlog = ResultLog(config, logfile)
|
||||
config.pluginmanager.register(config._resultlog)
|
||||
|
|
|
@ -474,6 +474,16 @@ def test_logxml_changingdir(testdir):
|
|||
assert result.ret == 0
|
||||
assert testdir.tmpdir.join("a/x.xml").check()
|
||||
|
||||
def test_logxml_makedir(testdir):
|
||||
"""--junitxml should automatically create directories for the xml file"""
|
||||
testdir.makepyfile("""
|
||||
def test_pass():
|
||||
pass
|
||||
""")
|
||||
result = testdir.runpytest("--junitxml=path/to/results.xml")
|
||||
assert result.ret == 0
|
||||
assert testdir.tmpdir.join("path/to/results.xml").check()
|
||||
|
||||
def test_escaped_parametrized_names_xml(testdir):
|
||||
testdir.makepyfile("""
|
||||
import pytest
|
||||
|
|
|
@ -180,6 +180,21 @@ def test_generic(testdir, LineMatcher):
|
|||
"x *:test_xfail_norun",
|
||||
])
|
||||
|
||||
def test_makedir_for_resultlog(testdir, LineMatcher):
|
||||
"""--resultlog should automatically create directories for the log file"""
|
||||
testdir.plugins.append("resultlog")
|
||||
testdir.makepyfile("""
|
||||
import pytest
|
||||
def test_pass():
|
||||
pass
|
||||
""")
|
||||
testdir.runpytest("--resultlog=path/to/result.log")
|
||||
lines = testdir.tmpdir.join("path/to/result.log").readlines(cr=0)
|
||||
LineMatcher(lines).fnmatch_lines([
|
||||
". *:test_pass",
|
||||
])
|
||||
|
||||
|
||||
def test_no_resultlog_on_slaves(testdir):
|
||||
config = testdir.parseconfig("-p", "resultlog", "--resultlog=resultlog")
|
||||
|
||||
|
|
12
tox.ini
12
tox.ini
|
@ -132,6 +132,18 @@ commands=
|
|||
{envpython} runtests_setup.py build --build-exe build
|
||||
{envpython} tox_run.py
|
||||
|
||||
[testenv:coveralls]
|
||||
changedir=testing
|
||||
basepython=python3.4
|
||||
deps =
|
||||
{[testenv]deps}
|
||||
coveralls
|
||||
commands=
|
||||
coverage run --source=_pytest {envdir}/bin/py.test
|
||||
coverage report -m
|
||||
coveralls
|
||||
passenv=COVERALLS_REPO_TOKEN
|
||||
|
||||
[pytest]
|
||||
minversion=2.0
|
||||
plugins=pytester
|
||||
|
|
Loading…
Reference in New Issue