Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
.. image:: https://badges.gitter.im/Join%20Chat.svg :alt: Join the chat at https://gitter.im/eisensheng/pytest-catchlog :target: https://gitter.im/eisensheng/pytest-catchlog?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
py.test plugin to catch log messages. This is a fork of pytest-capturelog
_.
.. _pytest-capturelog
: https://pypi.python.org/pypi/pytest-capturelog/
The pytest-catchlog
_ package may be installed with pip or easy_install::
pip install pytest-catchlog
easy_install pytest-catchlog
.. _pytest-catchlog
: http://pypi.python.org/pypi/pytest-catchlog/
If the plugin is installed log messages are captured by default and for each failed test will be shown in the same manner as captured stdout and stderr.
Running without options::
py.test test_pytest_catchlog.py
Shows failed tests like so::
----------------------- Captured stdlog call ----------------------
test_pytest_catchlog.py 26 INFO text going to logger
----------------------- Captured stdout call ----------------------
text going to stdout
----------------------- Captured stderr call ----------------------
text going to stderr
==================== 2 failed in 0.02 seconds =====================
By default each captured log message shows the module, line number, log level and message. Showing the exact module and line number is useful for testing and debugging. If desired the log format and date format can be specified to anything that the logging module supports.
Running pytest specifying formatting options::
py.test --log-format="%(asctime)s %(levelname)s %(message)s" \
--log-date-format="%Y-%m-%d %H:%M:%S" test_pytest_catchlog.py
Shows failed tests like so::
----------------------- Captured stdlog call ----------------------
2010-04-10 14:48:44 INFO text going to logger
----------------------- Captured stdout call ----------------------
text going to stdout
----------------------- Captured stderr call ----------------------
text going to stderr
==================== 2 failed in 0.02 seconds =====================
These options can also be customized through a configuration file::
[pytest]
log_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S
Although the same effect could be achieved through the addopts
setting,
using dedicated options should be preferred since the latter doesn't
force other developers to have pytest-catchlog
installed (while at
the same time, addopts
approach would fail with 'unrecognized arguments'
error). Command line arguments take precedence.
Further it is possible to disable reporting logs on failed tests completely with::
py.test --no-print-logs test_pytest_catchlog.py
Shows failed tests in the normal manner as no logs were captured::
----------------------- Captured stdout call ----------------------
text going to stdout
----------------------- Captured stderr call ----------------------
text going to stderr
==================== 2 failed in 0.02 seconds =====================
Inside tests it is possible to change the log level for the captured
log messages. This is supported by the caplog
funcarg::
def test_foo(caplog):
caplog.set_level(logging.INFO)
pass
By default the level is set on the handler used to catch the log messages, however as a convenience it is also possible to set the log level of any logger::
def test_foo(caplog):
caplog.set_level(logging.CRITICAL, logger='root.baz')
pass
It is also possible to use a context manager to temporarily change the log level::
def test_bar(caplog):
with caplog.at_level(logging.INFO):
pass
Again, by default the level of the handler is affected but the level of any logger can be changed instead with::
def test_bar(caplog):
with caplog.at_level(logging.CRITICAL, logger='root.baz'):
pass
Lastly all the logs sent to the logger during the test run are made available on the funcarg in the form of both the LogRecord instances and the final log text. This is useful for when you want to assert on the contents of a message::
def test_baz(caplog):
func_under_test()
for record in caplog.records:
assert record.levelname != 'CRITICAL'
assert 'wally' not in caplog.text
For all the available attributes of the log records see the
logging.LogRecord
class.
You can also resort to record_tuples
if all you want to do is to ensure,
that certain messages have been logged under a given logger name with a
given severity and message::
def test_foo(caplog):
logging.getLogger().info('boo %s', 'arg')
assert caplog.record_tuples == [
('root', logging.INFO, 'boo arg'),
]
List of notable changes between pytest-catchlog releases.
.. %UNRELEASED_SECTION%
1.2.2
_Released on 2016-01-24 UTC.
#30
_ #31
_ - Fix unicode
vs str
compatibility issues between Python2 and Python3.
(Thanks goes to @sirex
_ for reporting the issue and providing a fix!).. _#30: https://github.com/eisensheng/pytest-catchlog/issues/30 .. _#31: https://github.com/eisensheng/pytest-catchlog/issues/31 .. _@sirex: https://github.com/sirex
1.2.1
_Released on 2015-12-07.
caplog.records()
to be modified. Thanks to Eldar Abusalimov for the PR and Marco Nenciarini for reporting the issue... attention:: Deprecation warning: the following objects (i.e. functions, properties) are slated for removal in the next major release.
- ``caplog.at_level`` and ``caplog.set_level`` should be used instead of
``caplog.atLevel`` and ``caplog.setLevel``.
The methods ``caplog.atLevel`` and ``caplog.setLevel`` are still
available but deprecated and not supported since they don't follow
the PEP8 convention for method names.
- ``caplog.text``, ``caplog.records`` and
``caplog.record_tuples`` were turned into properties.
They still can be used as regular methods for backward compatibility,
but that syntax is considered deprecated and scheduled for removal in
the next major release.
Released on 2015-11-08.
__multicall__
use to support future Py.test releases.setLevel
and atLevel
to retain backward compatibility with pytest-capturelog. Also the members text
, records
and record_tuples
of the caplog
fixture can be used as properties now.Special thanks for this release goes to Eldar Abusalimov. He provided all of the changed features.
Released on 2015-06-07.
Released on 2014-12-08.
record_tuples
for comparing recorded log entries against expected
log entries with their logger name, severity and formatted message.FAQs
py.test plugin to catch log messages. This is a fork of pytest-capturelog.
We found that pytest-catchlog demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.