App自动化测试之unittest入门

unittest

基本概念

  • test fixture:代表了用例执行前的准备工作和用例执行后的清理工作;
  • test case:测试用例,测试的最小单位,一般检查一组输入的响应是否符合预期;
  • test suite:测试套件,测试用例的组合;
  • test runner:执行测试用例并输出测试结果的组件。

基本用法

import unittest

class TestStringMethods(unittest.TestCase):
    
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
    
        def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()
  • 通过集成unittest.TestCase可自定义测试用例,一个测试用例可有多个测试方法;
  • 测试用例方法名以test开头的方法才是测试方法;
  • 断言是测试用例的核心。assertEqual()来判断预期结果、assertTrue()和assertFalse()做是非判断、assertRaises()判断预期异常是否被抛出;
  • 除使用unittest.main,也可把最后两行替换为
suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)

Text fixture

通过自定义下面两个方法,实现测试数据以及测试环境的准备及清理:

  • TestCase.setUp 每个测试方法运行前都会运行一次,适用于为每个测试用例初始化数据
  • TestCase.tearDown 每个测试方法运行后都会运行一次,适用于为每个测试用例清理数据
    为避免反复多次读取测试数据文件,可在所有测试方法执行前读取一次数据:
  • setUpClass() 每个测试用例类执行前会执行一次,接受该class作为唯一参数,并且必须使用装饰器classmethod()
  • tearDownClass() 所有测试方法执行完之后才会被调用一次

断言

方法 检查点
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)
assertRaises(exc, fun, *args, **kwds) fun(*args, **kwds) raises exc
assertRaisesRegexp(exc, r, fun, *args, **kwds) fun(*args, **kwds) raises exc and the message matches regex r
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b 2.7
assertGreaterEqual(a, b) a >= b
assertLess(a, b) a < b
assertLessEqual(a, b) a <= b
assertRegexpMatches(s, r) r.search(s)
assertNotRegexpMatches(s, r) not r.search(s)
assertItemsEqual(a, b) sorted(a) == sorted(b) 也支持unhashable对象
assertDictContainsSubset(a, b) a里面所有的键值对都在b中存在
发布了32 篇原创文章 · 获赞 32 · 访问量 6808

猜你喜欢

转载自blog.csdn.net/qq_33267875/article/details/100761914