Unittest测试框架基本使用[通俗易懂]

Unittest测试框架基本使用[通俗易懂]unittest单元测试

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Unittest测试框架

1、UintTest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件

2、UintTest单元测试框架不仅适用于单元测试,还可以适用WEB自动化测试、接口自动化测试的开发与执行。用处还是比较广的

四大组件

testcase testfixture textsuite testrunner
在这里插入图片描述

测试套件:TestSuite

常用的方法如下:
⑴unittest.TestSuite()
①addTest():添加单个测试用例方法
②addTests([…]):添加多个测试用例方法,方法名存在一个列表
⑵unittest.TestLoader()
①loadTestsFromTestCase(测试类名):添加一个测试类
②loadTestsFromModule(模块名):添加一个模块
③discover(测试用例的所在目录):指定目录去加载,会自动寻找这个目录下所有符合命名规则的测试用例

import unittest
class Test(unittest.TestCase):
    def test_1(self):
        print(1)
    def test_3(self):
        print(3)
    def test_2(self):
        print(2)
    def test_4(self):
        print(4)
    def test_5(self):
        print(5)
    def add(self):
        print("这条样例不会被执行")

if __name__ =='__main__':
    #执行全部用例
    # unittest.main()
    # 创建套件
    suit = unittest.TestSuite()
    # 添加用例
    # suit.addTest(Test("test_3"))
    suit.addTests([Test("test_3"),Test("test_2")])
    # 执行用例
    run = unittest.TextTestRunner()
    run.run(suit)

测试固件:TestFixture

1、用于测试用例环境的搭建和销毁。即用例执行前的环境搭建,用例执行后环境的还原。通过覆盖TestCase的setUP()和tearDown()方法来实现

2、setUP()方法:
⑴初始化。在执行测试之前执行,用于准备本次测试所需环境
⑵比如测试前需要登录获取token等就是测试用例需要的环境
⑶比如在测试用例中需要访问数据库,那么可以在setUp()中建立数据库连接来进行初始化
⑷setUP()方法中还可以用来定义一些公共的变量(数据)、代码等。这样在整个测试类中都可以调用这些公共的变量、数据

3、tearDown()方法:
⑴在执行测试之后执行,用于在下一次执行测试前还原环境(跟setUP方法差不多)
⑵tearDown()方法的过程很重要,要为下一次测试留下一个干净的环境,以免影响下一次测试
⑶比如在tearDown()中清除数据库产生的数据,然后关闭连接

4、UintTest框架中的测试固件有两种使用方式
⑴一种是以测试方法(类方法)为维度的setUp()和tearDown():在执行每个测试方法的前后都会执行一次
⑵一种是以测试类(TestCase)为维度的setUpClass()和tearDownClass():在执行每个测试类的前后执行一次(测试方法前后就不会执行了)

第一种使用方式:

import unittest
class Test(unittest.TestCase):
    def setUp(self) -> None:
        print("打开浏览器")
    def test_1(self):
        print(1)
    def test_3(self):
        print(3)
    def test_2(self):
        print(2)
    def tearDown(self) -> None:
        print("关闭浏览器")

if __name__ =='__main__':
    # 执行全部用例
    unittest.main()

在这里插入图片描述
第二种使用方式:

import unittest
class Test(unittest.TestCase):

    @classmethod  # 指明这是个类方法以类为维度去执行的
    def setUpClass(cls):
        print("===开始执行测试===")

    def test_1(self):
        print(1)
    def test_3(self):
        print(3)
    def test_2(self):
        print(2)

    @classmethod  # 指明这是个类方法以类为维度去执行的
    def tearDownClass(cls):
        print("===结束执行测试===")
if __name__ =='__main__':
    # 执行全部用例
    unittest.main()

在这里插入图片描述

断言

import unittest
from selenium import webdriver


