python之setUp,setUpClass,及setUpModule的区别

mac2024-03-29  33

分装加减乘除函数

class MathOperation: """ 定义数学运算 """ def __init__(self,first_num,second_num): self.first_num,self.second_num = first_num,second_num def add(self): return self.first_num + self.second_num def minus(self): return self.first_num - self.second_num def multiply(self): return self.first_num * self.second_num def divide(self): try: return round(self.first_num/self.second_num,2) except ZeroDivisionError: return "出现除0错误"

1.setUp 每个测试用例执行之前会执行

# 先导入模块 import unittest import inspect # 导入自定义模块 from lin.math_operation import MathOperation as MathOper class TestMulti(unittest.TestCase): """ 测试两数相乘 """ def setUp(self): """ 重写父类的方法 每个测试用例执行之前会执行 :return: """ print("{:=^40s}".format("开始执行测试用例")) self.file_name = "record_run_result1.txt" self.file = open(self.file_name,mode="a",encoding="utf-8") self.file.write("{:=^40s}\n".format("开始执行测试用例")) def tearDown(self): """ 每个测试用例执行之后会执行 :return: """ print("{:=^40s}\n".format("测试用例执行结束")) self.file.write("{:=^40s}\n\n".format("测试用例执行结束")) self.file.close() def test_two_neg_multi(self): """ 1.测试两个负数相乘 :return: """ # # 定义一个文件路径 # file_name = "record_run_result.txt" # print("打开[{}]文件".format(file_name)) # file = open(file_name,mode="a",encoding="utf-8") # 以追加的模式打开一个文件夹 # self.file.write("{:=^40s}\n".format("开始执行用例")) # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(-3,-4).multiply() # 定义期望结果 expect_result = 12 # 验证实际结果与预期结果是否一致 msg = "测试两个负数相乘" try: self.assertEqual(expect_result,real_result,msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg,"Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg,"Pass")) # finally: # # 用例执行结束,("关闭[{}]文件".format(file_name)) # file.write("{:=^40s}\n\n".format("用例执行结束")) # file.close() def test_neg_pos_multi(self): """ 2.测试一个负数与一个正数相乘 :return: """ # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(-3,4).multiply() # 定义期望结果 expect_result = -12 # 验证实际结果与预期结果是否一致 msg="测试一个负数与一个正数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg, "Pass")) def test_two_pos_multi(self): """ 测试两个正数相乘 :return: """ # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(3,4).multiply() # 定义期望结果 expect_result = 12 # 验证实际结果与预期结果是否一致 msg="测试两个负数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg, "Pass")) def test_zero_multi(self): """ 4.测试两个0数相乘 :return: """ # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(0,0).multiply() # 定义期望结果 expect_result = 0 # 验证实际结果与预期结果是否一致 msg="测试两个0数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg, "Pass")) class TestDivide(unittest.TestCase): """ 测试两数相除 """ def setUp(self): """ 重写父类的方法 在每个测试类执行之前运行 :return: """ self.file_name = "record_run_result1.txt" self.file = open(self.file_name,mode="a",encoding="utf-8") self.file.write("{:=^40s}\n".format("开始执行测试用例")) def tearDown(self): """ 在每个测试类执行之后运行 :return: """ self.file.write("{:=^40s}\n\n".format("测试用例执行结束")) self.file.close() def test_two_neg_divi(self): """ 测试两个正数相除 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) # 获取实际结果 real_result = MathOper(8,4).divide() # 定义期望结果 except_result = 2 msg = "测试两个正数相除" try: self.assertEqual(except_result,real_result,msg=msg) except AssertionError as e: self.file.write("{},执行结果为:{},\n具体异常为{}\n".format(msg,"Fail")) raise e else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_neg_pos_divi(self): """ 测试一个正数一个负数相除 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(8,-2).divide() except_result = -4 msg = "测试一个正数一个负数相除" try: self.assertEqual(except_result,real_result,msg=msg) except AssertionError as e: self.file.write("{},执行的结果为:{}\n,具体异常为{}\n".format(msg,"Fail",e)) raise e else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_two_pos_divi(self): """ 测试两个负数相除 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(-8,-2).divide() except_result = 4 msg = "测试两个负数相除" try: self.assertEqual(except_result,real_result,msg) except AssertionError as e: self.file.write("{},执行的结果为:{}\n具体异常为{}\n".format(msg,"Fali",e)) raise e else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_zero_divi(self): """ 测试除0错误 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(8,0).divide() except_result = "出现除0错误" msg="测试除0错误" try: self.assertEqual(except_result,real_result,msg) except AssertionError as e: self.file.write("{},执行的结果为:{}\n具体异常为{}\n".format(msg,"Fail",e)) else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) if __name__ == '__main__': unittest.main()

2.setUpClass 在每个测试类执行之前运行

