def test_generate(self): for i in range(1, 500, 10): suite = unittest.TestSuite() test = ComplexTest test.dataset_len = i test.dataset_product_len = 300 suite.addTest(test('test_case_3')) runner = DiscoverRunner() runner.run_suite(suite)
def test_buffer_mode_test_fail(self): runner = DiscoverRunner(buffer=True, verbose=0) with captured_stdout() as stdout, captured_stderr() as stderr: suite = runner.build_suite([ 'test_runner_apps.buffer.tests_buffer.WriteToStdoutStderrTestCase.test_fail', ]) runner.run_suite(suite) self.assertIn('Write to stderr.', stderr.getvalue()) self.assertIn('Write to stdout.', stdout.getvalue())
def test_buffer_mode_test_pass(self): runner = DiscoverRunner(buffer=True, verbosity=0) with captured_stdout() as stdout, captured_stderr() as stderr: suite = runner.build_suite([ "test_runner_apps.buffer.tests_buffer.WriteToStdoutStderrTestCase." "test_pass", ]) runner.run_suite(suite) self.assertNotIn("Write to stderr.", stderr.getvalue()) self.assertNotIn("Write to stdout.", stdout.getvalue())
def test_suite_result_with_failure(self): cases = [ (1, 'FailureTestCase'), (1, 'ErrorTestCase'), (0, 'ExpectedFailureTestCase'), (1, 'UnexpectedSuccessTestCase'), ] runner = DiscoverRunner(verbosity=0) for expected_failures, testcase in cases: with self.subTest(testcase=testcase): suite = runner.build_suite([ f'test_runner_apps.failures.tests_failures.{testcase}', ]) with captured_stderr(): result = runner.run_suite(suite) failures = runner.suite_result(suite, result) self.assertEqual(failures, expected_failures)
class TestRunnerTest(TestCase): def setUp(self): # Simple class that doesn't output to the standard output class StringIOTextRunner(TextTestRunner): def __init__(self, *args, **kwargs): kwargs['stream'] = StringIO() super().__init__(*args, **kwargs) self.test_runner = DiscoverRunner() self.test_runner.test_runner = StringIOTextRunner def tearDown(self): try: os.remove(RequestQueryCountConfig.get_setting('DETAIL_PATH')) except FileNotFoundError: pass try: os.remove(RequestQueryCountConfig.get_setting('SUMMARY_PATH')) except FileNotFoundError: pass def test_empty_test(self): class Test(TestCase): def test_foo(self): pass def test_bar(self): pass self.test_runner.setup_test_environment() self.test_runner.run_suite(TestLoader().loadTestsFromTestCase( testCaseClass=Test) ) self.test_runner.teardown_test_environment() # check for empty tests self.assertIsNotNone(RequestQueryCountManager, 'queries') self.assertIsInstance(RequestQueryCountManager.queries, TestResultQueryContainer) self.assertEqual(RequestQueryCountManager.queries.total, 0) # check if files are generated self.assertTrue(path.exists( RequestQueryCountConfig.get_setting('SUMMARY_PATH')) ) self.assertTrue(path.isfile( RequestQueryCountConfig.get_setting('SUMMARY_PATH')) ) self.assertTrue(path.exists( RequestQueryCountConfig.get_setting('DETAIL_PATH')) ) self.assertTrue(path.isfile( RequestQueryCountConfig.get_setting('DETAIL_PATH')) ) @classmethod def get_id(cls, test_class, method_name): return "{}.{}.{}".format(test_class.__module__, test_class.__qualname__, method_name) def test_runner_include_queries(self): class Test(TestCase): def test_foo(self): self.client.get('/url-1') self.test_runner.run_tests( None, TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) # Assert it ran one test self.assertEqual(len(RequestQueryCountManager.queries.queries_by_testcase), 1) test_foo_id = self.get_id(Test, 'test_foo') self.assertIn(test_foo_id, RequestQueryCountManager.queries.queries_by_testcase) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[test_foo_id].total, 1 ) def test_excluded_test(self): class Test(TestCase): @exclude_query_count() def test_foo(self): self.client.get('/url-1') def test_bar(self): self.client.get('/url-1') self.test_runner.run_suite( TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) # Assert test_foo has excluded queries self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_foo')].total, 0 ) # Assert test_bar has some queries self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_bar')].total, 1 ) def test_excluded_class(self): @exclude_query_count() class Test(TestCase): def test_foo(self): self.client.get('path-1') def test_bar(self): self.client.get('path-1') self.test_runner.run_suite( TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) # Assert test_foo has excluded queries self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_foo')].total, 0 ) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_bar')].total, 0 ) def test_conditional_exclude(self): class Test(TestCase): @exclude_query_count(path='url-2') def test_exclude_path(self): self.client.get('/url-1') self.client.post('/url-2') @exclude_query_count(method='post') def test_exclude_method(self): self.client.get('/url-1') self.client.post('/url-2') @exclude_query_count(count=2) def test_exclude_count(self): self.client.get('/url-1') self.client.post('/url-2') # succesive url are additive self.client.put('/url-3') self.client.put('/url-3') self.client.put('/url-3') self.test_runner.run_suite( TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_exclude_path')].total, 1 ) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_exclude_method')].total, 1 ) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_exclude_count')].total, 3 ) def test_nested_method_exclude(self): class Test(TestCase): @exclude_query_count(path='url-1') @exclude_query_count(method='post') @exclude_query_count(path='url-3') def test_foo(self): self.client.get('/url-1') self.client.post('/url-2') self.client.put('/url-3') self.test_runner.run_suite( TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_foo')].total, 0 ) def test_nested_class_method_exclude(self): @exclude_query_count(path='url-1') class Test(TestCase): @exclude_query_count(method='post') def test_foo(self): self.client.get('/url-1') self.client.post('/url-2') self.client.put('/url-3') self.test_runner.run_suite( TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_foo')].total, 1 ) def test_custom_setup_teardown(self): class Test(TestCase): def setUp(self): pass def tearDown(self): pass def test_foo(self): self.client.get('/url-1') self.test_runner.run_suite( TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) self.assertIn( self.get_id(Test, 'test_foo'), RequestQueryCountManager.queries.queries_by_testcase ) self.assertEqual( RequestQueryCountManager.queries.queries_by_testcase[ self.get_id(Test, 'test_foo')].total, 1 )
class TestMiddleWare(TestCase): def setUp(self): # Simple class that doesn't output to the standard output class StringIOTextRunner(TextTestRunner): def __init__(self, *args, **kwargs): kwargs['stream'] = StringIO() super().__init__(*args, **kwargs) self.test_runner = DiscoverRunner() self.test_runner.test_runner = StringIOTextRunner def tearDown(self): try: os.remove(RequestQueryCountConfig.get_setting('DETAIL_PATH')) except FileNotFoundError: pass try: os.remove(RequestQueryCountConfig.get_setting('SUMMARY_PATH')) except FileNotFoundError: pass def test_middleware_called(self): with mock.patch('test_query_counter.middleware.Middleware', new=MagicMock(wraps=Middleware)) as mocked: self.client.get('/url-1') self.assertEqual(mocked.call_count, 1) def test_case_injected_one_test(self): class Test(TestCase): def test_foo(self): self.client.get('/url-1') self.test_runner.setup_test_environment() self.test_runner.run_suite(TestLoader().loadTestsFromTestCase( testCaseClass=Test)) self.test_runner.teardown_test_environment() self.assertEqual(RequestQueryCountManager.queries.total, 1) def test_case_injected_two_tests(self): class Test(TestCase): def test_foo(self): self.client.get('/url-1') def test_bar(self): self.client.get('/url-2') self.test_runner.run_suite( TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) self.assertEqual(RequestQueryCountManager.queries.total, 2) @override_settings(TEST_QUERY_COUNTER={'ENABLE': False}) def test_case_disable_setting(self): class Test(TestCase): def test_foo(self): self.client.get('/url-1') def test_bar(self): self.client.get('/url-2') self.test_runner.run_tests( None, TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) self.assertIsNone(RequestQueryCountManager.queries) @override_settings(TEST_QUERY_COUNTER={'ENABLE': False}) def test_disabled(self): mock_get_response = object() with self.assertRaises(MiddlewareNotUsed): Middleware(mock_get_response) def test_json_exists(self): class Test(TestCase): def test_foo(self): self.client.get('/url-1') self.assertFalse(path.exists( RequestQueryCountConfig.get_setting('DETAIL_PATH')) ) self.test_runner.run_tests( None, TestLoader().loadTestsFromTestCase(testCaseClass=Test) ) self.assertTrue(path.exists( RequestQueryCountConfig.get_setting('DETAIL_PATH')) )
import unittest from django.test.utils import setup_test_environment, setup_databases from django.test.runner import DiscoverRunner setup_test_environment() names = setup_databases(verbosity=1, interactive=True) runner = DiscoverRunner() suite = unittest.TestLoader().loadTestsFromTestCase(MyTestCase) result = runner.run_suite(suite) runner.suite_result(suite, result)