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!
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.