unittest框架

​ 做过自动化测试的同学应该都知道python中的unittest框架,它是python自带的一套测试框架,学习起来也相对较容易,unittest框架最核心的四个概念:

test case: 就是我们的测试用例,unittest中提供了一个基本类TestCase,可以用来创建新的测试用例,一个TestCase的实例就是一个测试用例;unittest中测试用例方法都是以test开头的,且执行顺序会按照方法名的ASCII值排序。

test fixture: 测试夹具,用于测试用例环境的搭建和销毁。即用例测试前准备环境的搭建(SetUp前置条件),测试后环境的还原(TearDown后置条件),比如测试前需要登录获取token等就是测试用例需要的环境,运行完后执行下一个用例前需要还原环境,以免影响下一条用例的测试结果。

test suite: 测试套件,用来把需要一起执行的测试用例集中放到一块执行,相当于一个篮子。我们可以使用TestLoader来加载测试用例到测试套件中。

test runner: 用来执行测试用例的,并返回测试用例的执行结果。它还可以用图形或者文本接口,把返回的测试结果更形象的展现出来,如:HTMLTestRunner。

1.TestCase测试用例
首先导入unittest单元测试框架
unittest单元测试框架写的测试类都默都继承unittest.TestCase子类。测试类下的测试方法啊都必须以test开头,否则不会被执行

import unittest


class MyTestCase(unittest.TestCase):
    def test_something(self):
        self.assertEqual(True, False)
        
    def test_case1(self):
        a = 1
        b = 2
        self.assertEqual(a,b,"不相同")
        
    def test_case2(self)
        self.assertEqual(True, True)
        
        
if __name__ == '__main__':
    unittest.main()

在这里插入图片描述

2.TestFixure测试夹具
setUp()和tearDown()的案例

import unittest


class MyTestCase(unittest.TestCase):
    def setUp(self):
        print('每条用例执行前做的操作.....')

    def tearDown(self):
        print('每条用例执行后做的操作......')

    def test_case1(self):
        print('第一条用例')
        a = 1
        b = 2
        self.assertEqual(a,b,"不相同")


    def test_case2(self):
        self.assertEqual(True, True)
        print('第二条用例')
    def test_something(self):
        print('第三条用例')
        self.assertEqual(True, False)

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

在这里插入图片描述
setUpClass()整个测试用例类中的用例执行之前,会先执行此方法
tearDownClass()整个测试用例类中的用例执行之后,会先执行此方法

import unittest


class MyTestCase(unittest.TestCase):
    @classmethod	# 指明这是个类方法以类为维度去执行的
    def setUpClass(cls):
        # 整个测试用例类中的用例执行之前,会先执行此方法
        print("-----setup---class-----")

    @classmethod
    def tearDownClass(cls):
        # 整个测试用例类中的用例执行完之后,会执行此方法
        print("-----teardown---class-----")

    def setUp(self):
        print('每条用例执行前做的操作.....')

    def tearDown(self):
        print('每条用例执行后做的操作......')

    def test_case1(self):
        print('第一条用例')
        a = 1
        b = 2
        self.assertEqual(a,b,"不相同")


    def test_case2(self):
        self.assertEqual(True, True)
        print('第二条用例')
    def test_something(self):
        print('第三条用例')
        self.assertEqual(True, False)

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

3.TestSuite测试套件

unittest.TestSuite() 类来表示一个测试用例集,把需要执行的用例类或模块存到一起,常用的方法如下:

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

# run_test.py,与test_case.py同一项目(ZDHLX)下
import unittest
from ZDHLX import test_case
# 第一步,创建一个测试套件
suite = unittest.TestSuite()
# 第二步:将测试用例,加载到测试套件中
#方式1,添加单条测试用例
# case1 = test_case.MyTestCase('test_case1')# 创建一个用例对象,注意:通过用例类去创建测试用例对象的时候,需要传入用例的方法名(字符串类型)
# suite.addTest(case1)# 添加用例到测试套件中

# # 方式2,添加多条测试用例
# case1 = test_case.MyTestCase('test_case1')
# case2 = test_case.MyTestCase("test_case2")
# suite.addTests([case1,case2])	# 添加用例到测试套件中
#
# 方式3,添加一个测试用例类
# loader = unittest.TestLoader()	# 创建一个加载对象
# suite.addTest(loader.loadTestsFromTestCase(test_case.MyTestCase))  #添加测试类
# #
# 方式4,添加一个模块
# loader = unittest.TestLoader()	# 创建一个加载对象
# suite.addTest(loader.loadTestsFromModule(test_case))  #添加测试模块

# 方式5,指定测试用例的所在的目录路径,进行加载
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"D:\testpy3\ZDHLX"))  #添加指定目录文件
# suite.addTest(loader.discover(start_dir = r"D:\testpy3\ZDHLX", pattern="test_case*.py"))		# 匹配规则:所有以test_case开头的

4.TestRunner执行用例
html格式的就是HTMLTestRunner了,HTMLTestRunner是 Python 标准库的 unittest 框架的一个扩展,它可以生成一个直观清晰的 HTML 测试报告。使用的前提就是要下载 HTMLTestRunner.py,下载完后放在python的安装目录下的Lib目录下即可。

# run_test.py,与test_case.py同一项目(ZDHLX)下
import unittest
from ZDHLX import test_case
from HTMLTestRunner import HTMLTestRunner
# 第一步,创建一个测试套件
suite = unittest.TestSuite()
# 第二步:将测试用例,加载到测试套件中
#方式1,添加单条测试用例
# case1 = test_case.MyTestCase('test_case1')# 创建一个用例对象,注意:通过用例类去创建测试用例对象的时候,需要传入用例的方法名(字符串类型)
# suite.addTest(case1)# 添加用例到测试套件中

# # 方式2,添加多条测试用例
# case1 = test_case.MyTestCase('test_case1')
# case2 = test_case.MyTestCase("test_case2")
# suite.addTests([case1,case2])	# 添加用例到测试套件中
#
# 方式3,添加一个测试用例类
# loader = unittest.TestLoader()	# 创建一个加载对象
# suite.addTest(loader.loadTestsFromTestCase(test_case.MyTestCase))  #添加测试类
# #
# 方式4,添加一个模块
# loader = unittest.TestLoader()	# 创建一个加载对象
# suite.addTest(loader.loadTestsFromModule(test_case))  #添加测试模块

# 方式5,指定测试用例的所在的目录路径,进行加载
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"D:\testpy3\ZDHLX"))  #添加指定目录文件
# suite.addTest(loader.discover(start_dir = r"D:\testpy3\ZDHLX", pattern="test_case*.py"))		# 匹配规则:所有以test_case开头的
# 创建测试运行程序启动器
runner = HTMLTestRunner(stream=open("report.html", "wb"),  # 打开一个报告文件,将句柄传给stream
                        description="我的测试报告",        # 报告中显示的描述信息
                        title="自动化测试报告")                 # 报告的标题

# 使用启动器去执行测试套件里的用例
runner.run(suite)

在这里插入图片描述
断言
unittest框架中也提供了一个自带的断言方式,主要有以下几种:

方法检查
assertEqual(a, b,msg=None)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)
​ 如果断言失败即不通过就会抛出一个AssertionError断言错误,成功则标识为通过,以上几种方式都有一个共同点,就是都有一个msg参数(表中只列了一个,其实都有),默认是None,即msg = None,如果指定msg参数的值,则将该信息作为失败的错误信息返回。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值