class Test(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = webdriver.Firefox()
        self.driver.get("https://www/baidu.com")
        self.title = self.driver.title
        print(self.title)
        return self.title

    def test1(self):
        self.assertEqual(self.setUp(),"百度一下,你就知道")


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

跳过测试

unittest 提供了几个装饰器用于跳过测试:

import unittest

class MyTestCase(unittest.TestCase):
    # 跳过测试,参数为测试被跳过的原因
    @unittest.skip("demonstrating skipping")
    def test_nothing(self):
        self.fail("shouldn't happen")

    # 条件为真时,跳过测试
    @unittest.skipIf(1>3,"if true")
    def test_format(self):
        print("test_format")
        pass

    # 除非条件为真,否则跳过测试
    @unittest.skipUnless(1>3, "if not true")
    def test_windows_support(self):
        print("test_windows_support")
        pass

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

子测试

在一个测试中,传入不同的参数测试同一个方法,subTest 子测试可以满足这个需求,而且单个子测试的失败不影响后续子测试的执行。

import unittest

class NumbersTest(unittest.TestCase):

    def test_even(self):
        """ Test that numbers between 0 and 5 are all even. """
        for i in range(0, 6):
            with self.subTest(i==i):
                self.assertEqual(i % 2, 0)

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

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182048.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux firefox flashplayer 升级,redhat7升级自带的firefox浏览器并安装flash_player插件

    linux firefox flashplayer 升级,redhat7升级自带的firefox浏览器并安装flash_player插件升级自带的firefox浏览器linux这里使用的升级方法是直接用新版本的firefox软件包替换原来的firefox文件夹api一、下载firefox浏览器浏览器去firefox官网http://www.firefox.com.cn/找到linux版本下载spa二、找到下载的文件,在非root用户下解压firefox[vaon@stationDownloads]$tarjxfFirefox…

    2022年5月2日
    59
  • 将WebStorm快捷键修改为eclipse的快捷键风格

    将WebStorm快捷键修改为eclipse的快捷键风格说明:由于大家都熟练使用了eclipse、MyEclipse等软件,其快捷键也应用熟练,所以大家在用WebStorm时,可以将WebStorm的快捷键风格(映射)改为大家常用的eclipse风格快捷键。 修改方法  File(文件)–>Settings…(设置…)–>快捷键–>Keymap(快捷键映射)下拉选择eclipse,应用确定即可。  …

    2022年6月23日
    31
  • uboot的作用和功能

    uboot的作用和功能uboot是用来干什么的,有什么作用?uboot属于bootloader的一种,是用来引导启动内核的,它的最终目的就是,从flash中读出内核,放到内存中,启动内核所以,由上面描述的,就知道,UBOOT需要具有读写flash的能力。uboot是怎样引导启动内核的?uboot刚开始被放到flash中,板子上电后,会自动把其中的一部分代码拷到内存中执行,这部分代码负责把剩余的uboo…

    2022年6月15日
    54
  • 本地mysql文件浏览器_可视化数据库浏览器(SQLite Database Browser)

    本地mysql文件浏览器_可视化数据库浏览器(SQLite Database Browser)SQLiteDatabaseBrowser可以管理所有iphone数据,基于Qt库开发,主要是为非技术用户创建、修改和编辑SQLite数据库的工具,使用向导方式实现。用来处理SQLite3数据库文件的应用程序,它能够打开sqlite3数据库文件(常见的文件扩展名为.db,.db3,.s3db;只要文件是SQLite3数据库文件,其扩展名不规范也不要紧)。SQLiteDatabas…

    2022年9月9日
    0
  • 配置注册表数据库损坏

    配置注册表数据库损坏

    2021年9月29日
    51
  • JVM 优化实战[通俗易懂]

    JVM 优化实战[通俗易懂]本文讲解了JVM的内存划分和分配策略,并以截图和脚本展示常用可视化和命令行工具的使用方法,完整演示了JVM优化、内存泄露排查、gc.log分析方法等。作者:王克锋 出处:https://kefeng.wang/2016/11/22/java-jvm/ 版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。1GC相关内存1.1内存划分1.1.1堆(Heap)存放 newM…

    2022年6月9日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号