python单元测试

python单元测试

目录

python单元测试

一、单元测试

1.定义:

2.单元测试准备

3.较为繁琐的单元测试的写法:用户登录login_check.py

二、unittest框架以及原理介绍

1.unittest框架最核心的四个概念:

2.使用unittest进行单元测试

3.unittest的执行,测试用例的执行

三、unittest单测步骤

1.创建一个测试套件unittest.TestSuite()

2.将测试用例加载到测试套件中

3.执行测试用例(需要先创建一个测试运行程序TextTestRunner())

4.例子

四、安装第三方库的文件

五、测试环境的搭建和销毁4种


一、单元测试

1.定义:

对单个模块或者是单个类或者是单个函数进行测试

一般就是单元测试,集成测试,系统测试,验收测试

2.单元测试准备

测试用例,测试案件,测试运行程序,测试环境的准备和恢复

3.较为繁琐的单元测试的写法:用户登录login_check.py

def login_check(username=None,password=None):
    """
    登录校验的函数
    :param username:账号
    :param password:密码
    :return: dict type
    """
    if username != None and password != None:
        if username == "python26" and password == "lemon":
            return {"code":0,"msg":"登录成功"}
        else:
            return {"code":1,"msg":"账号或密码不正确"}
    else:
        return {"code":1,"msg":"参数不能为空"}

#第一条用例
#入参:python26    密码:lemon
#预期结果:{"code":0,"msg":"登录成功"}

excepted={"code":0,"msg":"登录成功"}
#实际结果:
res=login_check("python26",password="lemon")
#判断预期是否等于实际结果:
if excepted==res:
    print("用例执行成功")
else:
    print("用例执行失败")

#断言assert
"""
断言条件不通过,会报错(断言异常)
断言条件通过,不会报异常。直接执行下一行代码
"""
assert excepted==res

 

二、unittest框架以及原理介绍

1.unittest框架最核心的四个概念:

  • TestCase:一个testcase的实例就是一个测试用例
  • TestSuite:多个测试用例集合在一起,TestLoader:是用来加载TestCase到TestSuite中的
  • TextTestRunner:用来执行测试用例的
  • fixture:测试用例环境的搭建合销毁。测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)

2.使用unittest进行单元测试

测试用例类:只要定义的类继承于unittest.TestCase那么这个类就说测试用例类

测试用例怎么写:在测试用例中定义以test开头的方法就是一条测试用例

unittest中评判断言是否通过的标准,是否出现断言错误

创建测试用例对象的时候,必须要传入用例的方法名
             例子:case1=LoginTest("test_login_pass")

原因:

unittest单元测试例子:testcase.py

import unittest
from learning.unittest.login import login_check

class LoginTest(unittest.TestCase):
    def test_login_pass(self):
        # 正常登录
        # 第一步:准备用例数据
        # 入参
        data = ("python26", "lemon")
        # 预期结果
        excepted = {"code": 0, "msg": "登录成功"}

        # 第二步:获取实际结果
        # 实际结果(传入参数,调用待测试的功能函数)
        # 元组进行拆包*
        res = login_check(*data)

        # 第三步:比较预期结果和实际结果(断言)
        # 断言预期和实际是否相等    assertEqual
        self.assertEqual(excepted, res)

    def test_user_is_none(self):
        #账号为空
        # 入参
        data = (None, "lemon")
        # 预期结果
        excepted = {"code": 1, "msg": "参数不能为空"}

        # 第二步:获取实际结果
        # 实际结果(传入参数,调用待测试的功能函数)
        # 元组进行拆包*
        res = login_check(*data)

        # 第三步:比较预期结果和实际结果(断言)
        # 断言预期和实际是否相等    assertEqual
        self.assertEqual(excepted, res)

# 创建测试用例对象的时候,必须要传入用例的方法名
case1=LoginTest("test_login_pass")

