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)
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)
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)
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)
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 ***')
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)
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'])
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'])
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)
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)
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)