unittest框架基础

一、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")

 

上一篇:【unittest】编写并运行测试用例方法


下一篇:pytest学习和使用3-对比unittest和pytest脚本在pycharm中运行的方式