Esempio n. 1
0
def run(args):
    if not args.quiet:
        log('**** Molotov v%s. Happy breaking! ****' % __version__, pid=None)
    if os.path.exists(args.scenario):
        spec = spec_from_file_location("loadtest", args.scenario)
        module = module_from_spec(spec)
        spec.loader.exec_module(module)
    else:
        try:
            import_module(args.scenario)
        except (ImportError, ValueError):
            print('Cannot import %r' % args.scenario)
            sys.exit(1)

    if len(get_scenarios()) == 0:
        print('You need at least one scenario. No scenario was found.')
        print('A scenario with a weight of 0 is ignored')
        sys.exit(1)

    if args.verbose and args.quiet:
        print("You can't use -q and -v at the same time")
        sys.exit(1)

    if args.verbose and not args.console:
        print("You have to be in console mode (-c) to use -v")
        sys.exit(1)

    res = runner(args, screen=ui.init_screen)
    if not args.quiet:
        log('', pid=False)
    log('%(OK)d OK, %(FAILED)d Failed' % res, pid=False)
Esempio n. 2
0
    def test_setup_not_dict(self):
        @setup()
        async def _worker_setup(num, args):
            return 1

        @scenario(100)
        async def test_two(session):
            os.kill(os.getpid(), signal.SIGTERM)

        args = self.get_args()
        results = runner(args)
        self.assertEqual(results['OK'], 0)
Esempio n. 3
0
    def test_setup_exception(self):
        @setup()
        async def _worker_setup(num, args):
            raise Exception('bleh')

        @scenario(100)
        async def test_two(session):
            os.kill(os.getpid(), signal.SIGTERM)

        args = self.get_args()
        results = runner(args)
        self.assertEqual(results['OK'], 0)
Esempio n. 4
0
    def test_teardown_exception(self):
        @teardown()
        def _teardown(args):
            raise Exception('bleh')

        @scenario(weight=100)
        async def test_two(session):
            os.kill(os.getpid(), signal.SIGTERM)

        args = self.get_args()
        results = runner(args)
        self.assertEqual(results['FAILED'], 0)
Esempio n. 5
0
def run(args):
    args.shared_console = SharedConsole(interval=args.console_update)
    if not args.quiet:
        args.shared_console.print(HELLO)

    if os.path.exists(args.scenario):
        spec = spec_from_file_location("loadtest", args.scenario)
        module = module_from_spec(spec)
        spec.loader.exec_module(module)
    else:
        try:
            import_module(args.scenario)
        except (ImportError, ValueError):
            print('Cannot import %r' % args.scenario)
            sys.exit(1)

    if len(get_scenarios()) == 0:
        print('You need at least one scenario. No scenario was found.')
        print('A scenario with a weight of 0 is ignored')
        sys.exit(1)

    if args.verbose > 0 and args.quiet:
        print("You can't use -q and -v at the same time")
        sys.exit(1)

    if args.single_mode:
        if get_scenario(args.single_mode) is None:
            print("Can't find %r in registered scenarii" % args.single_mode)
            sys.exit(1)

    res = runner(args)

    def _dict(counters):
        res = {}
        for k, v in counters.items():
            if k == 'RATIO':
                res[k] = float(v.value) / 100.
            else:
                res[k] = v.value
        return res

    res = _dict(res)

    if not args.quiet:
        if args.sizing:
            if res['REACHED'] == 1:
                print(_SIZING % res)
            else:
                print('Sizing was not finished. (interrupted)')
        else:
            print('SUCCESSES: %(OK)d | FAILURES: %(FAILED)d\r' % res)
        print('*** Bye ***')
Esempio n. 6
0
    def test_session_shutdown_exception(self):
        @teardown_session()
        async def _teardown_session(wid, session):
            raise Exception('bleh')

        @global_teardown()
        def _teardown():
            raise Exception('bleh')

        @scenario(100)
        async def test_two(session):
            os.kill(os.getpid(), signal.SIGTERM)

        args = self.get_args()
        results = runner(args)
        self.assertEqual(results['OK'], 1)
Esempio n. 7
0
    def test_shutdown(self):
        res = []

        @teardown()
        def _worker_teardown(num):
            res.append('BYE WORKER')

        @global_teardown()
        def _teardown():
            res.append('BYE')

        @scenario(100)
        async def test_two(session):
            os.kill(os.getpid(), signal.SIGTERM)

        args = self.get_args()
        results = runner(args)

        self.assertEqual(results['OK'], 1)
        self.assertEqual(results['FAILED'], 0)
        self.assertEqual(res, ['BYE WORKER', 'BYE'])
Esempio n. 8
0
    def _runner(self, console, screen=None):
        res = []

        @global_setup()
        def init(args):
            res.append('SETUP')

        @setup_session()
        async def _session(wid, session):
            session.some = 1
            res.append('SESSION')

        @setup()
        async def setuptest(num, args):
            res.append('0')

        @scenario(50)
        async def test_one(session):
            pass

        @scenario(100)
        async def test_two(session):
            pass

        @teardown_session()
        async def _teardown_session(wid, session):
            self.assertEqual(session.some, 1)
            res.append('SESSION_TEARDOWN')

        args = self.get_args()
        args.console = console
        args.verbose = 1
        results = runner(args, screen=screen)
        self.assertTrue(results['OK'] > 0)
        self.assertEqual(results['FAILED'], 0)
        self.assertEqual(res, ['SETUP', '0', 'SESSION', 'SESSION_TEARDOWN'])
Esempio n. 9
0
    def _multiprocess(self, console, nosetup=False):
        res = []

        if not nosetup:

            @setup()
            async def setuptest(num, args):
                res.append('0')

        @scenario(50)
        async def test_one(session):
            pass

        @scenario(100)
        async def test_two(session):
            pass

        args = self.get_args()
        args.processes = 2
        args.workers = 5
        args.console = console
        results = runner(args, screen=init_screen)
        self.assertTrue(results['OK'] > 0)
        self.assertEqual(results['FAILED'], 0)
Esempio n. 10
0
    def test_runner_multiprocess(self):
        res = []

        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)

        @setup()
        async def setuptest(num, args):
            res.append('0')

        @scenario(50)
        async def test_one(session):
            pass

        @scenario(100)
        async def test_two(session):
            pass

        args = self.get_args()
        args.processes = 2
        args.workers = 5
        results = runner(args)
        self.assertTrue(results['OK'] > 0)
        self.assertEqual(results['FAILED'], 0)
Esempio n. 11
0
    def test_runner(self):
        res = []

        @global_setup()
        def init(args):
            res.append('SETUP')

        @setup()
        async def setuptest(num, args):
            res.append('0')

        @scenario(50)
        async def test_one(session):
            pass

        @scenario(100)
        async def test_two(session):
            pass

        args = self.get_args()
        results = runner(args)
        self.assertTrue(results['OK'] > 0)
        self.assertEqual(results['FAILED'], 0)
        self.assertEqual(len(res), 2)