ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

unittest框架基础

2021-09-23 20:36:50  阅读:192  来源: 互联网

标签:code 框架 unittest 基础 测试用例 import msg suite


一、unittest框架最核心的四个概念

TestCase:一个TestCase中的用例就是一个测试用例

TestSuite:多个测试用例集合在一起;TestLoader:用来加载测试用例到测试套件中

TextTestRunner:用来执行测试用例

fixture:测试环境的搭建和销毁

二、测试用例类的创建

1、定义的测试用例类必须继承unittest.TestCase类

2、定义的测试用例类下定义的测试用例方法,其方法名必须以test开头

3、每条测试用例方法的逻辑代码按①准备用例数据;②获取实际结果;③断言的步骤编写

4、unittest中测试用例的执行顺序根据方法名按ASCII码进行排序

5、unittest是根据用例方法执行时,是否出现断言异常来判断用例是否通过

 

假设有一个名为login_check的登录功能函数需要测试,如下:

def login_check(username=None, password=None):
    if username != None and password != None:
        if username == 'python' and password == '123456':
            return {"code": 0, "msg": "登陆成功"}
        else:
            return {"code": 1, "msg": "账号或密码不正确"}
    else:
        return {"code": 1, "msg": "所有参数不能为空"}

为之编写了若干条测试用例:

"""

准备的部分测试用例:
1、账号密码正确
入参:账号python  密码123456
预期结果:{"code": 0, "msg": "登陆成功"}

2、账号正确,密码错误
入参:账号python  密码12345
预期结果:{"code": 1, "msg": "账号或密码不正确"}

3、账号错误,密码正确
入参:账号pyth  密码123456
预期结果:{"code": 1, "msg": "账号或密码不正确"}

4、账号为空
入参:账号为空  密码123456
预期结果:{"code": 1, "msg": "所有参数不能为空"}

5、密码为空
入参:账号python  密码为空
预期结果:{"code": 1, "msg": "所有参数不能为空"}

"""

 创建测试用例类:

import unittest
from exercise02.funcdemo_unittest import login_check


class LoginTestCase(unittest.TestCase):
    def test_login_pass(self):
        expected = {"code": 0, "msg": "登陆成功"}
        data = {"username": "python", "password": "123456"}
        res = login_check(**data)
        self.assertEqual(expected, res)

    def test_pwd_error(self):
        expected = {"code": 1, "msg": "账号或密码不正确"}
        data = {"username": "python", "password": "12345"}
        res = login_check(**data)
        self.assertEqual(expected, res)

    def test_acc_error(self):
        expected = {"code": 1, "msg": "账号或密码不正确"}
        data = {"username": "pyth", "password": "123456"}
        res = login_check(**data)
        self.assertEqual(expected, res)

    def test_acc_none(self):
        expected = {"code": 1, "msg": "所有参数不能为空"}
        data = {"username": None, "password": "123456"}
        res = login_check(**data)
        self.assertEqual(expected, res)

    def test_pwd_none(self):
        expected = {"code": 1, "msg": "所有参数不能为空"}
        data = {"username": "python", "password": None}
        res = login_check(**data)
        self.assertEqual(expected, res)

三、创建测试套件及加载测试用例

1、创建测试套件:suite=unittest.TestSuite()

2、加载测试用例(五种方式)

方式一:通过测试用例类加载

import unittest
from exercise02.testcases_unittest import LoginTestCase

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(LoginTestCase))

方式二:通过测试用例模块加载

import unittest
from exercise02 import testcases_unittest

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testcases_unittest))

方式三:通过路径加载(注:路径中测试用例所在模块的模块名也需要以test开头)

import unittest

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"F:\road_of_python\exercise02"))

方式四:一条一条用例加载

import unittest
from exercise02.testcases_unittest import LoginTestCase

suite = unittest.TestSuite()
case1 = LoginTestCase("test_login_pass")
suite.addTest(case1)

方式五:创建测试套件与加载测试用例合二为一

import unittest

suite = unittest.defaultTestLoader.discover(r"F:\road_of_python\exercise02")

四、执行测试用例

runnner=unittest.TextTestRunner()

runner.run(suite)

如:

# 通过测试用例类加载并执行
import unittest
from exercise02.testcases_unittest import LoginTestCase

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(LoginTestCase))
runner = unittest.TextTestRunner()
runner.run(suite)

五、生成测试报告

首先可以pip安装BeautifulReport这个库

然后将上述“执行测试用例”中两行代码替换:

import unittest
from exercise02.testcases_unittest import LoginTestCase
from BeautifulReport import BeautifulReport

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(LoginTestCase))
br = BeautifulReport(suite)
br.report("这是一份测试报告", "brreport.html")

 

标签:code,框架,unittest,基础,测试用例,import,msg,suite
来源: https://www.cnblogs.com/2orange/p/15324126.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有