<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Slash</title>
    <description>Slash is a testing framework written in Python for testing real world projects. It puts an emphasis on customizing and expanding the infrastructure, tailoring it to your needs
</description>
    <link>https://getslash.github.io/</link>
    <atom:link href="https://getslash.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 08 Mar 2018 09:23:58 +0000</pubDate>
    <lastBuildDate>Thu, 08 Mar 2018 09:23:58 +0000</lastBuildDate>
    <generator>Jekyll v3.6.2</generator>
    
      <item>
        <title>Slash 1.5 Released</title>
        <description>&lt;p&gt;We are pleased to announce the 1.5.0 release of the Slash testing framework! This release is a huge
one, and has been in the making for quite some time now.&lt;/p&gt;

&lt;p&gt;Release 1.5.0 has seen some major changes in areas relating to usability, both for users and for
framework developers. It also puts emphasis on integration with other tools and services (like
Backslash), making the integration process easier and more productive.&lt;/p&gt;

&lt;p&gt;Below are some of the changes that made it to this release.&lt;/p&gt;

&lt;h2 id=&quot;runtime-improvements&quot;&gt;Runtime Improvements&lt;/h2&gt;

&lt;h3 id=&quot;parametrization-labels&quot;&gt;Parametrization labels&lt;/h3&gt;

&lt;p&gt;One of the biggest problems with parameterization in Slash has been the lack of ability to &lt;em&gt;label&lt;/em&gt;
certain parameters. Take the following code as an example:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;nd&quot;&gt;@slash.parametrize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'param'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SmallObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BigObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()])&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The above would generate non-meaningful variation names in Slash 1.4
(e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;test_something(param=param0)&lt;/code&gt;), making it very hard to understand what actually ran after the
fact. The problem is compounded when reporting to services such as Backslash, in which it becomes
critical to be able to know the meaning of the different variations, not only by the value they use,
but by the “name” of any specific variation.&lt;/p&gt;

&lt;p&gt;Slash 1.5 solves this issue by introducing the ability to label parameters:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@slash.parametrize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'param'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;bp&quot;&gt;None&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;slash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'none'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;SmallObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;slash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'small'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;BigObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;//&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;slash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'big'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;param&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will generate more meaningful result names, like &lt;code class=&quot;highlighter-rouge&quot;&gt;test_something(param=big)&lt;/code&gt;, which will help
filtering it during the reporting phase.&lt;/p&gt;

&lt;p&gt;If you find the postfix syntax above not to your liking, you can also use &lt;code class=&quot;highlighter-rouge&quot;&gt;slash.param('label',
'value')&lt;/code&gt; instead.&lt;/p&gt;

&lt;h3 id=&quot;rerunning-previous-sessions&quot;&gt;Rerunning Previous Sessions&lt;/h3&gt;

&lt;p&gt;In addition to the previous functionality of resuming failed sessions through &lt;code class=&quot;highlighter-rouge&quot;&gt;slash resume&lt;/code&gt;, Slash
learned the &lt;code class=&quot;highlighter-rouge&quot;&gt;slash rerun&lt;/code&gt; command, allowing you to rerun a previous session - not only failed or
not-run tests.&lt;/p&gt;

&lt;h3 id=&quot;repeats-in-suite-files&quot;&gt;Repeats in Suite Files&lt;/h3&gt;

&lt;p&gt;Suite files can now have a &lt;code class=&quot;highlighter-rouge&quot;&gt;repeat: X&lt;/code&gt; marker to make the test run multiple times (Thanks
@pierreluctg!):&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# suite_file.txt
path/to/test_something.py # repeat: 10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;warning-control&quot;&gt;Warning Control&lt;/h3&gt;

&lt;p&gt;A new API for controlling warning capture, &lt;code class=&quot;highlighter-rouge&quot;&gt;slash.ignore_warnings&lt;/code&gt;, has been added. It allows you to
ignore warnings of specific category/origin, preventing Slash from capturing and reporting them:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;slash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ignore_warnings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;category&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MySpecificWarningClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'/specific/spammy/file.py'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is useful if your framework uses old or unmaintained third-party libraries which emit lots of warnings.&lt;/p&gt;

&lt;h3 id=&quot;selective-debugging&quot;&gt;Selective Debugging&lt;/h3&gt;

