Unittest框架 | 自己的编写,凑活看

244 阅读2分钟

Unittest框架

一、之前脚本存在的问题

  1. 如果测试用例数量过大,要么挨个执行,要么导包执行---挺麻烦

  2. 断言方式太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()   单元测试结束后资源释放工作

运行单元测试 – 执行测试

  1. unittest.main()    执行当前测试类中所有测试用例

  2. 创建一个测试用例集,加载测试用例到用例集中,再进行统一执行

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