def test_setup_not_dict(self): @setup() async def _worker_setup(num, args): return 1 @scenario(weight=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_global_setup_exception(self): @global_setup() def _setup(args): raise Exception("bleh") @scenario(weight=100) async def test_two(session): os.kill(os.getpid(), signal.SIGTERM) args = self.get_args() runner = Runner(args) self.assertRaises(Exception, runner)
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 test_setup_exception(self): @setup() async def _worker_setup(num, 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["OK"], 0)
def test_shutdown_exception(self): @teardown() def _worker_teardown(num): raise Exception("bleh") @global_teardown() def _teardown(): 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["OK"], 1)
def _runner(self, console, screen=None): res = [] _events = [] @events() async def _event(event, **data): _events.append(event) @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(weight=50) async def test_one(session): async with session.get("http://localhost:8888") as resp: await resp.text() @scenario(weight=100) async def test_two(session): async with session.get("http://localhost:8888") as resp: await resp.text() @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 if not args.sizing: args.max_runs = 5 results = Runner(args)() self.assertTrue(results["OK"] > 0) self.assertEqual(results["FAILED"], 0) self.assertEqual(res, ["SETUP", "0", "SESSION", "SESSION_TEARDOWN"]) self.assertTrue(len(_events) > 0)
def _runner(self, console, screen=None): res = [] _events = [] @events() async def _event(event, **data): _events.append(event) @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(weight=50) async def test_one(session): async with session.get('http://localhost:8888') as resp: await resp.text() @scenario(weight=100) async def test_two(session): async with session.get('http://localhost:8888') as resp: await resp.text() @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)() self.assertTrue(results['OK'] > 0) self.assertEqual(results['FAILED'], 0) self.assertEqual(res, ['SETUP', '0', 'SESSION', 'SESSION_TEARDOWN']) self.assertTrue(len(_events) > 0)
def test_shutdown(self): res = [] @teardown() def _worker_teardown(num): res.append("BYE WORKER") @global_teardown() def _teardown(results): res.append("BYE") @scenario(weight=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 test_shutdown(self): res = [] @teardown() def _worker_teardown(num): res.append('BYE WORKER') @global_teardown() def _teardown(): res.append('BYE') @scenario(weight=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 _multiprocess(self, console, nosetup=False): res = [] if not nosetup: @setup() async def setuptest(num, args): res.append('0') @scenario(weight=50) async def test_one(session): pass @scenario(weight=100) async def test_two(session): pass args = self.get_args() args.processes = 2 args.workers = 5 args.console = console results = Runner(args)() self.assertTrue(results['OK'] > 0) self.assertEqual(results['FAILED'], 0)
def run(args, stream=None): if stream is None: stream = sys.stdout args.shared_console = SharedConsole(interval=args.console_update, stream=stream) if not args.quiet: direct_print(stream, HELLO) if args.use_extension: for extension in args.use_extension: if not args.quiet: direct_print(stream, "Loading extension %r" % extension) if os.path.exists(extension): spec = spec_from_file_location("extension", extension) module = module_from_spec(spec) spec.loader.exec_module(module) else: try: import_module(extension) except (ImportError, ValueError) as e: direct_print(stream, "Cannot import %r" % extension) direct_print(stream, "\n".join(printable_error(e))) sys.exit(1) if os.path.exists(args.scenario): sys.path.insert(0, os.path.dirname(args.scenario)) spec = spec_from_file_location("loadtest", args.scenario) module = module_from_spec(spec) spec.loader.exec_module(module) else: try: module = import_module(args.scenario) except (ImportError, ValueError) as e: direct_print(stream, "Cannot import %r" % args.scenario) direct_print(stream, "\n".join(printable_error(e))) sys.exit(1) sys.path.insert(0, os.path.dirname(module.__file__)) if len(get_scenarios()) == 0: direct_print(stream, "You need at least one scenario. No scenario was found.") direct_print(stream, "A scenario with a weight of 0 is ignored") sys.exit(1) if args.verbose > 0 and args.quiet: direct_print(stream, "You can't use -q and -v at the same time") sys.exit(1) if args.single_mode and args.single_run: direct_print(stream, "You can't use --singlee-mode and --single-run") sys.exit(1) if args.single_mode: if get_scenario(args.single_mode) is None: direct_print( stream, "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.0 else: res[k] = v.value return res res = _dict(res) if not args.quiet: if args.sizing: if res["REACHED"] == 1: direct_print(stream, _SIZING % res) else: direct_print(stream, "Sizing was not finished. (interrupted)") else: direct_print(stream, "SUCCESSES: %(OK)d | FAILURES: %(FAILED)d\r" % res) direct_print(stream, "*** Bye ***") if args.fail is not None and res["FAILED"] >= args.fail: sys.exit(1) return res
def run(args): args.shared_console = SharedConsole(interval=args.console_update) if not args.quiet: print(HELLO) if args.use_extension: for extension in args.use_extension: if not args.quiet: print("Loading extension %r" % extension) if os.path.exists(extension): spec = spec_from_file_location("extension", extension) module = module_from_spec(spec) spec.loader.exec_module(module) else: try: import_module(extension) except (ImportError, ValueError) as e: print('Cannot import %r' % extension) print('\n'.join(printable_error(e))) sys.exit(1) 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) as e: print('Cannot import %r' % args.scenario) print('\n'.join(printable_error(e))) 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 ***')