24-unittest简介

一、unittest简介

        unittest是Python中常用的单元测试框架,与Java中的Junit单元测试框架类似。

二、示例程序

1)导入unittest模块
import unittest
2)使用help()函数查看源码中的示例程序
help(unittest)
Simple usage:

    import unittest

    class IntegerArithmeticTestCase(unittest.TestCase):
        def testAdd(self):  # test method names begin with 'test'
            self.assertEqual((1 + 2), 3)
            self.assertEqual(0 + 1, 1)
        def testMultiply(self):
            self.assertEqual((0 * 10), 0)
            self.assertEqual((5 * 8), 40)

    if __name__ == '__main__':
        unittest.main()
3)示例程序解析
  • 第一行是导入unittest模块。
  • class这一行是定义了一个测试类,并继承unittest.TestCase类。
  • 接下来是定义了两个测试方法:testAdd和testMultiply。这里的注释很重要:测试方法的名称要以test开头。
  • 方法中是断言assert,断言其实就是拿实际结果和期望结果去对比。这里使用的是assertEqual断言方法,用来判断两个元素是否相等,方法中可以写多个断言
  • unittest.main()是运行主函数,运行后会看到如下测试结果:

三、简单用法

        上面的示例程序中是加法和乘法,我们可以添加测试方法来测试一下减法和除法。

import unittest

class Demo(unittest.TestCase):
    def testMinus(self):
        self.assertEqual((5 - 2), 3)

    def testDiv(self):
        self.assertEqual((5 / 2), 2)

if __name__ == '__main__':
    unittest.main()

        运行代码,第二个测试方法是失败的,失败原因:AssertionError: 2.5 != 2。

四、前置和后置

1)setUp:在写测试方法时,每次操作都需要先打开浏览器输入对应网址,这些操作就是执行测试方法的前置条件。

2)tearDown:测试方法执行完毕后,为了不影响下一个测试方法的执行,一般需要有数据还原的过程,这就是执行测试方法的后置条件。

3)前置条件和后置条件都是非必要,如果没有可以写pass。

4)很多人执行完测试方法后,不去做数据还原,导致下一个测试方法执行失败,这就是不喜欢擦屁股的坏习惯。

import unittest

class Demo(unittest.TestCase):
    def setUp(self):
        print('setUp')

    def tearDown(self):
        print('tearDown')

    def testMinus(self):
        print('testMinus')
        self.assertEqual((5 - 2), 3)

if __name__ == '__main__':
    unittest.main()

五、测试类的运行方式

import unittest

class Test(unittest.TestCase):
    def test01(self):
        print('test01 start')
        self.assertEqual(1, 1)
        print('test01 end')

    def test02(self):
        print('test02 start')
        self.assertEqual(1, 2)
        print('test02 end')

if __name__ == "__main__":
    print('测试开始~')
    unittest.main()

注:当测试方法中断言失败,后续的代码将不会执行。test02方法断言会失败,后续的打印语句将不会执行。

1)右键,选择 Run 'Unittests in .... ' 执行

        这种方式是以pycharm的unittest运行模式执行测试类,不会执行 if 条件下的代码,将 if 代码块去掉,也能执行所有的测试方法。

2)添加配置,以普通.py文件执行

3)添加配置,以pycharm的unittest运行模式执行

六、跳过执行

        对于一些未完成的或者不满足测试条件的测试类和测试方法,可以跳过执行。

1)操作步骤
  • 直接将测试类或测试方法标记成 “跳过”:@unittest.skip('跳过执行的原因')
  • 根据条件判断测试类或测试方法是否跳过执行:@unittest.skipIf(判断条件, reason='原因')   # 判断条件为True时,将跳过执行
2)示例
import unittest

class TestSkip1(unittest.TestCase):
    version = 25
    @unittest.skip('测试方法代码未完成!')
    def test_01(self):
        print('TestSkip1.test_01')

    def test_02(self):
        print('TestSkip1.test_02')

    @unittest.skipIf(version <= 30, '版本大于30时才会执行!')
    def test_03(self):
        print('TestSkip1.test_03')

@unittest.skip('测试类代码未完成!')
class TestSkip2(unittest.TestCase):
    def test_01(self):
        print('TestSkip2.test_01')

    def test_02(self):
        print('TestSkip2.test_02')
3)执行结果

七、案例演示

        以打开百度搜索页为例,判断title是否完全等于期望结果。

from selenium import webdriver
import unittest
import time

class Demo(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com')
        time.sleep(3)

    def tearDown(self):
        time.sleep(1)
        self.driver.quit()

    def testTitle(self):
        title = self.driver.title
        print(title)
        self.assertEqual(title, '百度一下')

if __name__ == '__main__':
    unittest.main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值