&lt;p&gt;Slash now supports the &lt;code class=&quot;highlighter-rouge&quot;&gt;--pdb-filter&lt;/code&gt; command-line parameter. This flag allows you to selectively
activate pdb for specific exceptions thrown during a session. It supports the same flexible syntax
as &lt;code class=&quot;highlighter-rouge&quot;&gt;-k&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ slash run ./tests --pdb --pdb-filter 'TimeoutException and not CommandTimeoutException`
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The above will enter PDB only for exceptions containing &lt;code class=&quot;highlighter-rouge&quot;&gt;TimeoutException&lt;/code&gt; but not for
&lt;code class=&quot;highlighter-rouge&quot;&gt;CommandTimeoutException&lt;/code&gt; errors.&lt;/p&gt;

&lt;h2 id=&quot;logging-improvements&quot;&gt;Logging Improvements&lt;/h2&gt;

&lt;h3 id=&quot;log-compression&quot;&gt;Log Compression&lt;/h3&gt;

&lt;p&gt;Setting the new &lt;code class=&quot;highlighter-rouge&quot;&gt;log.compression.enabled&lt;/code&gt; configuration path to &lt;code class=&quot;highlighter-rouge&quot;&gt;True&lt;/code&gt; makes Slash compress logs
on-the-fly (by default using the &lt;em&gt;brotli&lt;/em&gt; compression scheme). This is useful for projects emitting
large log files.&lt;/p&gt;

&lt;p&gt;To improve compression rates, logs use a relatively large compression window, which could delay the output of
recent log entries during runs. If this is a problem for you, we also support
&lt;code class=&quot;highlighter-rouge&quot;&gt;log.compression.use_rotating_raw_file&lt;/code&gt; to have a separate log file containing recent entries.&lt;/p&gt;

&lt;h3 id=&quot;core-log-level&quot;&gt;Core Log Level&lt;/h3&gt;

&lt;p&gt;Slash 1.5 separates the logging configuration used by tests and tools from the logging configuration
used by the Slash framework itself. While in some projects it makes sense to read logs coming from
both the testing project and Slash itself, in most cases developers aren’t interested in debugging
Slash itself. This is why we separated the log level used by Slash to a separate configuration
variable, &lt;code class=&quot;highlighter-rouge&quot;&gt;log.core_log_level&lt;/code&gt; - which is set to &lt;em&gt;WARNING&lt;/em&gt; by default. This allows you to use
&lt;code class=&quot;highlighter-rouge&quot;&gt;TRACE&lt;/code&gt; logs in your framework without having it spammed with Slash trace logs.&lt;/p&gt;

&lt;h3 id=&quot;debugging-local-variables&quot;&gt;Debugging Local Variables&lt;/h3&gt;

&lt;p&gt;By setting &lt;code class=&quot;highlighter-rouge&quot;&gt;log.traceback_variables&lt;/code&gt; to &lt;code class=&quot;highlighter-rouge&quot;&gt;True&lt;/code&gt;, traceback variable values will now be written to the
debug log upon failures/errors. This also include members of &lt;code class=&quot;highlighter-rouge&quot;&gt;self&lt;/code&gt;, which is useful to debug
utilities and framework components.&lt;/p&gt;

&lt;h3 id=&quot;the-highlights-log&quot;&gt;The Highlights Log&lt;/h3&gt;

&lt;p&gt;Slash 1.4 introduced the error log, which was a useful way to get only “important” logs about your
session. In 1.5 we decided to generalize that facility and renamed it to &lt;code class=&quot;highlighter-rouge&quot;&gt;highlights&lt;/code&gt; log. Its path
is controlled using the &lt;code class=&quot;highlighter-rouge&quot;&gt;log.highlights_subpath&lt;/code&gt;, and by default it will contain all errors emitted
during the session, but also additional logs marked with “highlight”:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;slash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;logger&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'This is an important event'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;extra&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'highlight'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;log-formatting-using-timestamps&quot;&gt;Log Formatting using Timestamps&lt;/h3&gt;

&lt;p&gt;You can now use &lt;code class=&quot;highlighter-rouge&quot;&gt;timestamp&lt;/code&gt; when formatting log file paths. This is a datetime object presenting the
creation time of the log file, so you can easily have test log directories containing the current
time by using:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;subpath&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'{timestamp:&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;Y&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;m&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;d-&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;H&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;S}.log'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;plugin-names&quot;&gt;Plugin Names&lt;/h2&gt;

