IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Python单元测试unittest -> 正文阅读

[开发测试]Python单元测试unittest

1.单元测试

对功能/代码的最小单元进行测试。

对函数或者类当中的方法进行测试就是单元测试。

在python当中进行测试时,使用assert,而不是if...

语法:assert?预期结果 ==?实际结果

当使用assert进行断言时,如果测试通过,程序正常执行,测试不通过会报错AssertionError

# if actual == expected:
#     print('ok')
# else:
#     print('not ok')
# assert 断言
assert actual == expected

在不使用任何框架的前提下,其实也是可以进行单元测试的,比如我们可以通过if判断、异常处理或者是其他的流程控制来表示测试是否通过。

def add(a, b):
    # 被测函数,被测单元,被测功能
    return a + b


# a=1 b=1 expected =2
def test_demo():
    # 测试用例
    actual = add(1, 1)
    expected = 2
    # if actual == expected:
    #     print('ok')
    # else:
    #     print('not ok')
    # assert 断言
    assert actual == expected


test_demo()
# 在python当中进行测试时,使用assert,而不是if
# 当使用assert进行断言时,如果测试通过,程序正常执行,测试不通过会报错AssertionError

?运行结果:

当测试不通过时,报错AssertionError,这时可以使用try...expect去捕获异常,这样不会影响后续的代码运行。

def add(a, b):
    # 被测函数,被测单元,被测功能
    return a + b


# a=1 b=1 expected =2
def test_demo():
    # 测试用例
    actual = add(1, 1)
    expected = 3
    # if actual == expected:
    #     print('ok')
    # else:
    #     print('not ok')
    # assert 断言
    assert actual == expected


test_demo()
# 在python当中进行测试时,使用assert,而不是if
# 当使用assert进行断言时,如果测试通过,程序正常执行,测试不通过会报错AssertionError

当没有使用单元测试框架之前,我们确实可以做自动化测试,但需要手工做到以下几点:

1)测试用例函数,手工去调用测试函数;

2)当用例失败之后,需要加try捕获异常,才不会影响后续代码运行;

3)怎么去收集用例放到一个统一的模块里面;

4)还要手工写测试报告。

而使用单元测试框架,可以极大的简化我们对单元测试的过程,使用单元测试框架以后,框架会帮我们自动去收集用例,运行用例,生成报告。

2.单元测试框架

本质是提供一个工具的集合,我们直接使用就可以,使用手工完成的步骤它都可以自动完成。

unittest是python内置的单元测试框架,不需要安装;pytest是第三方单元测试框架,需要安装,但功能更强大。

unittest框架的特点:

1.带来的好处是便利;

2.但是学习成本也高,既定的框架都有相应的规则,我们使用它,就要遵守它的规则;

3.unittest也需要遵守很多规则。

unittest的几个概念:

  • test?case:测试用例
  • test?suite :测试集/测试套件
  • test?loader:测试加载
  • test?runner:运行器,执行器
  • fixture:夹具,前置准备和后置清理

Test Case

unittest用法:

1.继承unittest.TestCase,编写以test_开头的方法名作为测试用例

2.使用unittest运行用例(代码左侧的播放键)

3.self.assertEqual(actual, expected)比对结果

import unittest


def login(username, pwd):
    if username is None or pwd is None:
        result = {'code': '400', 'msg': '用户名或密码为空'}
    if username == 'kunkun' and pwd == '123':
        result = {'code': '200', 'msg': '登录成功'}
    else:
        result = {'code': '300', 'msg': '用户名或密码为空'}
    return result


# 类遵守规则:必须继承 unittest。TestCase
# 类名以Test开头
class TestLogin(unittest.TestCase):
    # 测试用例方法名以test开头
    def test_login_1(self):
        username, pwd = 'kunkun', '123'
        actual = login(username, pwd)
        expected = {'code': '200', 'msg': '登录成功'}
        self.assertEqual(actual, expected)

    def test_login_2(self):
        username, pwd = 'pang', '123'
        actual = login(username, pwd)
        expected = {'code': '100', 'msg': '用户名不正确'}
        self.assertEqual(actual, expected)

