import unittest
class TestMetricsKPIs(unittest.TestCase):
def setUp(self):
# Sample test results data: list of statuses
self.test_results = [
'Passed', 'Failed', 'Passed', 'Blocked', 'Passed',
'Failed', 'Passed', 'Passed', 'Blocked', 'Passed'
]
self.total = len(self.test_results)
def test_metrics_calculation(self):
passed_count = self.test_results.count('Passed')
failed_count = self.test_results.count('Failed')
blocked_count = self.test_results.count('Blocked')
pass_percentage = (passed_count / self.total) * 100
fail_percentage = (failed_count / self.total) * 100
block_percentage = (blocked_count / self.total) * 100
# Assertions
self.assertEqual(self.total, 10, "Total test cases should be 10")
self.assertEqual(passed_count, 6, "Passed test cases should be 6")
self.assertEqual(failed_count, 2, "Failed test cases should be 2")
self.assertEqual(blocked_count, 2, "Blocked test cases should be 2")
self.assertAlmostEqual(pass_percentage, 60.0, places=1, msg="Pass percentage should be 60.0")
self.assertAlmostEqual(fail_percentage, 20.0, places=1, msg="Fail percentage should be 20.0")
self.assertAlmostEqual(block_percentage, 20.0, places=1, msg="Block percentage should be 20.0")
if __name__ == '__main__':
unittest.main()The setUp method prepares the test data, a list of test case results with statuses.
We count how many test cases passed, failed, and were blocked using the count() method.
Then, we calculate the percentages by dividing each count by the total number of test cases and multiplying by 100.
Assertions check that counts and percentages match expected values. We use assertEqual for counts and assertAlmostEqual for percentages to allow small rounding differences.
This keeps the test clear, simple, and easy to maintain.