python-unittest

unittest编写规范

  • 测试模块首先 import unittest
  • 测试类必须继承unittest.TestCase
  • 测试方法必须以“test_”开头
  • 模块名字、类名称没有特殊要求
import unittest


class TestDemo1(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('setUpClass')

    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')

    def setUp(self):
        print('setUp')

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

    def test_case_1(self):
        print('test_case_1')
        self.assertEqual(1, 1, '判断相等')

    def test_case_2(self):
        print('test_case_2')

    # 直接跳过测试用例
    @unittest.skip
    def test_case_3(self):
        print('test_case_3')

    # 满足某条件时跳过测试用例
    @unittest.skipIf(1 + 1 == 2, "在1+1=2时跳过")
    def test_case_4(self):
        print('test_case_4')


class TestDemo2(unittest.TestCase):
    def test_case_5(self):
        print('test_case_5')


if __name__ == '__main__':
    # # 执行方法一,把页面上所有以"test_"开头的测试用例全部加载进来,当页面上有多个类时,多个类都可以被加载进来
    unittest.main()

    # # 执行方法二,加入到容器中
    suite = unittest.TestSuite()
    suite.addTest(TestDemo1('test_case_1'))
    suite.addTest(TestDemo2('test_case_5'))
    runner = unittest.TextTestRunner()
    runner.run(suite)

    # # 执行方法三 批量添加测试类
    suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDemo1)
    suite_2 = unittest.TestLoader().loadTestsFromTestCase(TestDemo2)
    suite = unittest.TestSuite([suite_1, suite_2])
    # verbosity = 2 输出更多详细信息
    unittest.TextTestRunner(verbosity=2).run(suite)

    # 执行方法四
    # ./ 当前路径下
    # test*.py 匹配以test开头,.py结尾的文件
    discover = unittest.defaultTestLoader.discover("./", "python*.py")
    unittest.TextTestRunner().run(discover)

unittest用法总结

  1. 首先要写好TestCase
  2. 然后由TestLoader加载TestCase到TestSuite
  3. 然后由TextTestRunner来运行TestSuite
  4. 运行的结果保存在TextTestResult中
  5. 整个过程集成在unittest.main模块中

HtmlTestRunner

  1. HtmlTestRunner下载链接参考 https://github.com/huilansame/HTMLTestRunner_PY3/archive/master.zip
  2. 使用
import unittest
from HTMLTestRunner_PY3 import HTMLTestRunner


class TestTest(unittest.TestCase):
    """ 测试HTMLTestRunner """
    def setUp(self):
        self.a = 1
        self.b = 2
        self.c = [1, 2, 3]

    def test_a_plus_b(self):
        """ a + b = 3 这个用例应该通过"""
        print('a + b = 3')
        self.assertEqual(self.a+self.b, 3)

    def test_a_minus_b(self):
        """ a - b = 3 这个用例应该失败 """
        print('a - b = 3')
        self.assertEqual(self.a-self.b, 3)

    def test_a_multi_b(self):
        """ a * b = 2 这个用例应该成功"""
        print('a * b = 2')
        self.assertEqual(self.a*self.b, 2)

    def test_a_divide_c(self):
        """ a / c = 1 这是个有subTest的用例"""
        for i in self.c:
            with self.subTest(i=i):
                print('a / c = 1')
                self.assertEqual(self.a / i, 1)

    def test_a_error_case(self):
        """ 除零异常 """
        print('1/0')
        self.assertEqual(self.a/0, 1)


class ExampleCase1(unittest.TestCase):
    """此class包含两个用例:add - ok, minus - FAIL"""
    def setUp(self):
        self.a = 4
        self.b = 3

    def test_add(self):
        """用例1,add,此用例成功通过"""
        self.assertEqual(self.a + self.b, 7)

    def test_minus(self):
        """用例2,minus,此用例执行失败,4-3!=2"""
        print('中文方法反反复复凤飞飞反复')
        self.assertEqual(self.a - self.b, 2)


class ExampleCase2(unittest.TestCase):
    """此class包含一个用例:plus - ERROR"""
    def setUp(self):
        self.a, self.b = 4, 3

    def test_plus(self):
        """用例3,plus,此用例执行出错,因为c未定义"""
        self.assertEqual(self.a * self.b, c)


class ExampleCase3(unittest.TestCase):
    """此class包含一个用例:divide - ok"""
    def setUp(self):
        self.a, self.b = 4, 2

    def test_devide(self):
        """用例4,divide,此用例执行成功"""
        print('我要打印输出')
        self.assertEqual(self.a / self.b, 2)


if __name__ == '__main__':
    report_title = 'Example用例执行报告'
    desc = '用于展示修改样式后的HTMLTestRunner'
    report_file = 'ExampleReport.html'

    testsuite = unittest.TestSuite()
    testsuite.addTest(unittest.TestLoader().loadTestsFromTestCase(TestTest))
    testsuite.addTest(unittest.TestLoader().loadTestsFromTestCase(ExampleCase1))
    testsuite.addTest(unittest.TestLoader().loadTestsFromTestCase(ExampleCase2))
    testsuite.addTest(unittest.TestLoader().loadTestsFromTestCase(ExampleCase3))

    with open(report_file, 'wb') as report:
        runner = HTMLTestRunner(stream=report, title=report_title, description=desc)
        runner.run(testsuite)

  • 注意在使用前需要将 HTMLTestRunner_PY3.py,将其放入site-packages内
  • 方法:
    1、在python中使用命令 import sys print(sys.path)查找site-packages所在路径
    2、在mac终端中,输入 cd+ 上述命令,切换到对应文件夹下
    3、输入 open . 打开当前文件的页面,后面将HTMLTestRunner_PY3.py,将其放入site-packages内
    4、链接参考:https://www.cnblogs.com/devtesters/p/4959911.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值