Skip to main content

It makes combinations covering pairs for pairwise testing.

Project description

https://badge.fury.io/py/covertable.svg https://circleci.com/gh/walkframe/covertable.svg?style=shield https://codecov.io/gh/walkframe/covertable/branch/master/graph/badge.svg https://img.shields.io/badge/code%20style-black-000000.svg https://img.shields.io/badge/License-Apache%202.0-blue.svg

Requirements

  • Python: 3.3 or later.

    • Tested with 3.7

Installation

$ pip install covertable

Usage

Just import covertable and call make function.

>>> from covertable import make, sorters, criteria

>>> machine_list = ['iphone', 'pixel']
>>> os_list = ['ios', 'android']
>>> browser_list = ['FireFox', 'Chrome', 'Safari']
>>> # list input and output
>>> make(
...     [machine_list, os_list, browser_list],  # list factors
...     length=2,  # default: 2
...     sorter=sorters.random,  # default: sorters.hash
...     criterion=criteria.simple,  # default: criteria.greedy
...     seed=100,  # default: ''
...     pre_filter=lambda row: not(row[1] == 'android' and row[0] != 'pixel') and not(row[1] == 'ios' and row[0] != 'iphone'),  # default: None
... )
[
  ['pixel', 'android', 'Safari'],
  ['iphone', 'ios', 'Chrome'],
  ['iphone', 'ios', 'Safari'],
  ['pixel', 'android', 'Chrome'],
  ['pixel', 'android', 'FireFox'],
  ['iphone', 'ios', 'FireFox']
]


>>> # dict input and output
>>> make(
...     {'machine': machine_list, 'os': os_list, 'browser': browser_list},  # dict factors
...     length=2,  # default: 2
...     tolerance=3,  # default: 0
...     post_filter=lambda row: not(row['os'] == 'android' and row['machine'] != 'pixel') and not(row['os'] == 'ios' and row['machine'] != 'iphone'),  # default: None
... )
[
  {'machine': 'pixel', 'browser': 'Chrome', 'os': 'android'},
  {'machine': 'pixel', 'browser': 'FireFox', 'os': 'android'},
  {'machine': 'iphone', 'os': 'ios', 'browser': 'Chrome'},
  {'os': 'ios', 'browser': 'FireFox', 'machine': 'iphone'}
]

Options

covertable.make function has options as keyword argument.

All options are omittable.

length

It means length of pair to meet. (default: 2)

The more it increases, the more number of combinations increases.

sorter

Combinations depend on the order of spreading all over the rows.

You can choice a sorter from the following:

sorters.random:

This makes different combinations everytime. (fastest)

sorters.hash:

This makes combinations depending on hash of the pair and seed. (default)

  • It receives seed and useCache options.

    • seed option decides the order of storing from unstored pairs, therefore it outputs the same result every time when number of factors and seed are the same.

    • useCache option decide if using cache of hash or not. (default: true)

      • It is around 10% faster than setting useCache off.

criterion

criteria.simple:

This extracts any pairs that can be stored into the processing row.

criteria.greedy:

This attempts to make most efficient combinations. (default)

  • These combinations are not always shorter than simple criterion.

  • It receives tolerance option.

pre_filter

This means a function to filter beforehand.

It receives an argument row as object type.

When the function returns false, the row combination will not registered.

  • If factors type is Array, you should specify an index at the subscript like row => row[1] < 6.

  • If factors type is Object, you should specify a key at the subscript like row => row['month'] < 6

post_filter

This means a function to filter later.

Usage is the same as preFilter, only the difference is the timing that it is called. It will delete rows not matched this function at the last.

Development

# preparation
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install -r dev_requirements.txt

# testing
(venv) $ tox # -e py37 -e cov -e black

Publish

(venv) $ python setup.py sdist bdist_wheel
(venv) $ twine upload --repository pypi dist/*

More info

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

covertable-2.0.1.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

covertable-2.0.1-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file covertable-2.0.1.tar.gz.

File metadata

  • Download URL: covertable-2.0.1.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.3

File hashes

Hashes for covertable-2.0.1.tar.gz
Algorithm Hash digest
SHA256 81f3a239b13893cae2bda8c6bdb86794377f2ce17ae82d31936c997d38cfeb8d
MD5 b9d50b475f0e4fc0e8db118ebb914b3c
BLAKE2b-256 51fe8445adf1f030c8c8e61bc0e76c84b4ae1d447a5bd54218451b44e9688cc3

See more details on using hashes here.

File details

Details for the file covertable-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: covertable-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.3

File hashes

Hashes for covertable-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 594cb74c2bf0e2b3a6ef4d1f2ba8c51bac1b4c4132780a1f72e7b7ee82e5cd4f
MD5 44ae14a3dfd9e302ad0e27a3aaaa26f6
BLAKE2b-256 27c2f49447a011ea24beb2fcd0b8d21c16882c91182709776bfdd2479e55e373

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page