unittest框架

发布时间 2023-07-12 08:31:25作者: 姜旭凌

# unittest框架

认识unittest框架

是python里面一个单元测试的框架,并不直接表示单元测试。是python解释器自带的一个单元测试框架(标准库)

1689081141515

unittest的几个重要概念

  • TestCase:

    • 指的是测试用例 。可以说是unittest中最重要的一个类,也是测试用例类的父类,通过对其继承,使子类具备了执行测试的能力
  • TestFixture:指的是测试夹具

  • TestSuite:

    • 指的是测试套件。 多个测试用例(TestCase)的集合 。用来把测试用例放入测试套件里
  • TestRunner:

    • 指的是测试运行器。运行测试套件。测试运行器是一个组件,它协调测试的执行并将结果提供给用户。测试运行器可以使用图形界面、文本界面或返回一个特殊值来表示测试的执行结果。
  • TestLoader
    加载器。用来加载TestCase到TestSuite中

  • TextTestRunner
    运行器。是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。

  • TextTestResult
    保存测试结果,包括运行了多少用例,成功与失败多少等信息。

  • HTMLTestRunner
    是一个第三方的unittest HTML报告库

开始进行单元测试

1、先确定被测对象

2、写好TestCase:创建一个class继承unittest.TestCase,其中可以添加多个以test开头的方法,这就是测试用例。
3、由TestLoder加载TestCase到TestSuite中,TestCase中有多少个以test开头的方法,那么load到suite中就有多少个测试用例。
4、创建一个运行器。TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中。也可以使用HTMLTestRunner来运行TestSuite。
注意:
1、通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者也可以直接通过TextTestRunner来执行用例。
2、Runner执行时,默认将结果输出到控制台/终端,我们可以设置输出到文件,在文件中查看结果。也可以通过第三方支持包HTMLTestRunner将结果输出到Html中。

将产生用例加入到测试套件的四种方法

  • 创建测试套件
  • 加载用例到套件
  • 创建测试运行程序
  • 执行测试

第一种方法:(通过方法)

创建测试用例对象:第一参数是测试用例的方法名(必须要传)

case=TestLogin("方法名")
suite.addTest(case)

第二种方法:(通过类)

将测试用例类中所有的测试用例加入到测试套件

loader=unittest.Testloader()
suite.addTest(loader.loadTestsFromTestCase(Testlogin))

第三种方法:(通过文件模块)

loader=unittest.Testloader()
suite.addTest(loader.loadTestsFromModule(login))

第四种方法:(通过目录)

loader=unittest.Testloader()
suite.addTest(loader.discover(目录名))

unittest注意事项

  • TestCase的文件名和类名和函数名都使用test开头,其他文件名都不要使用test开头。不要同名,取名不要使用了已存在的模块或库的名字。

  • 文件名首字母小写。类名首字母大写,函数名首字母小写 ,尽量使用驼峰命名 。 (好的编程习惯)

用例编写规则

1.unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:

(1)测试文件必须先import unittest

(2)测试类必须继承unittest.TestCase

(3)测试方法必须以“test_”开头

(4)测试类必须要有unittest.main()方法

2.pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:

(1)测试文件名必须以“test_”开头或者"_test"结尾(如:test_ab.py)

(2)测试方法必须以“test_”开头。

(3)测试类命名以"Test"开头。

断言Assert

TestCase类提供了一系列的断言,即结果比对的函数

Method Checks that
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)

verbosity参数设置

  • 0 (静默模式): 你只能获得总的测试用例数和总的结果。
  • 1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “E”
  • 2 (详细模式):测试结果会显示每个测试用例的所有相关的信息 并且 你在命令行里加入不同的参数可以起到一样的效果

DDT

ddt:能够实现数据驱动,通过用例数据,自动生成测试用例。自动遍历用力数据,去生成测试用例。

每遍历出来一条用例的数据,会当成一个参数,传到生成的用例中去

  1. 准备用例数据
  2. 调用功能函数,获取实际结果
  3. 比对预期结果和实际结果s
from ddt import ddt,data
@ddt
class RegisterTestCase(unittest.TestCase):
	excel =ReadExcle("cases.xlsx",'register')
	cases=excle.read_data_obj()
	
	@data(*cases)
	def test_register(self,case):
		print(case.__dict__)