[Avocado-devel] RFC: Guidelines for categorizing tests

Narasimhan V sim at linux.vnet.ibm.com
Thu May 18 04:22:36 UTC 2017


Hi Cleber,

I agree the proposal.
Please find some of my comments in-line.

On 2017-05-18 03:19, Cleber Rosa wrote:
> Introduction
> ============
> 
> Avocado allows users to select tests to run based on free form "tags".
> These tags are given as "docstring directives", that is, special
> entries on a class or function docstring.

I like this kind of a proposal :-)

> 
> As a user of an Avocado based test suite, I'd see value in not 
> **having**
> to look at all the test tags before realizing that to not run tests 
> that
> require "super user" permissions I should run::
> 
>   $ avocado run test.py --filter-by-tags=-root
> 
> Instead of::
> 
>   $ avocado run test.py --filter-by-tags=-privileged
> 
> Not even that, by having different tests as part of the same job,
> the following very odd sequence of command line options may be
> needed::
> 
>   $ avocado run test.py test2.py --filter-by-tags=-root,-privileged
> 
> So the goal here is to let users familiar with a given Avocado based
> test, to have fair expectations when running another Avocado based
> tests.
> 
> This was initially going to be a documentation update, but I felt that
> it was not fair to make a formal proposal without without some initial
> brainstorming.
> 
> Proposal
> ========
> 
> To set the tone for my proposal, I'd like to make most things simple
> and easy, while allowing for "everything else" to be doable.
> 
> My general impression is that higher level information about the test
> itself and its requirements are going to be the most commonly used
> tags, so they must be easily set.  Some examples follow.
> 
> Simple (standalone) tags
> ------------------------
> 
> Tags by functional area:
> 
>  * cpu - Exercises a system's CPU
>  * net - Exercises a system's network devices or networking stack
>  * storage - Exercises a system's local storage
>  * fs - Exercises a system's file system
> 
> Tags by architecture:
> 
>  * x86_64 - Requires a x86_64 architecture
>  * ppc64 - Requries a ppc64
> 
> Tags by access privileges:
> 
>  * privileged - requires the test to be run with the most privileged,
>    unrestricted privileges.  For Linux systems, this usually means the
>    root account
> 

How are these tags going to be differentiated, ie, tag names that can be
common across types/areas.
Examples, if already on your mind, can help here.

> Composed (key:value) tags
> -------------------------
> 
> The more specific tags can be achieved by composing a predefined key
> with a value.  For instance, to tag a test as needing a specific
> CPU flag:
> 
>  * cpu_flag:vmx
> 
> Or a specific PCI device:
> 
>  * pci_id:8086:08b2
> 
> Or even a software package:
> 
>  * package:gcc
> 
> Or a package group altogether:
> 
>  * package_group:development-tools
> 
> Some examples
> -------------
> 
>  * ``cpu,x86_64`` - The test exercises the CPU and requires a
>    ``x86_64`` based platform
> 
>  * ``net,privileged,pci_id:14e4:1657`` - The test exercises either a
>    network device or the network stack, needs super user privileges
>    and a "Broadcom Limited NetXtreme BCM5719 Gigabit Ethernet PCIe
>    (rev 01)" device.

I would be interested in seeing how we can implement this.


> 
> Looking at test tags
> ====================
> 
> Currently, there's no way to actually list the test tags from the
> command line, alongside the test name themselves.  An RFE for fixing
> this has been filed at https://trello.com/c/NXrbKEJC .
> 
> Do users have to provide all the ``--filter-by-tags`` themselves?
> =================================================================
> 
> The test runner can certainly help here, getting system information
> when the job starts, and feeding them to the filtering.  This is yet
> another reason why coming up with a good set of guidelines for tagging
> tests is important.
> 
> In some ways, this can be seen similar to a dependency resolution
> mechanism for tests, only that at this point it will not resolve the
> requirements.  It will only filter out tests that can't (or shouldn't)
> be loaded on the current system.
> 
> Effectively, instead of many in-tests checks, and many SKIPs/CANCELs,
> the system information can be loaded once, and the only relevant tests
> will be part of the tests suite.
> 
> A list of the tests that were filtered out from the job test suite can
> certainly be a useful part of the job results.
> 
> As in every RFC, feedback is extremely welcome!

-- 
Regards
Narasimhan V




More information about the Avocado-devel mailing list