Unittest框架
一、之前脚本存在的问题
-
如果测试用例数量过大,要么挨个执行,要么导包执行---挺麻烦
-
断言方式太low,只能在控制台打印文本,我们希望断言的状态是在报告中的,且不应该通过if…else去判断
3.基本上看不到测试报告的效果,显示总共执行了多少条用例,通过了多少条,失败了多少条,失败的原因是什么?
解决方案:引入框架unittest --- 单元测试框架
在unittest框架中有很多好的特性,在自动化测试中可以借鉴
单元测试:代码级别的功能验证、逻辑覆盖
断言:TestCase类中自带的断言方式
self.assertXXX(预期结果,实际结果,msg=”断言失败的提示文本”)
检查两个结果是否相同 – 值相同
assertEqual(预期结果,实际结果,msg=”断言失败的提示文本”)
检查两个结果是否不相同 – 值不相同
assertNotEqual(预期结果,实际结果,msg=”断言失败的提示文本”)
是否是同一个内存地址
self.assertIs()
self.assertIsNot() # 是否不是同一个内存地址
检查类型的断言
self.assertIsInstance("a",123)
self.assertNotIsInstance("a","abc")
在某范围内
self.assertIn("a","abcd") # 断言成功
lst = [1,2,3,4]
self.assertIn(5, lst) # 断言失败
self.assertNotIn("e","abc") # 断言成功
检查空类型
a = "None"
self.assertIsNone(a, msg=””)
self.assertIsNotNone(a, msg=””)
Unittest框架组成部分
unittest.TestCase 类 – 单元测试类 我们自己的测试类要继承此类
setUp() 单元测试前期准备工作
testxxx() 单元测试方法 – 一个测试用例
tearDwon() 单元测试结束后资源释放工作
运行单元测试 – 执行测试
-
unittest.main() 执行当前测试类中所有测试用例
-
创建一个测试用例集,加载测试用例到用例集中,再进行统一执行
unittest.TestSuite 类 - 测试用例集类
创建测试用例集的方式三种:
a) 创建一个空测试用例集:
suite = unittest.TestSuite() 返回用例集对象 – 空集
单个用例添加
suite.addTest(单元测试类(“用例方法名”))
多个用例添加
suite.addTests(map(单元测试类, [“用例方法名”, “用例方法名”…]))
b) 通过加载创建测试用例集 unittest.TestLoader 类
loader = unittest.TestLoader() 返回一个加载对象
suite = loader.loaderTestsFromName(“模块名”)
suite = loader.loaderTestsFromName(“模块名.类名”)
c) 通过加载某指定文件夹内所有符合规则的用例文件创建用例集
suite = unittest.defaultTestLoader.discover(“文件夹路径”, patten=”文件前缀*.py”)
文件夹路径:
当前文件夹:./
动态获取当前文件所在文件夹
上一层文件夹:../
集中执行测试用例集中的用例:unittest.TestResult - 结果类
rs = unittest.TestResult()
suite.run(rs)
查看结果:
print(rs.dict)
目前显示不友好 – 解决方案 – unittest.TextTestRunner 类
数据驱动补充:
导入 ddt 需要安装 pip install ddt