# 先导入模块 import unittest import inspect # 导入自定义模块 from lin.math_operation import MathOperation as MathOper class TestMulti(unittest.TestCase): """ 测试两数相乘 """ @classmethod def setUpClass(cls): """ 在每个测试类执行之前运行 :return: """ cls.file_name = "record_run_result1.txt" cls.file = open(cls.file_name,mode="a",encoding="utf-8") cls.file.write("{:=^40s}\n".format("开始执行测试用例")) # def setUp(self): # """ # 重写父类的方法 # 每个测试用例执行之前会执行 # :return: # """ # print("{:=^40s}".format("开始执行测试用例")) # self.file_name = "record_run_result1.txt" # self.file = open(self.file_name,mode="a",encoding="utf-8") # self.file.write("{:=^40s}\n".format("开始执行测试用例")) @classmethod def tearDownClass(cls): """ 在每个测试类执行之后运行 :return: """ cls.file.write("{:=^40s}\n\n".format("测试用例执行结束")) cls.file.close() # def tearDown(self): # """ # 每个测试用例执行之后会执行 # :return: # """ # print("{:=^40s}\n".format("测试用例执行结束")) # self.file.write("{:=^40s}\n\n".format("测试用例执行结束")) # self.file.close() def test_two_neg_multi(self): """ 1.测试两个负数相乘 :return: """ # # 定义一个文件路径 # file_name = "record_run_result.txt" # print("打开[{}]文件".format(file_name)) # file = open(file_name,mode="a",encoding="utf-8") # 以追加的模式打开一个文件夹 # self.file.write("{:=^40s}\n".format("开始执行用例")) # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(-3,-4).multiply() # 定义期望结果 expect_result = 12 # 验证实际结果与预期结果是否一致 msg = "测试两个负数相乘" try: self.assertEqual(expect_result,real_result,msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg,"Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg,"Pass")) # finally: # # 用例执行结束,("关闭[{}]文件".format(file_name)) # file.write("{:=^40s}\n\n".format("用例执行结束")) # file.close() def test_neg_pos_multi(self): """ 2.测试一个负数与一个正数相乘 :return: """ # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(-3,4).multiply() # 定义期望结果 expect_result = -12 # 验证实际结果与预期结果是否一致 msg="测试一个负数与一个正数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg, "Pass")) def test_two_pos_multi(self): """ 测试两个正数相乘 :return: """ # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(3,4).multiply() # 定义期望结果 expect_result = 12 # 验证实际结果与预期结果是否一致 msg="测试两个负数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg, "Pass")) def test_zero_multi(self): """ 4.测试两个0数相乘 :return: """ # 通过查看当前运行的实例方法名称 self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(0,0).multiply() # 定义期望结果 expect_result = 0 # 验证实际结果与预期结果是否一致 msg="测试两个0数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 self.file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: self.file.write("{},执行结果为:{}\n".format(msg, "Pass")) class TestDivide(unittest.TestCase): """ 测试两数相除 """ @classmethod def setUpClass(cls): """ 在每个测试类执行之前运行 :return: """ cls.file_name = "record_run_result1.txt" cls.file = open(cls.file_name, mode="a", encoding="utf-8") cls.file.write("{:=^40s}\n".format("开始执行测试用例")) @classmethod def tearDownClass(cls): """ 在每个测试类执行之后运行 :return: """ cls.file.write("{:=^40s}\n\n".format("测试用例执行结束")) cls.file.close() # def setUp(self): # """ # 重写父类的方法 # 在每个测试类执行之前运行 # :return: # """ # self.file_name = "record_run_result1.txt" # self.file = open(self.file_name,mode="a",encoding="utf-8") # self.file.write("{:=^40s}\n".format("开始执行测试用例")) # # def tearDown(self): # """ # 在每个测试类执行之后运行 # :return: # """ # self.file.write("{:=^40s}\n\n".format("测试用例执行结束")) # self.file.close() def test_two_neg_divi(self): """ 测试两个正数相除 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) # 获取实际结果 real_result = MathOper(8,4).divide() # 定义期望结果 except_result = 2 msg = "测试两个正数相除" try: self.assertEqual(except_result,real_result,msg=msg) except AssertionError as e: self.file.write("{},执行结果为:{},\n具体异常为{}\n".format(msg,"Fail",e)) raise e else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_neg_pos_divi(self): """ 测试一个正数一个负数相除 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(8,-2).divide() except_result = -4 msg = "测试一个正数一个负数相除" try: self.assertEqual(except_result,real_result,msg=msg) except AssertionError as e: self.file.write("{},执行的结果为:{}\n,具体异常为{}\n".format(msg,"Fail",e)) raise e else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_two_pos_divi(self): """ 测试两个负数相除 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(-8,-2).divide() except_result = -4 msg = "测试两个负数相除" try: self.assertEqual(except_result,real_result,msg) except AssertionError as e: print(e) self.file.write("{},执行的结果为:{}\n具体异常为{}\n".format(msg,"Fali",e)) raise e else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_zero_divi(self): """ 测试除0错误 :return: """ self.file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(8,0).divide() except_result = "出现除0错误" msg="测试除0错误" try: self.assertEqual(except_result,real_result,msg) except AssertionError as e: self.file.write("{},执行的结果为:{}\n具体异常为{}\n".format(msg,"Fail",e)) raise e else: self.file.write("{},执行的结果为:{}\n".format(msg,"Pass")) if __name__ == '__main__': unittest.main()