3.unittest的执行,测试用例的执行

  • 测试套件:使用unittest.TestSuite这个类创建出来的对象就是测试套件
  • 测试运行程序:使用unittest.TextTestRunner创建出来的对象,就是一个测试用例运行程序对象(执行用例的入口)
  • 测试运行程序后面会用第三方的,不使用unittest自带的
  • 用例加载对象:unittest.TestLoader
  • 测试用例执行的顺序:根据测试用例的方法名,按照码进行排序的(不是根据定义的先后顺序进行的)

 

三、unittest单测步骤

1.创建一个测试套件unittest.TestSuite()

2.将测试用例加载到测试套件中

  •     方法一:一条一条添加
#创建一个测试用例
case1=LoginTest("test_login_pass")
case2=LoginTest("test_user_is_none")

#将用例添加到套件中
suite.addTest(case1)
suite.addTest(case2)
  • 方法二:通过测试用例类进行添加:先加载对象TestLoader() 再使用 loadTestsFromTestCase()方法
# 创建一个用例加载对象后,调用loadTestsFromTestCase()方法,通过测试用例类来调用
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(LoginTest)
  • 方法三:通过用例模块来加载测试用例:先加载对象TestLoader() 再使用 loadTestsFromMoudle()方法

from learning.unittest import testcase      #测试用例模块导入
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testcase))
  • 方法四:通过路径去进行加载(默认会加载该路径下所有以test开头的模块的测试用例)【注:也可通过pattern来控制需要进行执行的文件】
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"D:\python\learning\unittest"),pattern="*.py")
#也可以写成测试用例类的默认加载器【unittest中默认的加载器】【扩展】
unittest.defaultTestLoader.discover(r"D:\python\learning\unittest",pattern="*.py")


3.执行测试用例(需要先创建一个测试运行程序TextTestRunner())

# 创建测试运行程序
runner = unittest.TextTestRunner()

runner=HTMLTestRunner(stream=open("report.html","wb"),title="26期测试报告",description="baobao",tester="想")  # 以覆盖写入二进制方式,调用了第三方插件

# 执行测试套件中的测试用例
runner.run(suite)

4.例子

import unittest
from HTMLTestRunnerNew import HTMLTestRunner

from learning.unittest.testcase import LoginTest

# 第一步:创建一个测试套件
suite = unittest.TestSuite()

# 第二步:将测试用例加载到测试套件中
# 第一种:一条一条添加
"""
#创建一个测试用例
case1=LoginTest("test_login_pass")
case2=LoginTest("test_user_is_none")

#将用例添加到套件中
suite.addTest(case1)
suite.addTest(case2)
"""

# 第二种:通过测试用例类进行添加
"""
# 创建一个用例加载对象后,调用loadTestsFromTestCase()方法,通过测试用例类来调用
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(LoginTest))
"""

# 第三种:通过用例模块来加载测试用例

from learning.unittest import testcase      #测试用例模块导入
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testcase))

# 第四种:通过路径去进行加载(默认会加载该路径下所有以test开头的模块的测试用例)【注:也可通过pattern来控制需要进行执行的文件】
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"D:\python\learning\unittest"),pattern="*.py")
#也可以写成测试用例类的默认加载器【unittest中默认的加载器】【扩展】
unittest.defaultTestLoader.discover(r"D:\python\learning\unittest",pattern="*.py")



#  第三步:执行测试用例(需要先创建一个测试运行程序)
# 创建测试运行程序
runner = unittest.TextTestRunner()

runner=HTMLTestRunner(stream=open("report.html","wb"),title="26期测试报告",description="baobao",tester="想")  # 以覆盖写入二进制方式,调用了第三方插件

# 执行测试套件中的测试用例
runner.run(suite)

 

四、安装第三方库的文件

 

五、测试环境的搭建和销毁4种

    def setUp(self):
        print("该方法在每一条用例执行之前会调用")

    def tearDown(self):
        print("该方法在每一条用例执行之后会调用")

    @classmethod
    def setUpClass(cls):
        print("该方法在测试类中的用例执行之前会调用")

    @classmethod
    def tearDownClass(cls):
        print("该方法在测试类中的所有用例执行之后会调用")


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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值