Framework for test development
Project description
============
Installation
============
::
pip install noseapp
==========
Extensions
==========
* `noseapp_daemon https://pypi.python.org/pypi/noseapp_daemon`_
* `noseapp_requests https://pypi.python.org/pypi/noseapp_requests`_
* noseapp_selenium - coming soon `alpha https://github.com/noseapp/noseapp_selenium`_
* noseapp_alchemy - coming soon `alpha https://github.com/noseapp/noseapp_alchemy`_
===========
Quick start
===========
app.py::
from random import randint
from noseapp import NoseApp
class ExampleExtesion(object):
name = 'rand'
def __init__(self, a, b):
self._a = a
self._b = b
def get_random(self):
return randint(self._a, self._b)
class MyTestApplication(NoseApp):
def initialize(self):
self.setup_example_ex()
self.setup_case_settings()
def setup_example_ex(self):
self.shared_extension(
cls=ExampleExtesion,
args=(1, 1000),
)
def setup_case_settings():
settings = {
'interactiv_mode': True # may be False :)
}
self.shared_data('settings', settings)
def create_app(config=None, argv=None, plugins=None):
return MyTestApplication(
config=config, argv=argv, plugins=plugins,
)
# create your app plagin
#
# from noseapp import AppPlugin
#
# class MyAppPlugin(AppPlugin):
#
# name = 'my-app-plugin'
#
# def ...(self):
# self.app....
#
# app = create_app(plugins=[MyAppPlugin()], argv=['--with-my-app-plugin'])
# use config module for configuration in your application
#
# app = create_app(config='etc.base')
# or
# app = create_app(config='/home/user/projects/example/etc/base.py')
#
# use config property inside application class
example_suite.py::
from noseapp import Suite
from noseapp import TestCase
from noseapp.case import step
from noseapp import ScreenPlayCase
suite = Suite(__name__, require=['rand', 'settings'])
# create your suite class and use default require
#
# class MySuite(Suite):
# DEFAULT_REQUIRE = ['settings']
@suite.register
class BasicExampleCase(TestCase):
rand = None # from MyTestApplication.setup_example_ex
def test(self):
rand_int = self.rend.get_random()
self.assertGreater(rand_int, 0)
@suite.register
class StepByStepCase(ScreenPlayCase):
settings = None # from MyTestApplication.setup_case_settings
def setUp(self):
self.USE_PROMPT = self.settings['interactive_mode']
@step(1, 'step description')
def step_one(self):
rand_int = self.rend.get_random()
self.assertGreater(rand_int, 0)
@step(2, 'description')
def ...
=====================
Usage noseapp runners
=====================
With multiprocessing:
* processes:
noseapp-manage run myproject.app:create_app --app-processes 2 (one suite === one process)
* processes and threads:
noseapp-manage run myproject.app:create_app --app-processes 4 --threads 2 (one suite == one process, one test == one thread)
* threads only:
noseapp-manage run myproject.app:create_app --threads 2 (one suite == one thread)
With gevent:
* noseapp-manage run myproject.app:create_app --gevent 4 (one suite == one greenlet)
* noseapp-manage run myproject.app:create_app --gevent 4 --greenlets 2 (one suite == one greenlet, one test == one greenlet)
============================
Creating your own extensions
============================
You will can create extensions for nose app as independent library. Usage redirect imports from noseapp.ext
Example::
# from your lib
from noseapp_my_ext import Extension
# With redirect import
from noseapp.ext.my_ext import Extension
Good luck and easy testing!
Installation
============
::
pip install noseapp
==========
Extensions
==========
* `noseapp_daemon https://pypi.python.org/pypi/noseapp_daemon`_
* `noseapp_requests https://pypi.python.org/pypi/noseapp_requests`_
* noseapp_selenium - coming soon `alpha https://github.com/noseapp/noseapp_selenium`_
* noseapp_alchemy - coming soon `alpha https://github.com/noseapp/noseapp_alchemy`_
===========
Quick start
===========
app.py::
from random import randint
from noseapp import NoseApp
class ExampleExtesion(object):
name = 'rand'
def __init__(self, a, b):
self._a = a
self._b = b
def get_random(self):
return randint(self._a, self._b)
class MyTestApplication(NoseApp):
def initialize(self):
self.setup_example_ex()
self.setup_case_settings()
def setup_example_ex(self):
self.shared_extension(
cls=ExampleExtesion,
args=(1, 1000),
)
def setup_case_settings():
settings = {
'interactiv_mode': True # may be False :)
}
self.shared_data('settings', settings)
def create_app(config=None, argv=None, plugins=None):
return MyTestApplication(
config=config, argv=argv, plugins=plugins,
)
# create your app plagin
#
# from noseapp import AppPlugin
#
# class MyAppPlugin(AppPlugin):
#
# name = 'my-app-plugin'
#
# def ...(self):
# self.app....
#
# app = create_app(plugins=[MyAppPlugin()], argv=['--with-my-app-plugin'])
# use config module for configuration in your application
#
# app = create_app(config='etc.base')
# or
# app = create_app(config='/home/user/projects/example/etc/base.py')
#
# use config property inside application class
example_suite.py::
from noseapp import Suite
from noseapp import TestCase
from noseapp.case import step
from noseapp import ScreenPlayCase
suite = Suite(__name__, require=['rand', 'settings'])
# create your suite class and use default require
#
# class MySuite(Suite):
# DEFAULT_REQUIRE = ['settings']
@suite.register
class BasicExampleCase(TestCase):
rand = None # from MyTestApplication.setup_example_ex
def test(self):
rand_int = self.rend.get_random()
self.assertGreater(rand_int, 0)
@suite.register
class StepByStepCase(ScreenPlayCase):
settings = None # from MyTestApplication.setup_case_settings
def setUp(self):
self.USE_PROMPT = self.settings['interactive_mode']
@step(1, 'step description')
def step_one(self):
rand_int = self.rend.get_random()
self.assertGreater(rand_int, 0)
@step(2, 'description')
def ...
=====================
Usage noseapp runners
=====================
With multiprocessing:
* processes:
noseapp-manage run myproject.app:create_app --app-processes 2 (one suite === one process)
* processes and threads:
noseapp-manage run myproject.app:create_app --app-processes 4 --threads 2 (one suite == one process, one test == one thread)
* threads only:
noseapp-manage run myproject.app:create_app --threads 2 (one suite == one thread)
With gevent:
* noseapp-manage run myproject.app:create_app --gevent 4 (one suite == one greenlet)
* noseapp-manage run myproject.app:create_app --gevent 4 --greenlets 2 (one suite == one greenlet, one test == one greenlet)
============================
Creating your own extensions
============================
You will can create extensions for nose app as independent library. Usage redirect imports from noseapp.ext
Example::
# from your lib
from noseapp_my_ext import Extension
# With redirect import
from noseapp.ext.my_ext import Extension
Good luck and easy testing!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
noseapp-1.0.6.tar.gz
(21.5 kB
view details)
File details
Details for the file noseapp-1.0.6.tar.gz
.
File metadata
- Download URL: noseapp-1.0.6.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 229403bbdb902c0ae7d4664d2f59818345005aec6f5947c29b36e8fac7956f21 |
|
MD5 | 04d7c58f3273219c42b890d42a596c40 |
|
BLAKE2b-256 | 0be4adb014f01bba499a4025eb8dd281eb2744fa6716d7b1f931351d669d2961 |