3.setUpMidule 解决每个测试类开启关闭文件的问题 在所有测试类在调用之前会被执行一次,函数名是固定写法,会被unittest框架自动识别

# 解决多个测试类,记录执行日志的问题 # 会使用def setUpModule和def tearDownModule函数 # 先导入模块 import unittest import inspect # 导入自定义模块 from lin.math_operation import MathOperation as MathOper def setUpModule(): """ 解决每个测试类开启关闭文件的问题 在所有测试类在调用之前会被执行一次,函数名是固定写法,会被unittest框架自动识别 :return: """ global file_name global file file_name = "record_run_result1.txt" file = open(file_name,mode="a",encoding="utf-8") file.write("{:=^40s}\n".format("开始执行测试用例")) def tearDownModule(): file.write("{:=^40s}\n\n".format("测试用例执行结束")) file.close() class TestMulti(unittest.TestCase): """ 测试两数相乘 """ def test_two_neg_multi(self): """ 1.测试两个负数相乘 :return: """ # 通过查看当前运行的实例方法名称 file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(-3,-4).multiply() # 定义期望结果 expect_result = 12 # 验证实际结果与预期结果是否一致 msg = "测试两个负数相乘" try: self.assertEqual(expect_result,real_result,msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg,"Fail")) raise e else: file.write("{},执行结果为:{}\n".format(msg,"Pass")) def test_neg_pos_multi(self): """ 2.测试一个负数与一个正数相乘 :return: """ # 通过查看当前运行的实例方法名称 file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(-3,4).multiply() # 定义期望结果 expect_result = -12 # 验证实际结果与预期结果是否一致 msg="测试一个负数与一个正数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: file.write("{},执行结果为:{}\n".format(msg, "Pass")) def test_two_pos_multi(self): """ 测试两个正数相乘 :return: """ # 通过查看当前运行的实例方法名称 file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(3,4).multiply() # 定义期望结果 expect_result = 12 # 验证实际结果与预期结果是否一致 msg="测试两个负数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: file.write("{},执行结果为:{}\n".format(msg, "Pass")) def test_zero_multi(self): """ 4.测试两个0数相乘 :return: """ # 通过查看当前运行的实例方法名称 file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) print("\nRunning Test Method:{}".format(inspect.stack()[0][3])) # 获取两个负数相乘的实际结果 real_result = MathOper(0,0).multiply() # 定义期望结果 expect_result = 0 # 验证实际结果与预期结果是否一致 msg="测试两个0数相乘失败" try: self.assertEqual(expect_result, real_result, msg=msg) except AssertionError as e: print("具体的异常为{}".format(e)) # raise 关键字是将某个异常主动抛出 file.write("{},执行结果为:{}\n具体异常为:{}\n".format(msg, "Fail")) raise e else: file.write("{},执行结果为:{}\n".format(msg, "Pass")) class TestDivide(unittest.TestCase): """ 测试两数相除 """ def test_two_neg_divi(self): """ 测试两个正数相除 :return: """ file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) # 获取实际结果 real_result = MathOper(8,4).divide() # 定义期望结果 except_result = 2 msg = "测试两个正数相除" try: self.assertEqual(except_result,real_result,msg=msg) except AssertionError as e: file.write("{},执行结果为:{},\n具体异常为{}\n".format(msg,"Fail",e)) raise e else: file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_neg_pos_divi(self): """ 测试一个正数一个负数相除 :return: """ file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(8,-2).divide() except_result = -4 msg = "测试一个正数一个负数相除" try: self.assertEqual(except_result,real_result,msg=msg) except AssertionError as e: file.write("{},执行的结果为:{}\n,具体异常为{}\n".format(msg,"Fail",e)) raise e else: file.write("{},执行的结果为:{}\n".format(msg,"Pass")) def test_two_pos_divi(self): """ 测试两个负数相除 :return: """ file.write("Running Test Method:{}\n".format(inspect.stack()[0][3])) real_result = MathOper(-8,-2).divide() except_result = 4 msg = "测试两个负数相除" try: self.assertEqual(except_result,real_result,msg) except AssertionError as e: print(e) file.write("{},执行的结果为:{}\n具体异常为{}\n".format(msg,"Fali",e)) raise e else: file.write("{},执行的结果为:{}\n".format(msg,"Pass")) @unittest.skip("test_zero_divi") # 跳过该条用例
最新回复(0)