运行结果:(.表示运行通过,F表示不通过且给出预期和实际结果)

?收集用例

suite = unittest.defaultTestLoader.discover('目录名','test*.py')--找到该目录下的所有以test开头的py文件,'test*.py'可省略不写,同一层级目录下,目录名可为空

运行用例

runner = unittest.TextTestRunner()
runner.run(suite)

现在我们将所有的测试用例都放在tests这个文件夹内的test_unittest.py文件内,test_demo是新建的py文件,run.py是收集用例和运行用例的文件,各文件目录如下图所示:

?test_demo.py文件内容如下:

#创建时间:2021-9-27
import unittest

class TestDemo(unittest.TestCase):
    def test_demo(self):
        pass

test_unittest.py文件内容如下:

#创建时间:2021-9-27
import unittest


def login(username, pwd):
    if username is None or pwd is None:
        result = {'code': '400', 'msg': '用户名或密码为空'}
    if username == 'kunkun' and pwd == '123':
        result = {'code': '200', 'msg': '登录成功'}
    else:
        result = {'code': '300', 'msg': '用户名或密码为空'}
    return result


# 类遵守规则:必须继承 unittest。TestCase
# 类名以Test开头
class TestLogin(unittest.TestCase):
    # 测试用例方法名以test开头
    def test_login_1(self):
        username, pwd = 'kunkun', '123'
        actual = login(username, pwd)
        expected = {'code': '200', 'msg': '登录成功'}
        # assert expected == actual
        self.assertEqual(actual, expected)

    def test_login_2(self):
        username, pwd = 'pang', '123'
        actual = login(username, pwd)
        expected = {'code': '100', 'msg': '用户名不正确'}
        # assert expected == actual
        self.assertEqual(actual, expected)

run.py文件内容如下:

# 创建时间:2021-9-27
# 运行所有用例
import unittest
# 收集用例
suite = unittest.defaultTestLoader.discover('tests')
# 运行用例
runner = unittest.TextTestRunner()
runner.run(suite)

run.py运行结果:

?生成测试报告

  • unittestreport:柠檬班老师研发,可以支持三种风格的报告模板,自定义参数报告名称,测试人员等,需要另外安装插件,最后会有安装说明。
import unittestreport
# title='',tester='',templates=1/2/3 可以省略,使用默认值
runner = unittestreport.TestRunner(suite,title='',tester='',templates=1/2/3) 
runner.run()

此时run.py文件内容如下:

# 运行所有用例
import unittest
import unittestreport
# 收集用例
suite = unittest.defaultTestLoader.discover('tests')
# 运行用例
# runner = unittest.TextTestRunner()
# runner.run(suite)
# 生成测试报告
runner = unittestreport.TestRunner(suite)
runner.run()

运行结果如下:

查看报告内容:报告是html格式的文件,直接点击浏览器图标,可在浏览器中查看报告内容。

?截取浏览器中部分效果图如下:

  • beautifulreport:仅支持一种模板,目前很主流的报告模板
from BeautifulReport import BeautifulReport 或者 import BeautifulReport 
runner = BeautifulReport(suite)
runner.report('测试报告')

安装unittestreport

第一种方法:位置:File->Settings->Project:文件名->Project Interpreter:点击+号在弹出界面中搜索“unittestreport”,然后点击底部【Install Package】按钮。

?第二种方法:切换到Terminal界面,输入pip install unittestreport,回车即可。

安装beautifulreport

切换到Terminal界面,输入pip install beautifulreport,回车即可。

如果pip?install安装不成功,可能是因为安装服务部署在国外,不能响应导致中断,可以使用python国内镜像库进行安装,安装命令:

unittestreport:pip install -i?http://mirrors.aliyun.com/pypi/simple/?unittestreport

beautifulreport:pip install -i??http://mirrors.aliyun.com/pypi/simple/?beautifulreport

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:36:19  更:2021-09-29 10:37:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:23:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码