&lt;p&gt;In Slash 1.4 and before, multi-worded plugin names caused annoyances in two contexts - command-line
activation and configuration management. Let’s say you had a plugin named &lt;code class=&quot;highlighter-rouge&quot;&gt;my_plugin&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;MyPlugin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PluginInterface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'my_plugin'&lt;/span&gt;
    
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_default_config&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'some'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'config'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This plugin’s configuration would be loaded into &lt;code class=&quot;highlighter-rouge&quot;&gt;plugin_config.my_plugin&lt;/code&gt; as expected, but
activating it would be cumbersome since it would require to pass &lt;code class=&quot;highlighter-rouge&quot;&gt;--with-my_plugin&lt;/code&gt; – which is
ugly. Changing its name to dash causes an issue with the configuration which is not easy to work
around.&lt;/p&gt;

&lt;p&gt;Slash 1.5 changes the recommended practice to use spaces (hence &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;my plugin&quot;&lt;/code&gt;). When plugins use
that notation, their configuration paths are now normalized using underscores, and activation uses
dashes as one would expect.&lt;/p&gt;

&lt;h2 id=&quot;miscellaneous&quot;&gt;Miscellaneous&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;When using the built-in notifications plugin, a notification will be sent whenever a session
enters a debugger. This is useful for fire-and-forget test runs.&lt;/li&gt;
  &lt;li&gt;The notifications plugin now has a new configuration flag - &lt;code class=&quot;highlighter-rouge&quot;&gt;--notify-only-on-failure&lt;/code&gt;, making it
notify only when tests fail. The emails it sends are now also formatted based on the session
result (e.g. changing the logo at the top of the message)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;PluginInterface.get_config&lt;/code&gt; has been deprecated and renamed to &lt;code class=&quot;highlighter-rouge&quot;&gt;PluginInterface.get_default_config&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;before_interactive_shell&lt;/code&gt;is a new hook allowing you to control the namespace used in interactive
tests&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;slash list tests&lt;/code&gt; now accepts the &lt;code class=&quot;highlighter-rouge&quot;&gt;--warnings-as-errors&lt;/code&gt; flag, making it treat warnings it encounters as errors&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;-X&lt;/code&gt; can now be used to turn off stop-on-error behavior. Useful if you have it on by default
through a configuration file&lt;/li&gt;
  &lt;li&gt;Location of the state files used by &lt;code class=&quot;highlighter-rouge&quot;&gt;slash resume&lt;/code&gt; can now be configured through
&lt;code class=&quot;highlighter-rouge&quot;&gt;run.resume_state_path&lt;/code&gt;. This is useful in cases where you cannot use &lt;em&gt;sqlite&lt;/em&gt; files in your
homedir (e.g. if your home directory is mounted through NFS)&lt;/li&gt;
  &lt;li&gt;Error objects now have their respective &lt;code class=&quot;highlighter-rouge&quot;&gt;exc_info&lt;/code&gt; attribute containing the exception info for the current info (if available). This deprecates the use of the &lt;code class=&quot;highlighter-rouge&quot;&gt;locals&lt;/code&gt;/&lt;code class=&quot;highlighter-rouge&quot;&gt;globals&lt;/code&gt; attributes on traceback frames.&lt;/li&gt;
  &lt;li&gt;During the execution of &lt;code class=&quot;highlighter-rouge&quot;&gt;error_added&lt;/code&gt; hooks, traceback frame objects now have &lt;code class=&quot;highlighter-rouge&quot;&gt;python_frame&lt;/code&gt;,
containing the original Pythonic frame that yielded them. Those are cleared soon after the hook is
called.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;use.X&lt;/code&gt; is now a shortcut for &lt;code class=&quot;highlighter-rouge&quot;&gt;use('x')&lt;/code&gt; for fixture annotations&lt;/li&gt;
  &lt;li&gt;The new &lt;code class=&quot;highlighter-rouge&quot;&gt;interruption_added&lt;/code&gt; hook is fired whenever a test or a session is interrupted (through
either a keyboard interrupt or a SIGTERM signal)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;assert_raises&lt;/code&gt; now raises &lt;code class=&quot;highlighter-rouge&quot;&gt;ExpectedExceptionNotCaught&lt;/code&gt; if exception wasn’t caught also allowing
inspection of the expected exception object&lt;/li&gt;
  &lt;li&gt;Native Python warnings are now emitted for WARNING-level Logbook logs&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;session.results.current&lt;/code&gt; is now always the same as &lt;code class=&quot;highlighter-rouge&quot;&gt;context.result&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;traceback_level&lt;/code&gt; configuration parameter has been renamed to &lt;code class=&quot;highlighter-rouge&quot;&gt;console_traceback_level&lt;/code&gt;, since it
effectively controls only the console output&lt;/li&gt;
  &lt;li&gt;Many, many other small bug fixes and improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s about it! Hope you find the new release useful, and as usual feel free to leave us feedback
