unittest框架的基本特征

最近好久没有写博客辣,主要啊因为博主在健身,哈哈哈。但学习从来没有落下过。哈哈哈哈。其实原本的打算后面想写一下关于数据库或者pytest框架方面的知识,但是啊因为前期一直在写ui自动化的时候一直用的unittest框架,但关于unittest框架的特性从阿里没有讲过,今天乘着周六大概的讲一下unittest框架的特性。

在unittest的文档中开篇就讲了四个很重要的概念,test fixtuer /test case/test suite/test runner下面简单的讲一个这四个特性的概念吧

1.test case:其实它就是一个测试用例的实例,什么是测试用例的实例呢?实际就是一个完整的测试流程从set Up到实施测试代码run到最后还原测试环境 tearDown 单元测试的本质其实就是这些

2.test suit:我们在测试一个功能的或者测试某一个场景的时候不可能只有一条测试用例,我们往往需要把同类的测试用例集合在一起执行,这样就产生了一个测试套件testsuit的概念啦。通过test suit用来组装单个测试用例。可以通过addTest加载TestCase到testsuit中,从而返回一个testsuit实例。现在看着有点懵是不是,后面会有栗子的,哈哈哈。

3.test runner:看名字我相信大家也已经猜到啦,就是执行测试啦,一般的单元测试框架中都会提供丰富的执行策略和执行结果,在unittest框架中,通过TextTestRunner类提供的run()方法来执行test suit/test case.

4.test Fixture:对一个测试环境的搭建和销毁,就是常用的setup()  tearDown()每一条用例执行完后都会重启一次浏览器,一般啊在测试过程中我们用setup_class()与teardown_class()也比较多,它们是在一个类前后各运行一次运行完所有的用例才会关闭浏览器。

理解完上面几个概念后,我们来看一下具体的例子吧。

import unittest


class Test_login(unittest.TestCase):
    def setUp(self):
        print('test stat')

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

    def test_1(self):
        print('这是测试用例1')

    def test_2(self):
        print('这是测试用例2')


if __name__ == '__main__':
    '''构造测试集'''
    suite = unittest.TestSuite()
    '''通过addTest加载测试用例到测试集中'''
    suite.addTest(Test_login('test_2'))
    '''执行测试用例'''
    runner = unittest.TextTestRunner()
    runner.run(suite)

看一下执行结果,因为这是我们只加载了test_2到测试集中所以只执行test_2测试用例

test stat
.
这是测试用例2
test end
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

进程已结束,退出代码 0

但是是上面的方法有一个特别大的弊端,就是当我们有成千上万条用例的时候通过addTest()添加测试用例就变得格外的麻烦。

这里啊unittest单元测试框架提供了TestLoader类中的discover()方法可以解决这个问题。

discover(start_dir,pattern='test*.py,top_level_dir = None)

找到指定目录下的测试模块,可以递归查到目录下所有的测试模块,只有匹配到的文件名才会被加载,如果启动不是顶层目录,那么顶层目录必须指定

start_dir:要测试的模块名称或者测试用例目录

pattern= "test*.py":测试用例名称的匹配规则

top_level_dir = None:测试模块的顶层目录,如果没有顶层目录默认为None

import unittest

case_dir ='./'   #存放测试用例文件的目录
discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(discover)

看一看执行结果:

..
test stat
----------------------------------------------------------------------
这是测试用例1
Ran 2 tests in 0.000s
test end

test stat
OK
这是测试用例2
test end

进程已结束,退出代码 0

我们可以将其上面的代码优化一下,封装好并结果测试报告。

import unittest
import time


def all_case():
    case_dir ='./'   #存放测试用例文件的目录
    testcase = unittest.TestSuite()      #构造测试集
    discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)  #使用discover方法筛选出测试用例
    for test_suit in discover:    #循环添加到测试套件中
        for test_case in test_suit:
            testcase.addTest(test_case)
    print(testcase)
    return testcase


if __name__ == '__main__':
    from HTMLTestRunner import HTMLTestRunner   #导包,关于如何生成HTML报告方法前面已经讲过这里不在赘述,有兴趣的小伙伴可以看博主前面写的博客
    now = time.strftime("%Y-%m-%d %H_%M_%S")
    uli = 'D:\\selenuim自动化\\case\\' + now + 'case.html'
    fp = open(uli, 'wb')
    runner = HTMLTestRunner(stream=fp, title=u'这是我的自动化测试报告', description=u'测试用例执行情况:')
    runner.run(all_case())   #run所有测试用例
    fp.close()

这样就大功告成了,哈哈哈。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
<em>unittest框架</em>是Python中的一个单元测试框架,用于编写和执行测试用例。它提供了一组用于编写测试用例、组织测试用例和运行测试用例的功能。在引用中提到的基于<em>unittest框架</em>的用例实现中,测试用例是通过继承<em>unittest.TestCase</em>类来实现的。 <em>unittest框架</em>与其他单元测试框架相比有以下几点区别: 1. 基于类的测试用例:<em>unittest框架</em>使用面向对象的方式组织测试用例,每个测试用例都是一个继承自<em>unittest.TestCase</em>的类。 2. 自动化的测试用例发现:<em>unittest框架</em>可以自动发现和加载测试用例,无需手动指定每个测试用例的位置。 3. 丰富的断言方法:<em>unittest框架</em>提供了多种断言方法,用于验证测试结果是否符合预期。这些断言方法包括判断相等、不相等、大于、小于等关系,以及判断是否包含、不包含等操作。 4. 支持测试套件和测试运行器:<em>unittest框架</em>可以将多个测试用例组织为测试套件,然后使用测试运行器执行测试套件。测试运行器提供了丰富的功能,包括执行测试用例、生成测试报告等。 5. 插件化的扩展机制:<em>unittest框架</em>支持通过插件扩展其功能,可以自定义测试装置、添加测试修饰符、输出测试结果等。 总的来说,<em>unittest框架</em>是Python中一个功能强大的单元测试框架,它提供了丰富的功能和灵活的扩展机制,方便开发人员编写和执行测试用例,以确保代码的质量和稳定性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [handles页面切换操作技巧-基于unittest框架](https://download.csdn.net/download/weixin_38659789/13747700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [selenium中使用unittest框架批量执行测试用例,并生成HTML报告方法](https://download.csdn.net/download/weixin_38737366/14855143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [34 UnitTest框架 - UnitTest基本使用](https://blog.csdn.net/qq_46071165/article/details/129508170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值