【学习笔记】单元测试

一.单元测试基础

1.单元测试是什么

单元测试一般是针对某个模块,或者开发出来的某个类,某一个部分进行测试,做单元测试,可以从代码的层次对程序检测,从编码的方面提前发现bug,进行bug定位。

我们做单元测试可以来测试自己的代码,以及利用单元测试完成自动化项目

2.模块

unittest
pytest

3.测试用例
  • 测试用例+期望结果excepted
  • 执行测试
  • 测试结果:使用assert断言:实际结果和期望结果进行比对
  • 测试报告

二.编写用例类

1.用例环境
    # 重写这两个函数
    # 测试准备环境,在每条用例执行之前调用
    def setUp(self):
        print("start testing")

    # 测试清除环境,在每条用例执行之前调用
    def tearDown(self):
        print("end testing")
2.编写测试用例

a.右键点击对应的测试用例执行会把函数当成用例执行,先执行setup,最后执行teardown

    def test_001_add_positive(self):
        a = 1
        b = 2
        c = a+b
        print("测试结果是{}".format(c))

执行顺序按照ASCII编码字符的顺序执行,建议命名如示例

b.用例增加断言,并抛出异常

def test_002_add_negative(self):
        a = -1
        b = -2
        c = a+b
        expected = -2
        try:
            self.assertEqual(expected, c)
        except AssertionError as e:
            print("报错了错误是{}".format(e))
            raise e
        print("测试结果是{}".format(c))
编写用例代码
import unittest

class TestAdd(unittest.TestCase):

    # 重写这两个函数
    # 测试准备环境,在每条用例执行之前调用
    def setUp(self):
        print("start testing")

    # 测试清除环境,在每条用例执行之前调用
    def tearDown(self):
        print("end testing")

    # 编写用例,一定要以test开头(unittest模块约定),一个函数代表一个用例
    def test_001_add_positive(self):
        a = 1
        b = 2
        c = a+b
        expected = 4
        try:
            self.assertEqual(expected,c)
        except AssertionError as e:
            print("报错了错误是{}".format(e))
        print("测试结果是{}".format(c))

    def test_002_add_negative(self):
        a = -1
        b = -2
        c = a+b
        expected = -2
        try:
            self.assertEqual(expected, c)
        except AssertionError as e:
            print("报错了错误是{}".format(e))
        print("测试结果是{}".format(c))

    def test_003_add_zero(self):
        a = 0
        b = 0
        c = a+b
        expected = 1
        try:
            self.assertEqual(expected, c)
        except AssertionError as e:
            print("报错了错误是{}".format(e))
        print("测试结果是{}".format(c))

三.执行用例

使用另外一个py文件,导入测试类

import unittest
from preview.py_unittest.py_unittest import *

'''添加用例TestSuite'''
# 创建测试套件,用于收集存储用例
suite = unittest.TestSuite()
# 测试用例的实例
suite.addTest(TestAdd("test_001_add_positive"))
suite.addTest(TestAdd("test_002_add_negative"))

'''执行用例TestTextRunner'''
runner = unittest.TextTestRunner()
runner.run(suite)
1.TextTestRunner:
runner = unittest.TextTestRunner(stream=None, descriptions=True, verbosity=1)
  • stream 参数表示结果输出的位置,这里可以改成结果文件,如下
with open("test.txt","w") as file:
    runner = unittest.TextTestRunner(stream=file, descriptions=True, verbosity=1)
    runner.run(suite)
  • verbosity 参数表示结果的详细程度,从0到2,数字越大结果越详细
2.加载用例

方式1:通过测试用例添加

suite.addTest(TestAdd("test_001_add_positive"))
suite.addTest(TestAdd("test_002_add_negative"))

方式2:通过测试类来添加用例

loader =unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestAdd))

方式3:通过模块来添加

对应的导入模块也要变化

import unittest
from preview.py_unittest import unit_test

loader =unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(unit_test))
执行用例代码

import unittest
from preview.py_unittest.unit_test import *

'''添加用例TestSuite'''
# 创建测试套件,用于收集存储用例
suite = unittest.TestSuite()


'''加载用例方式2'''
loader =unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestAdd))

'''执行用例TestTextRunner'''
with open("test.txt","w") as file:
    runner = unittest.TextTestRunner(stream=file, descriptions=True, verbosity=1)
    runner.run(suite)

四.结果分析

1.控制台输出
..

----------------------------------------------------------------------

Ran 2 tests in 0.000s

OK

第一行:

  • 点.表示一条用例测试通过,这里表示两条用例测试通过,有两个点
  • E表示一条用例报错,error
  • F表示一条用例测试未通过,fail
2.测试报告

HTMLTestRunnerNew模块(模块网盘)

def __init__(self, stream=sys.stdout, verbosity=2,title=None,description=None,tester=None):
  • stream:报告输出的位置
  • verbosity:报告详细等级
  • title=None
  • description=None
  • tester=None
import unittest
from preview.py_unittest . unit_test import *
from preview.py_unittest import HTMLTestRunnerNew

'''添加用例TestSuite'''
# 创建测试套件,用于收集存储用例
suite = unittest.TestSuite()

suite.addTest(TestAdd("test_001_add_positive"))
suite.addTest(TestAdd("test_002_add_negative"))
suite.addTest(TestAdd("test_003_add_zero"))

'''执行用例TestTextRunner'''
with open("test0304.html","wb") as file:
    runner  = HTMLTestRunnerNew.HTMLTestRunner(stream=file,verbosity=2,title="20190307",description="描述信息",tester="Ben")
    runner.run(suite)

五.断言

断言类型整理

断言语法解释
assertEqual(a,b)判断a==b
assertNotEqual(a,b)判断a!=b
assertIs(a,b)a is b(内存地址)
assertIsNone(a,b)判断结果是否为空
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值