unittest是Python语言自带的单元测试框架,不仅适用于单元测试,还可以适用于web自动化测试,提供了很多断言方法,可以组织执行测试用例,生成测试结果等。
unittest基础概念TestCase测试用例,一个TestCase就是一条测试用例。
TestSuite测试套件,多条测试用例集合在一起。TestSuite可以嵌套TestSuite。
TestRunner测试执行,用来执行测试用例套件。
TestFixture对一个测试环境的搭建和销毁,被称为一个Fixture,比如数据库连接关闭、测试环境数据清理、启动关闭服务进程。
TestLoaderTestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。
测试方法:setUp、tearDown执行每个测试方法都会执行一次setUp、tearDown
类级别:setUpClass、tearDownClass所有测试方法运行前运行后执行,使用@classmethod装饰器,整个测试过程只执行一次。
unittest断言断言,就是让程序自己判断执行结果是否符合预期。
“一个简单的unittest使用示例”
测试模块引入 import unittest
测试类必须继承 unittest.TestCase
测试方法必须以“test开头”,执行顺序按照开头字符串ASCII码升序执行。
import unittest class Test(unittest.TestCase): def setUp(self) -> None: # 每个测试方法前执行 print("setUp方法") def tearDown(self) -> None: # 每个测试方法后执行 print("tearDown方法") @classmethod def setUpClass(cls) -> None: print("setUpClass每个类执行一次") @classmethod def tearDownClass(cls) -> None: print("tearDownClass每个类执行一次") def test_01(self): a = 1 b = 2 c = a + b self.assertEqual(c,3) def test_02(self): a = 2 b = 3 c = a*b self.assertEqual(c,6) if __name__ == '__main__': # 调用main方法执行unittest内所有test开头的方法 unittest.main()加载执行用例的几种方法 main方法
if __name__ == '__main__': unittest.main()testsuit方式
suit = unittest.TestSuite() # 创建suit实例并构造测试用例集 suit.addTest(Test('test_01')) # Test为class名;test_01是class中的方法 suit.addTest(Test('test_02')) # 用例执行顺序,按照加载的顺序执行 runner = unittest.TextTestRunner() # 使用run方法运行测试套件 runner.run(suit)testloader方式
加载器TestLoader提供了以下几个方法来查找用例并批量加入测试套件:
loadTestsFromTestCase:根据传入的测试类查找用例
loadTestsFromName:根据传入的名称查找用例
loadTestsFromModule:通过模块名添加该模块内所有的测试用例
suit = unittest.TestSuite() loader = unittest.TestLoader() # 创建加载器对象 suit.addTest(loader.loadTestsFromTestCase(Test)) # 通过测试类加载测试 runner = unittest.TextTestRunner() # # 使用run方法运行测试套件 runner.run(suit)discover 路径加载
使用unittest.defaultTestLoader()类,通过该类下面的discover()方法自动搜索指定目录下指定开头 的.py文件,并将查找到的测试用例组装到测试套件。
test_dir='./' # test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py') runner = unittest.TextTestRunner() runner.run(discover)
unittest的执行结果
“.” 表示测试用例执行通过
“F” 表示执行失败
“E” 表示执行错误
"s“ 表示运行跳过
单元测试完成后,可以将结果生成HTML测试报告。HTMLTestRunner是Python标准库的unittest模块的一个扩展。它生成易于使用的HTML测试报告。
HTMLTestRunner使用准备1.下载HTMLTestRunner.py 链接: https://pan.baidu.com/s/1-iLHuHHbpuL1qdV3AMj6bA 提取码: w8og 也可以在github上搜索功能更强大的模板。
2.复制HTMLTestRunner.py文件到项目文件夹或者Python 安装路径下的lib文件夹。
示例
import unittest from HTMLTestRunner import HTMLTestRunner import time class Test(unittest.TestCase): def setUp(self) -> None: # 每个测试方法前执行 print("setUp方法") def tearDown(self) -> None: # 每个测试方法后执行 print("tearDown方法") @classmethod def setUpClass(cls) -> None: print("setUpClass每个类执行一次") @classmethod def tearDownClass(cls) -> None: print("tearDownClass每个类执行一次") def test_01(self): a = 1 b = 2 c = a + b self.assertEqual(c, 3) def test_02(self): a = 2 b = 3 c = a * b self.assertEqual(c, 5, "不相等") if __name__ == '__main__': test_dir = './' # test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py') # 定义报告目录 file_dir = "./report/" # 定义报告名称格式 now_time = time.strftime("%Y-%m-%d %H_%M_%S") # 报告完整路径和名称 file_name = file_dir + now_time + "Report.html" with open(file_name, "wb") as fp: # 创建执行对象 是一个HTMLTestRunner的对象 生成测试结果报告内容 runner = HTMLTestRunner(stream=fp, title="测试报告", description="用例执行情况:", verbosity=2 ) # 执行测试流程 runner.run(discover)好书推荐
《Vue.js全家桶零基础入门到进阶项目实战》
Vue.js 是一套构建用户界面的渐进式框架,本书旨在帮助读者全面掌握 Vue.js 全家桶技术和单页面前后端分离项目开发,理解 MVVM 框架思想,让前端和后端开发人员快速精通 Vue.js 全家桶技术。
本书贯穿入门准备实 *** 、基础核心案例、中级进阶实战、综合进阶项目进行讲解,循序渐进、环环相扣,通俗易懂,并分析为什么这样使用,让你知其所以然。包含的主要技术:NPM/CNPM、VS Code、Vue.js、 MVVM、Axios、Vue Router、webpack、ECMAscript 6、Vue Loader、Vue CLI、Element UI、Vuex、 Mock.js、Easy Mock、ECharts 、Promise、拦截器、组件通信、跨域问题、上线部署等。
留言点赞送此书: 点在看本文并留言(本文内容相关、本书相关、其他公众号建议),我将随机挑选一位粉丝包邮送出本书(同一人一个月只有一次机会),送书活动会持续进行,机会多多,大家持续关注,感谢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)