unittest框架系列一(unittest初识)

想了很久还是打算就unittest测试框架做一个系列的分析,unittest是我接触的最早的一款python的测试框架,希望对于以前的一些东西的一些回顾,和对新特性的学习能够帮助新手更快的入门。本篇unittest系列文章会结合最新的unittest官方文档,包含老的特性的同时,讲解一些新的特性,unittest框架虽然是基础的python测试框架,在测试颗粒度、第三方测试插件支持等方面较pytest要弱,但是在测试工作中仍然在广泛的使用,也是一名自动化测试工程师必学的框架之一。

欢迎加入测试交流群:夜行者自动化测试(816489363)进行交流学习QAQ

                                                                                                                        –成都-阿木木

软件测试常用测试框架:

java:junit

java:testng

python:unittest

python:pytest

unittest支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中以及测试与报告框架的独立性。该unittest模块提供的类可轻松支持一组测试的这些质量。

使用unittest之前,先了解unittest的一些重要概念:

test fixture:

​ Test Fixture用在测试方法前,或者测试方法后,主要功能是提供一些测试需要用的装置,这些装置可以是数据,可以是环境配置也可以是一个运行前状态。简单说,就是数据初始化,以及数据销毁,使用内置的setup/teardown/setUpClass/tradDownClass。

test case:

​ 测试用例是测试的最小单位。它检查对一组特定输入的特定响应。 unittest提供了一个基类, TestCase可用于创建新的测试用例。即创建对应你测试用例的脚本。

test suite:

​ 一个测试套件是测试用例,测试套件,或两者的集合。它用于汇总应一起执行的测试。即测试套件之间可以嵌套,也可以只有一个测试套件,在套件中包含测试用例。

test runner :

​ 测试运行是编排的测试的执行,并提供结果给用户的部件。也就是相当于,框架的入口,他会收集脚本,执行脚本,输出结果。

通过TestCase和FunctionTestCase类支持测试用例和测试夹具概念 。在创建新测试时应使用前者,而在将现有测试代码与 unittest驱动框架集成时可以使用后者。FunctionTestCase会放在后面作为高级的一部分给大家进行分享讲解,在实际工作中通常也只会用到TestCase。

测试套件由TestSuite类实现。此类允许单个测试和测试套件的聚合;执行套件时,将运行直接添加到套件和子测试套件中的所有测试。

测试运行程序是提供单个方法的对象,该方法 run()接受TestCase或TestSuite 对象作为参数,并返回结果对象。TestResult提供该类 以用作结果对象。unittest 提供了TextTestRunner一个示例测试运行器,该运行器默认情况下报告标准错误流上的测试结果。

#!/user/bin/env python# -*- coding: utf-8 -*-"""

------------------------------------

@Project : mysite

@Time    : 2020/8/28 11:32

@Auth    : chineseluo

@Email  : [email protected]

@File    : unittest_demo.py

@IDE    : PyCharm

------------------------------------

"""importunittest# 继承unittest.TestCaseclassTestStringMethods(unittest.TestCase):# 每一个测试方法以test开头,才可以被runner扫描到deftest_upper(self):self.assertEqual('foo'.upper(),'FOO')deftest_isupper(self):self.assertTrue('FOO'.isupper())self.assertFalse('Foo'.isupper())deftest_split(self):s='hello world'# 检查分割后的字符串是否相等,比较的s.split()这个分割后的列表与['hello', 'world']是否相等self.assertEqual(s.split(),['hello','world'])# 断言是否会抛出TypeError异常withself.assertRaises(TypeError):s.split(2)if__name__=='__main__':unittest.main()

​ 通过子类创建测试用例unittest.TestCase。这三个单独的测试使用名称以字母开头的方法定义 test。该命名约定将告知runner那些测试方法能够被扫描到。

​ 每个测试要求assertEqual()检查预期结果。assertTrue()或assertFalse() 验证条件;或assertRaises()验证是否引发了特定的异常。使用这些方法代替 assert语句,因此测试运行程序可以累积所有测试结果并生成报告。

​ 该setUp()和tearDown()方法允许你定义将在每次测试方法之后执行的指令。在组织测试代码部分中将更详细地介绍它们。

运行测试用例的几种方式:

1、粗粒度的运行,运行该py文件先继承unittest.TestCase的所有测试类中的所有测试方法。

unittest.main()

2、细粒度的运行(后面有部分会补充说明)

loadTestsFromTestCase(testCaseClass):按测试用例

loadTestsFromModule(module, pattern=None):按测试模块不在维护

loadTestsFromName(name, module=None):按测试方法名,name是一个string,name格式module.class.method

loadTestsFromNames(name, module=None):按测试方法名列表,names是一个list,用法与上同

discover(start_dir, pattern=’test*.py’, top_level_dir=None):自动扫描目录,按照匹配规则匹配测试文件,执行测试

suite=unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)unittest.TextTestRunner(verbosity=2).run(suite)

3、命令行界面运行

以模块为单位来运行测试用例:

python -m unittest test_module1

python -m unittest test_module1 test_module2

以测试类为单位来运行测试用例:python -m unittest test_module.TestClass

以测试方法为单位来运行测试用例:

运行一个测试类中的一个方法python -m unittest test_module.TestClass.test_method

运行一个测试类中的多个方法python -m unittest unittest_demo.TestStringMethods.test_split unittest_demo.TestStringMethods.test_isupper

可以通过测试路径来进行测试模块的执行:python.exe -m unittest path/to/test_file.py

可以增加 -v 参数获取更详细的输出。

例:python -m unittest -v test_module1

用于命令行选项的列表:python -m unittest -h

命令行选项

**unittest**支持以下命令行选项:

-b, --buffer

在测试运行期间,将缓冲标准输出和标准错误流。通过测试期间的输出将被丢弃。在测试失败或错误时,通常会回显输出,并将其添加到失败消息中。

-c, --catch

Control-C在测试运行期间,等待当前测试结束,然后报告到目前为止的所有结果。一秒钟Control-C引发正常 KeyboardInterrupt异常。有关提供此功能的功能,请参见信号处理。

-f, --failfast:在第一个错误或失败时停止测试运行。

命令行discover,扫描测试目录,发现符合unittest匹配规则的测试模块、测试类、测试方法:

-v, --verbose

详细输出

-s, --start-directory directory`

开始发现的目录(.默认)

-p, --pattern pattern

模式以匹配测试文件(test*.py默认)

-t, --top-level-directory directory

项目的顶层目录(默认为起始目录)

的-s,-p和-t选项可以作为的顺序位置参数传递。以下两个命令行是等效的:

python-m unittest discover-s project_directory-p"*_test.py"python-m unittest discover project_directory"*_test.py"

查看discover命令行选项:python -m unittest discover -h

欢迎加入测试交流群:夜行者自动化测试(816489363)进行交流学习QAQ

你可能感兴趣的:(unittest框架系列一(unittest初识))