unittest 自学笔记(更新中)

学习资料:

    官网:
        http://pyunit.sourceforge.net/pyunit_cn.html#SYSREQ

    其他文章:

        https://www.cnblogs.com/fengf233/p/11799619.html

主要结构

整体结构:unittest库提供了Test Case, Test Suite, Test Runner, Test Fixture

  • Test Case:通过继承TestCase类,创建一个测试用例集,但这个测试用例集里面可能包含多个测试用例(或者测试步骤)即test开头的方法
  • Test Suite:把多个测试用例集合在一起来执行。可以通过addTest加载TestCase到Test Suite中,从而返回一个TestSuite实例。
  • Test Runner:Test Runner是一个用于执行和输出测试结果的组件,可以使用图形界面,文本界面,或者返回一个特殊的值的方式来表示测试执行的结果。
  • Test Fixture:提供一些脚手架类的方法,常用于测试环境的设置与清理。

创建测试用例,Test Case

1、新建一个py文件,testcass.py

import unittest

class Test1(unittest.TestCase):

    def setUp(self):
        print("test start")
    def tearDown(self):
        print("test end") 

    def test1(self):
        print('这是test1')
        assert self.setup1 ==  '初始化'
    def test2(self):
        try:
            print('这是test2')
            time.sleep( 2 )
            self.assertEqual(1, 1)
            tmp1 = 0
        except:
            tmp1 = 1
        else:
            print('test2 ok')
        self.assertEqual(tmp1, 0, '出错')



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

当 断言条件只要满足多个条件中的一个即可的时候。可以考虑这样写:

self.assertIn(tmp1 , [0, 1], msg="出错了")

当 断言的标准有很多个,且必须全部满足时,除了一个一个判断的方法以外,还可以使用 all() 函数。

    def test_999(self):
        a = [0 ,0 -1 ,1] 
        self.assertTrue(all(a),msg='flase')

# 将需要判断的结果都放到a列表。all() 当所有迭代对象都为真时,返回真。
#元素除了是 0、空、None、False以外的都算 True。

# 与  all() 相对的函数是 any()。当有一个迭代对象是真,即返回真
class ipc_api_TestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        #测试类之前运行
        pass

    @classmethod
    def tearDownClass(cls):
        #测试类之后运行
        pass

    def setUp(self):
        #用例执行前置条件
        pass

    def tearDown(self):
        #用例执行后置条件
        pass

测试集合Test Suite

        添加单个测试用例

suite = unittest.TestSuite() # 创建测试套件
suite.addTest(类名(‘测试函数名’)) # 将第一个测试用例添加到套件中
suite.addTest(类名(‘测试函数名’)) # 将第二个测试用例添加到套件中
runner = unittests.TextTestRunner() # 指定使用 TextTestRunner 运行测试用例
runner.run(suite) # 运行测试套件

        指定按顺序运行一个模块中的多个测试用例

suite = unittest.TestSuite()
tests = [类名('测试函数1'), 类名('测试函数2'),...]
# 只执行指定的测试用例
# 按照编写的顺序执行测试
# 多个测试用例放到列表中
suite.addTests(tests) # 将测试添加到测试套件中
runner=unittest.TextTestRunner(verbosity=2) # 可以指定测试结果的详细程度
runner.run(suite)

        自动匹配添加多个测试用例

# 创建测试套件
suite = unittest.TestSuite()

# 指定识别测试用例的规则
tests = unittest.defaultTestLoader.discover(''测试模块所在目录'', pattern='test*.py')
# 识别所有test开头的py文件为测试用例
# 按模块名顺序执行

suite.addTest(tests)
runner = nuittest.TestRunner(verbosity=2)
runner.run(suite)

        添加测试类

suite1 = unittest.TestSuite()  #定义一个测试集合
suite1.addTest(unittest.makeSuite(测试类))
suite2 = unittest.TestSuite()
loader = unittest.TestLoader()
suite2.addTest(loader.loadTestsFromTestCase(类名))

ps:直接添加测试类。运行时的用例运行顺序,并不是按照脚本写的顺序。而是根据用例的名称,按字母逐个排序。

例如:

def test_1():
    pass
def test_2():
    pass
def test_10():
    pass

运行顺序就是 :test_1()   >  test_10()  >  test_2()

想要按顺序运行:

方法一:使用suite.addTest 逐个添加

方法二:使用suite.addTests 添加用例列表

方法三:在用例的名称上 ,改变

def test_001():
    pass
def test_002():
    pass
def test_010():
    pass

def test_100():
    pass

生成测试报告,

报告模板    BeautifulReport    比较美观。

pip install BeautifulReport

导入:

from BeautifulReport import BeautifulReport as bf

    run = bf(suite) #实例化BeautifulReport模块
    run.report(filename='测试报告',description='测试deafult报告',report_dir='report',theme='theme_default')

BeautifulReport.report

report (
filename -> 测试报告名称, 如果不指定默认文件名为report.html
description -> 测试报告用例名称展示
report_dir='.' -> 报告文件写入路径
theme='theme_default' -> 报告主题样式 theme_default theme_cyan theme_candy theme_memories
)

想要 增加用例描述字段,而不是null

 直接在每一个用例里面添加一下这样的(’’‘测试’’’)注释就可以了,写了什么用例描述就是什么。

def test1(self):
    '''  这是 beautifulreport 报告 每一条用例描述对应的地方'''
    print('这是test1')
    assert self.setup1 ==  '初始化'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值