python测试用例学习一

 测试用例代码:

import unittest
from test_fk_math import TestCrazyitModule
import test_hello

test_cases = "TestHello"


def whole_suite():
    # 创建测试加载器
    loader = unittest.TestLoader()
    # 创建测试包
    suite = unittest.TestSuite()
    # 从测试类中加载测试用例
    tests = loader.loadTestsFromTestCase(test_hello.TestHello)
    # 将测试用例添加到测试包中
    suite.addTests(tests)
    return suite


if __name__ == '__main__':
    # 创建测试运行器
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(whole_suite())

输出到文件中:

if __name__ == '__main__':
    # 创建测试运行器
    '''
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(whole_suite())
    '''
    with open('fk_test_report.txt', 'a') as f:
        # 创建测试运行器(TestRunner),将测试报告输出到文件中
        runner = unittest.TextTestRunner(verbosity=2, stream=f)
        runner.run(whole_suite())

  hello.py 

import unittest
from hello import *


class TestHello(unittest.TestCase):
    # 测试say_hello函数
    def test_say_hello(self):
        self.assertEqual(say_hello(), "hello world.")

    # 测试add函数
    def test_add(self):
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)

 verbosity=1,2对比

运行测试

在编写完测试用例之后,可以使用如下两种方式来运行它们。

1.通过代码调用测试用例。程序可以通过调用unittest.main()来运行当前源文件中

的所有测试用例。例如,在上面的测试用例中增加如下代码.

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

2.使用unittest模块运行测试用例。使用该模块的语法格式如下:

python -m unittest 测试文件

        如果不指定文件,该命令将自动查找并运行当前目录下的所有测试用例。因此,程序也可直接使用如下命令来运行所有测试用例 

3.result:

测试固件之setUp和tearDown: 

重写setUpClass()和tearDown()类方法

import unittest
from hello import *


class TestHello(unittest.TestCase):
    # 测试say_hello函数
    def test_say_hello(self):
        self.assertEqual(say_hello(), "Hello world.")

    # 测试add函数
    def test_add(self):
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)
    @classmethod
    def setUpClass(cls):
        print("\n==========执行setUpClass在类级别模拟初始化测试固件=============")
    @classmethod
    def tearDownClass(cls):
        print("\n==========执行setUpClass在类级别模拟销毁测试固件=============")

测试结果:

(venv) E:\PythonProject\lesson\venv\com\lxy\crazyPy\16>python -m unittest -v fixture_test2.py

==========执行setUpClass在类级别模拟初始化测试固件=============
test_add (fixture_test2.TestHello) ... ok
test_say_hello (fixture_test2.TestHello) ... ok

==========执行setUpClass在类级别模拟销毁测试固件=============

----------------------------------------------------------------------
Ran 2 tests in 0.002s

跳过测试

如果希望临时跳过某个测试用例,则可以通过如下

两种方式来实现

1.使用skipXxx装饰器来跳过测试用例。

unittest一共提供了3个装饰器,分别是@unittest.skip(reason),@unittest.skipif(condition.reason)和@unittest.skipUnless(condition,reason).其中skip代表无条件跳过,skipif代表condition为True时跳过,skipUnless代表当condition为False时跳过。

使用TestCase的skipTest()方法来跳过测试用例

方法1——@unittest.skip:

class TestHello(unittest.TestCase):
    # 测试say_hello函数
    def test_say_hello(self):
        self.assertEqual(say_hello(), "Hello world.")

    # 测试add函数
    @unittest.skip('临时跳过test_add')
    def test_add(self):
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)

 

python -m unittest skip_test1.py
(venv) E:\PythonProject\lesson\venv\com\lxy\crazyPy\16>python -m unittest skip_test1.py
sF
======================================================================
FAIL: test_say_hello (skip_test1.TestHello)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "E:\PythonProject\lesson\venv\com\lxy\crazyPy\16\skip_test1.py", line 8, in test_say_hello
    self.assertEqual(say_hello(), "Hello World.")
AssertionError: 'Hello world.' != 'Hello World.'
- Hello world.
?       ^
+ Hello World.
?       ^


----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1, skipped=1)

 方法2——TestCase的skipTest(): 

class TestHello(unittest.TestCase):
    # 测试say_hello函数
    def test_say_hello(self):
        self.assertEqual(say_hello(), "Hello world.")
        # 测试add函数

    def test_add(self):
        self.skipTest("临时跳过test_add")
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)
python -m  unittest -v skip_test2.py

 

(venv) E:\PythonProject\lesson\venv\com\lxy\crazyPy\16>python -m  unittest -v skip_test2.py
test_add (skip_test2.TestHello) ... skipped '临时跳过test_add'
test_say_hello (skip_test2.TestHello) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK (skipped=1)

1.PyUnit是python自带的单元测试框架,用于编写和运行可重复的测试。PyUnit是xUnit体系的一个成员,xUnit是众多测试框架的总称,PyUnit主要用于进行白盒测试和回归测试。

2.PyUnit具有如下好处:

   2.1可以使测试代码与产品代码分离

   2.2针对某一个类的测试代码只需要进行较少的改动,便可以应用于另一个类的测试

   2.3PyUnit开放代码,可以进行二次开发,方便对PyUnit的扩展

3.PyUnit是一个简单,易用的测试框架,其具有如下特征:

   3.1使用断言方法判断期望值和实际值的差异,返回bool值

   3.2测试驱动设备可使用共用的初始化变量或实例

   3.3测试包结构便于组织和集成运行

4.测试注意事项

   4.1测试方法应该没有返回值

   4.2测试方法不应该有任何参数

   4.3测试方法应以test_开头

   4.4在测试某个方法时,如果实际测试要求达到某种覆盖程度,那么在编写测试用例时必须传入多组参数来进行测试,使得测试用例能达到指定的逻辑覆盖

5.TextTestRunner,它是一个测试运行器,专门用于运行测试用例和测试包。其实前面使用的unittest.main()函数,同样也是通过

创建TextTestRunner时还指定了verbosity=2,这样可以生成更详细的测试信息

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值