or report issues/improvement suggestions!&lt;/p&gt;
</description>
        <pubDate>Thu, 08 Mar 2018 00:00:00 +0000</pubDate>
        <link>https://getslash.github.io/slash/2018/03/08/slash-1-5-released.html</link>
        <guid isPermaLink="true">https://getslash.github.io/slash/2018/03/08/slash-1-5-released.html</guid>
        
        
        <category>slash</category>
        
      </item>
    
      <item>
        <title>Coming up in Slash 1.1.0</title>
        <description>&lt;p&gt;Slash 1.1.0 is nearing completion and going into beta. Once we have confidence that the new version has no unexpected regressions, we’ll release it to the wild. In the meantime, we thought you might be interested to learn about the notable changes coming in this version, so we included them below:&lt;/p&gt;

&lt;h3 id=&quot;fixture-improvements&quot;&gt;Fixture Improvements&lt;/h3&gt;

&lt;p&gt;Slash now supports the &lt;code class=&quot;highlighter-rouge&quot;&gt;slash.exclude&lt;/code&gt; decorator to exclude specific parametrizations of specific tests:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;slash&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;SUPPORTED_SIZES&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;nd&quot;&gt;@slash.exclude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'car.size'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_car&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;car&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;...&lt;/span&gt;

&lt;span class=&quot;nd&quot;&gt;@slash.parametrize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'size'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SUPPORTED_SIZES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nd&quot;&gt;@slash.fixture&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;car&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;# &amp;lt;-- will be skipped for sizes 10 and 20&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;An additional feature is &lt;code class=&quot;highlighter-rouge&quot;&gt;this.test_start&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;this.test_end&lt;/code&gt; – two callbacks that fixtures can use to be notified when tests start or end while they’re active. This is especially useful for widely-scoped fixtures&lt;/p&gt;

&lt;h3 id=&quot;ability-to-control-test-sorting-during-collection&quot;&gt;Ability to Control Test Sorting During Collection&lt;/h3&gt;

&lt;p&gt;We’ve added the &lt;code class=&quot;highlighter-rouge&quot;&gt;tests_loaded&lt;/code&gt; hook to enable you to control how collected tests are preprocessed. This is especially useful for controlling execution order:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;@slash.hooks.tests_loaded.register&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;tests_loaded&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tests&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;enumerate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;reversed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tests&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)):&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__slash__&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;set_sort_key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;suite-file-filters&quot;&gt;Suite File Filters&lt;/h3&gt;

&lt;p&gt;Suite files can now contain filters on specific items via a comment beginning with &lt;code class=&quot;highlighter-rouge&quot;&gt;filter:&lt;/code&gt;, e.g:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/path/to/test.py # filter: x and not y``
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;logging-improvements&quot;&gt;Logging Improvements&lt;/h3&gt;

&lt;p&gt;Logs emitted before logging is configured are now buffered and emitted into the session log to ease debugging.&lt;/p&gt;

&lt;p&gt;Slash also now supports an optional “error log” – an additional path to a log file that will only record added errors or failures. This eases the investigation of failures given verbose tests/sessions.&lt;/p&gt;

&lt;h3 id=&quot;misc-changes&quot;&gt;Misc. Changes&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Tests skipped with &lt;code class=&quot;highlighter-rouge&quot;&gt;@slash.skipped&lt;/code&gt; now don’t perform setup or fixture expansion, saving a lot of time during execution&lt;/li&gt;
  &lt;li&gt;Added &lt;code class=&quot;highlighter-rouge&quot;&gt;slash list-plugins&lt;/code&gt; command to list active/installed plugins in the current environment/config&lt;/li&gt;
  &lt;li&gt;When recording exceptions through &lt;code class=&quot;highlighter-rouge&quot;&gt;handling_exceptions&lt;/code&gt;, Slash now properly reports the stack frames above the call site, through frame mocking&lt;/li&gt;
  &lt;li&gt;Many other small bugfixes and improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full changelog can be found at &lt;a href=&quot;http://slash.readthedocs.io/en/latest/changelog.html&quot;&gt;the usual place&lt;/a&gt;. Feel free to try the beta at our &lt;code class=&quot;highlighter-rouge&quot;&gt;develop&lt;/code&gt; branch on GitHub, and as usual feedback/issues/pull requests are very welcome!&lt;/p&gt;

