unittest框架
unittest框架
1、写用例:TestCase 类
2、加载用例:TestSuite 类 TestLoader 类
3、对比结果(执行结果/期望结果):assert函数
4、执行并出结果:TextTestRunner 类
5、报告:HtmlTestReport 类
1)首先建一个math_method.py文件,用来存在被测试函数
# 被测类函数
class MathMethod():
def add(self, a, b):
return a + b
def sub(self, a, b):
return a - b2)新建一个test_case1.py文件,用来存放测试用例代码
# from unittest.case import TestCase #在文件unittest文件下面case文件中存在TestCase模块
# class TestAdd(TestCase):
import unittest
from test_unittest.math_method import MathMethod # 导入被测试类
class TestAdd(unittest.TestCase): # 测试类 专门测试加法类
# 写用例 每一条用例都是一个类函数
# 用例 def test_后缀(self) :用例函数必须test开头
def setUp(self): # 测试环境的搭建
print("我要开始测试咯")
self.t = MathMethod()
def tearDown(self): # 测试环境的销毁
print("我测试完成咯")
def test_add_two_zero(self): # 测试两个零相加的用例
# t = MathMethod() # 创建实例
# res = t.add(0, 0)
res = self.t.add(0, 0)
# 断言函数的调用,注意:为啥用self,因为调用父类的方法
self.assertEqual(1, res)
print("测试的结果是:{0}".format(res))
def test_add_two_positive(self): # 测试两个整数相加的用例
# t = MathMethod() # 创建实例
# res = t.add(4, 5)
res = self.t.add(4, 5)
print("测试的结果是:{0}".format(res))
def test_add_two_negative(self): # 测试两个负数相加的用例
# t = MathMethod() # 创建实例
# res = t.add(-4, -5)
res = self.t.add(-4, -5)
print("测试的结果是:{0}".format(res))
class TestSub(unittest.TestCase): # 测试类 专门测试减法
# 写用例 每一条用例都是一个类函数
# 用例 def test_后缀(self) :用例函数必须test开头
def test_sub_two_zero(self): # 测试两个零相减的用例
t = MathMethod() # 创建实例
res = t.sub(0, 0)
print("测试的结果是:{0}".format(res))
def test_sub_two_positive(self): # 测试两个整数相减的用例
t = MathMethod() # 创建实例
res = t.sub(4, 5)
print("测试的结果是:{0}".format(res))
def test_sub_two_negative(self): # 测试两个负数相减的用例
t = MathMethod() # 创建实例
res = t.sub(-4, -5)
print("测试的结果是:{0}".format(res))
if __name__ == ‘__main__‘:
unittest.main()3)新建一个test_suite.py文件,用来存放加载用例,执行用例,生成报告的代码
import unittest
from test_unittest.test_case1 import TestAdd # 测试类
from test_unittest.test_case1 import TestSub # 测试类
from test_unittest import test_case1 # 测试模块
import HTMLTestRunnerNew # 生成html文件测试报告,这个文件放在lib文件里面
from test_unittest.test_case2 import TestAdd # 测试类
from test_unittest import test_case2 # 测试模块
from test_unittest.read_config import ReadConfig # 配置文件
from test_unittest.do_excel import DoExcel
# 加载测试用例
# suite:测试套件/测试用例的容器,这边suite是一个实例
suite = unittest.TestSuite()
# 怎么把测试用例放到测试套件suite里面去,以实例的形式添加进去
# # 方法一
# # suite.addTest()是suite实例调用父类的addTest的方法
# suite.addTest(TestAdd(-4, -5, 0, "test_add"))
# suite.addTest(TestAdd(‘test_add_two_positive‘)) #test_add_two_positive必须要加因为是父类的初始化参数
## 优化测试数据,方法1:参数化-测试数据列出来
# test_data = [[0, 0, 0, ‘两个0相加‘],
# [1, 2, 3, ‘两个正数相加‘],
# [-1, -4, -5, ‘两个负数相加‘],
# [1, 0, 1, ‘一正一0相加‘],
# [-1, 0, -1, ‘一负一0相加‘]]
# for item in test_data:
# suite.addTest(TestAdd(item[0], item[1], item[2], item[3], ‘test_add‘))
# # 优化测试数据,方法2:调用测试数据,列表嵌套列表形式
# test_data=DoExcel().do_excel()
# for item in test_data:
# suite.addTest(TestAdd(item[2], item[3], item[4], item[1], ‘test_add‘))
# # 优化测试数据,方法3:调用测试数据,列表嵌套字典形式
# test_data=DoExcel().do_excel()
# for item in test_data:
# suite.addTest(TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExceptedResult‘], item[‘title‘], ‘test_add‘))
# # 优化测试数据,方法4:调用测试数据,列表嵌套字典形式,但是要写回测试结果
# test_data=DoExcel().do_excel()
# for item in test_data:
# suite.addTest(TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExpectedResult‘], item[‘title‘], item[‘id‘] ,‘test_add‘))
# # 优化测试数据,方法5:结合配置文件,执行测试用例
# test_data = DoExcel().do_excel()
#
# # 实例化,获取mode和case_id_list
# mode = ReadConfig().read_config("case.config", "FLAG", "mode")
# case_id_list = eval(ReadConfig().read_config("case.config", "FLAG", "case_id_list"))
#
# if mode == "on":
# final_data = test_data
# else:
# final_data = []
# for item in test_data:
# if item[‘id‘] in case_id_list:
# final_data.append(item)
#
# for item in final_data:
# suite.addTest(
# TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExpectedResult‘], item[‘title‘], item[‘id‘], ‘test_add‘))
# 优化测试数据,方法6:结合配置文件,执行测试用例,判断放在读取文件中do_excel
# 实例化,获取mode和case_id_list
mode = ReadConfig().read_config("case.config", "FLAG", "mode")
case_id_list = eval(ReadConfig().read_config("case.config", "FLAG", "case_id_list"))
test_data = DoExcel().do_excel(mode, case_id_list)
for item in test_data:
suite.addTest(
TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExpectedResult‘], item[‘title‘], item[‘id‘], ‘test_add‘))
# 方法二
# loader = unittest.TestLoader()
# 直接加载某个测试类里面的所有用例
# suite.addTest(loader.loadTestsFromTestCase(TestAdd))
# suite.addTest(loader.loadTestsFromTestCase(TestSub))
# 直接加载某个测试模块里面的用例
# suite.addTest(loader.loadTestsFromModule(test_case2))
# # 执行用例TextTestRunner 类 专门来执行suite测试套件里面的用例
# runner = unittest.TextTestRunner() # 实例化
# # 使用实例化的run方法
# runner.run(suite)
# # 使用TextTestRunner可执行用例并且返回结果,优化生成txt格式报告
# with open("test_result.txt", ‘w+‘, encoding="utf-8") as f:
# runer = unittest.TextTestRunner(f, verbosity=2)
# runer.run(suite)
# 使用HTMLTestRunnerNew生成html格式的测试报告
# 优化生成html格式报告 使用二进制形式写入,不支持utf-8格式,故不需要写
with open(‘test_result.html‘, "wb+") as f:
runer = HTMLTestRunnerNew.HTMLTestRunner(f, verbosity=2, title="测试报告", description=None, tester="xxx")
runer.run(suite)备注:
执行结果,如果鼠标放在某一个测试用例函数后面则只执行这个用例;若放在最后一行测试用例的下面则执行所有测试用例
执行结果顺序按照函数名ASCII码排序A-Z,0-9 test_add_two_negative test_add_two_positive test_add_two_zero
使用main函数则也是执行整个所有用例
相关推荐
银角大王 2020-06-25
abdstime 2020-05-04
加油奋斗吧 2020-04-07
jszy 2020-03-08
lucialee 2020-02-23
mohanzb 2020-01-18
加油奋斗吧 2020-01-18
abdstime 2020-07-29
sdwylry 2020-06-26
freerocker 2020-06-12
deadgrape 2020-05-30
goodby 2020-05-07
huanghong 2020-05-01
taiyangshenniao 2020-04-29
bcbeer 2020-04-23
deadgrape 2020-03-06
zcabcd 2020-03-04