Python的unittest库 unittest框架

unittest框架

 

  unittest介绍和使用

 【 官方文档:https://docs.python.org/3/library/unittest.html 】

  1)  简介

  • unittest是python自带的一个单元测试框架 ;              
  • unittest中包含了一些对常规的测试用例体系的支持,包括:test fixture   test case    test suite      test runner;
  •  fixture中包含两种 ,分别为setup()   teardown()     setUpClass()     testDownClass() ,是一个脚手架;
  • 如果setUp() 成功运行,无论测试方法是否成功,都会运行 tearDown() ,若setup发生异常,框架认为测试发生异常,case不会被运行;

【例子】

复制代码
import unittest

def sum(a, b):
    return a + b

class MyTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("setupclass")

    # 每个case开始前运行
    def setUp(self):
        print("setup")

    def test_int(self):
        self.assertEqual(sum(1, 2), 3)

    def test_number(self):
        self.assertEqual(sum(100, 200), 300)

    # 每个case结束后运行
    def tearDown(self):
        print("teardown")

    @classmethod
    def tearDownClass(cls):
        print("teatdownclass")

if __name__ == '__main__':
    unittest.main()
#  unittest.main() 提供了一个测试脚本的命令行接口。当在命令行运行该测试脚本,脚本按照特定格式输出 # 输出 setupclass setup teardown setup teardown teatdownclass2) pytest   
复制代码

 

2)测试套件 [将测试用例集合在一起]

复制代码
import unittest

def sum(a, b):
    return a + b

class MyTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("setupclass")

    # 每个case开始前运行
    def setUp(self):
        print("setup")

    def test_int(self):
        print("test_int")
        self.assertEqual(sum(1, 2), 3)

    def test_number(self):
        print("test_number")
        self.assertEqual(sum(100, 200), 300)

    # 每个case结束后运行
    def tearDown(self):
        print("teardown")

    @classmethod
    def tearDownClass(cls):
        print("teatdownclass")

if __name__ == '__main__':
    # unittest.main()
  suit = unittest.TestSuite()
  suit.addTest(MyTestCase("test_int"))
  suit.addTest(MyTestCase("test_number"))
  # 执行测试
  runner = unittest.TextTestRunner(verbosity=2)
  runner.run(suit)
复制代码

 

3)不将测试函数转化为testcase的子类,打包测试函数运行:

复制代码
import unittest

def test_Something(self):
    self.assertEqual(sum(1,2),3)

unittest.FunctionTestCase(test_Something)
复制代码

 

4)跳过测试(Unittest支持跳过单个测试方法甚至整个测试类)

复制代码
@unittest.skip("reason")
def test_int(self):
   print("test_int")
   self.assertEqual(sum(1, 2), 3)

# 当condition为真时,跳过; @unittest.skipIf(condition='a',reason='b')
# 跳过,除非条件为真; @unittest.skipUnless(condition='a',reason='b')
复制代码

5)假设预计失败

# 把测试标记为预计失败。如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败。
@unittest.expectedFailure
def test_number(self): print("test_number") self.assertEqual(sum(100, 200), 300)

* 被跳过的测试的 setUp() 和 tearDown() 不会被运行。

* 被跳过的类的 setUpClass() 和 tearDownClass() 不会被运行。

* 被跳过的模组的 setUpModule() 和 tearDownModule() 不会被运行。

6)断言常用方法

7)按顺序执行case

  unittest框架默认根据ASCII码的顺序加载测试用例的,数字与字母的顺序为:“0-9”,“A-Z”,“a-z”。而想要用例按顺序执行,需要通过TestSuite类的addTest()方法按照一定的顺序来加载

8) 运行:python -m unittest test_demo.py     或是   python -m unittest -v test_demo.py    (加上-v可以打印更详细的信息)

  unittest介绍和使用

 【 官方文档:https://docs.python.org/3/library/unittest.html 】

  1)  简介

  • unittest是python自带的一个单元测试框架 ;              
  • unittest中包含了一些对常规的测试用例体系的支持,包括:test fixture   test case    test suite      test runner;
  •  fixture中包含两种 ,分别为setup()   teardown()     setUpClass()     testDownClass() ,是一个脚手架;
  • 如果setUp() 成功运行,无论测试方法是否成功,都会运行 tearDown() ,若setup发生异常,框架认为测试发生异常,case不会被运行;

【例子】

复制代码
import unittest

def sum(a, b):
    return a + b

class MyTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("setupclass")

    # 每个case开始前运行
    def setUp(self):
        print("setup")

    def test_int(self):
        self.assertEqual(sum(1, 2), 3)

    def test_number(self):
        self.assertEqual(sum(100, 200), 300)

    # 每个case结束后运行
    def tearDown(self):
        print("teardown")

    @classmethod
    def tearDownClass(cls):
        print("teatdownclass")

if __name__ == '__main__':
    unittest.main()
#  unittest.main() 提供了一个测试脚本的命令行接口。当在命令行运行该测试脚本,脚本按照特定格式输出 # 输出 setupclass setup teardown setup teardown teatdownclass2) pytest   
复制代码

 

2)测试套件 [将测试用例集合在一起]

复制代码
import unittest

def sum(a, b):
    return a + b

class MyTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("setupclass")

    # 每个case开始前运行
    def setUp(self):
        print("setup")

    def test_int(self):
        print("test_int")
        self.assertEqual(sum(1, 2), 3)

    def test_number(self):
        print("test_number")
        self.assertEqual(sum(100, 200), 300)

    # 每个case结束后运行
    def tearDown(self):
        print("teardown")

    @classmethod
    def tearDownClass(cls):
        print("teatdownclass")

if __name__ == '__main__':
    # unittest.main()
  suit = unittest.TestSuite()
  suit.addTest(MyTestCase("test_int"))
  suit.addTest(MyTestCase("test_number"))
  # 执行测试
  runner = unittest.TextTestRunner(verbosity=2)
  runner.run(suit)
复制代码

 

3)不将测试函数转化为testcase的子类,打包测试函数运行:

复制代码
import unittest

def test_Something(self):
    self.assertEqual(sum(1,2),3)

unittest.FunctionTestCase(test_Something)
复制代码

 

4)跳过测试(Unittest支持跳过单个测试方法甚至整个测试类)

复制代码
@unittest.skip("reason")
def test_int(self):
   print("test_int")
   self.assertEqual(sum(1, 2), 3)

# 当condition为真时,跳过; @unittest.skipIf(condition='a',reason='b')
# 跳过,除非条件为真; @unittest.skipUnless(condition='a',reason='b')
复制代码

5)假设预计失败

# 把测试标记为预计失败。如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败。
@unittest.expectedFailure
def test_number(self): print("test_number") self.assertEqual(sum(100, 200), 300)

* 被跳过的测试的 setUp() 和 tearDown() 不会被运行。

* 被跳过的类的 setUpClass() 和 tearDownClass() 不会被运行。

* 被跳过的模组的 setUpModule() 和 tearDownModule() 不会被运行。

6)断言常用方法

7)按顺序执行case

  unittest框架默认根据ASCII码的顺序加载测试用例的,数字与字母的顺序为:“0-9”,“A-Z”,“a-z”。而想要用例按顺序执行,需要通过TestSuite类的addTest()方法按照一定的顺序来加载

8) 运行:python -m unittest test_demo.py     或是   python -m unittest -v test_demo.py    (加上-v可以打印更详细的信息)

猜你喜欢

转载自www.cnblogs.com/hd-test/p/12189091.html
今日推荐