&lt;p&gt;Happy Slashing!&lt;/p&gt;
</description>
        <pubDate>Wed, 02 Nov 2016 00:00:00 +0000</pubDate>
        <link>https://getslash.github.io/slash/2016/11/02/coming-up-in-slash-1.1.0.html</link>
        <guid isPermaLink="true">https://getslash.github.io/slash/2016/11/02/coming-up-in-slash-1.1.0.html</guid>
        
        
        <category>slash</category>
        
      </item>
    
      <item>
        <title>Slash 1.0 Released!</title>
        <description>&lt;p&gt;We’re pleased to announce the official 1.0.0 release of the Slash testing framework!&lt;/p&gt;

&lt;p&gt;This release marks over 3 years of hard work we’ve put into Slash and its surrounding ecosystem, continuously improving and adding more features and squashing more bugs.&lt;/p&gt;

&lt;p&gt;We’ve learned a lot from our experience building our testing solutions around Slash; We fine tuned the delicate balance between power and maintainability, learned how to make the infrastructure easier for newcomers (both developers and test authors) and we’ve also learned a lot from other testing tools out there.&lt;/p&gt;

&lt;p&gt;Release 1.0.0 is just the beginning for us. We’ll be spending the near future improving on the ecosystem around Slash (with Backslash in the lead), and we have many more cool features planned in store.&lt;/p&gt;

&lt;p&gt;We’d like to also thank the contributors who helped with pull requests and reporting bugs. Building a complex project such as Slash requires patience and we appreciate you bearing with us!&lt;/p&gt;

&lt;p&gt;As usual, feel free to report any issues and suggest ideas through GitHub – we’re always listening.&lt;/p&gt;

&lt;p&gt;Happy testing!&lt;/p&gt;

&lt;p&gt;The Slash Team&lt;/p&gt;

</description>
        <pubDate>Sun, 26 Jun 2016 08:36:52 +0000</pubDate>
        <link>https://getslash.github.io/slash/2016/06/26/slash-released.html</link>
        <guid isPermaLink="true">https://getslash.github.io/slash/2016/06/26/slash-released.html</guid>
        
        
        <category>slash</category>
        
      </item>
    
      <item>
        <title>Backslash 2.1.0 Released</title>
        <description>&lt;p&gt;We’re proud to announce the release of version 2.1.0 of the Backslash test reporting service.&lt;/p&gt;

&lt;p&gt;This release represents a major overhaul in both UI and functionality. Below are some highlights of the new release:&lt;/p&gt;

&lt;h2 id=&quot;major-ui-overhaul&quot;&gt;Major UI Overhaul&lt;/h2&gt;

&lt;p&gt;The Backslash UI has undergone a major facelift. The interface is clearer and cleaner, and it is easier to get around&lt;/p&gt;

&lt;h2 id=&quot;keyboard-shortcuts&quot;&gt;Keyboard Shortcuts&lt;/h2&gt;

&lt;p&gt;We added keyboard shortcuts to ease your workflow:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.&lt;/code&gt; opens quick-jump, allowing you to quickly jump to a specific user or subject under test&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;F&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;A&lt;/code&gt;, when in sessions or tests view, show only failed items or all items respectively&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;Esc&lt;/code&gt; takes you to the home screen&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;?&lt;/code&gt; shows all available shortcuts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve also introduced many many more subtle features and improvements to Backslash’s inner workings. We’re sure you’ll find them useful for your everyday workflow!&lt;/p&gt;

&lt;p&gt;We hope you enjoy this release as much as we enjoyed making it happen. Now we’re off to start working on v3.0.0, which has sooooo much more going for it!&lt;/p&gt;

&lt;p&gt;Read more at &lt;a href=&quot;/backslash&quot;&gt;our official Backlash page&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Wed, 13 Apr 2016 23:00:00 +0000</pubDate>
        <link>https://getslash.github.io/backslash/2016/04/13/backslash-2-1-0.html</link>
        <guid isPermaLink="true">https://getslash.github.io/backslash/2016/04/13/backslash-2-1-0.html</guid>
        
        
        <category>backslash</category>
        
      </item>
    
      <item>
        <title>Announcing Backslash!</title>
        <description>&lt;p&gt;We’re pleased to announce the first official release of Backslash - our open source test reporting service.&lt;/p&gt;

&lt;p&gt;Read more at &lt;a href=&quot;/backslash&quot;&gt;our official Backlash page&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Tue, 19 Jan 2016 23:31:33 +0000</pubDate>
        <link>https://getslash.github.io/backslash/2016/01/19/announcing-backslash.html</link>
        <guid isPermaLink="true">https://getslash.github.io/backslash/2016/01/19/announcing-backslash.html</guid>
        
        
        <category>backslash</category>
        
      </item>
    
  </channel>
</rss>
