unittest 学习


部分内容来自此篇博客
此文做了部分修改,维护了文章中一些有问题的地方,后续此文将继续增加内容

1.介绍

unittest 是 python 自带的一个依赖包,类似 junit,其中有各种 py 文件,有各种类和方法可使用

python 中 unittest 就好像 java 中的 junit 主要用来做单元测试的,但实际上 junit 去做 web 自动化测试的管理可不可以呢?也行,但是目前主流被 testng 所占领,那 unittest 呢?也行,python 市场 web 自动化一般是 unittest 或者 pytest 使用都很多,pytest 类似于 java 中的 testng

2.unittest 包中的类与方法

unittest 可与 java 的 junit 或者 testng 做对比

  • unittest.TestCase
    是所有测试用例类都继承的基本类,这样大家自己写的各个测试用例才方便被 unittest 工具管控调度,就好像 java web 自动化中测试用例继承 BaseTest 一样,BaseTest 中通过使用 testng 提供的注解,进而来管控调度测试用例(BaseTest 的子类)

  • unittest.main()

    使用它,可以方便的将一个单元测试模块变成一个可直接运行的测试脚本。其原理是 main() 使用了 TestLoader 类搜索所有模块中以 test 命名开头的测试方法,自动执行它们,顺序按照 ascall 码顺序

  • unittest.TestSuite

    用来创建测试套

  • unittest.TextTextRunner

    主要是通过该类下方的run()方法运行 suite 测试套组装起来的测试用例,入参为 suite 测试套

  • unittest.defaultTestLoader()

    主要是该类下有discover()方法可以自动根据测试目录匹配查找 test*.py 的用例文件,并把查找的文件用例组装到测试套中

  • unittest.skip()装饰器

    用例运行时候,添加此装饰器的用例可以跳过,@unittest.skip(说明原因)是无条件跳过,@unittest.skipIf(条件语句, 说明原因)条件为真时跳过,@unittest.skipUnless(条件语句, 说明原因)条件为假时跳过,@unittest.expectedFailure()测试标记为失败

2.1 unittest 包的 TestCase 类中

  • setUp()

    在 test 测试点方法前执行,因为继承了 unittest.TestCase 的类会识别 test 开头的方法为测试点,test 开头的方法假如看成 testng 中的@Test那么 setUp 就可以看成@BeforeTest表示在每个@Test之前执行。可以把数据库连接操作,驱动初始化等放在里头

  • tearDown()

    setUp()是对应的,setUp()相当于@BeforeTest,那么tearDown()就相当于@AfterClass,常用来释放资源操作

  • assert*()

    assert 打头的各种断言方法

2.2 unittest 包的 TestSuite 类中

  • addTest()

    将测试用例添加到测试套件中,如下

    # 利用 unittest 包中的 TestSuite 类生成一个 suite 测试套
    suite = unittest.TestSuite()
    # 将 baidu_case.py 测试用例中 BaiduCase 类中的 test_1 测试方法添加到 suite 测试套中
    suite.addTest(baidu_case.BaiduCase("test_1"))
    

2.3 unittest 包的 TextTextRunner 类中

  • run()

    运行测试套

    runner = unittest.TextTextRunner()
    runner.run(suite)
    

2.4 unittest 包的 defaultTestLoader 类中

  • discover()

    自动根据测试目录识别 test 打头的.py文件为测试用例,并将找到的测试用例装到测试套中

    discover = unittest.defaultTestLoader.discover(test_dir, pattern = "test_*.py")
    

unittest 中不得不注意的点

  • unittest,main()方法会执行当前模块中所有 test 打头的方法,但是有人会发现在第一个 test 打头的方法中 self.arg 的方式来初始化一个变量,在第二个 test 方法中却没法 self.arg 找到这个变量。unittest.main()每次执行到一个新的 test 方法实际上是初始化一个新对象,所以这个 self.arg 是两个对象的变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值