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必看基础知识~ 续(七)Python基础测试收尾 ... -> 正文阅读

[开发测试]初识Python必看基础知识~ 续(七)Python基础测试收尾 ...


欢迎来到~ 初识Python 系列文章 “第七回”,大家好呀~ 我是 清汉


时隔半月鄙人再次浮出水面,水深氧少 ~(不写一篇憋得不行)

本系列最后一篇姗姗来迟~

在这里插入图片描述

本篇文章内容较少,但也是必不可少的一篇,不管学习哪种编程语言测试是必不可少的,测试可帮助我们找到程序种的BUG,让我们代码更加完美。写一个好的测试需要我们开动脑筋、发散思维,全方面的对我们的代码进行分析。

这里只介绍了再Python中如何编写测试,至于如何写一个好的测试~~

在这里插入图片描述


人生苦短,我学Python~


DIY 7

声明:未打广告,全文知识梳理来源于《Python编程 从入门到实践(第2版)》豆瓣评分9.3

注:例中所有 >>> 符号后为输出结果

- -snip- - 为代码省略位置



知识框图

关于整个python基础的知识脑图


第11章

测试代码

在这里插入图片描述


测试

  • 前边的几篇文章学习了函数、类,这里我们学习如何测试这些函数、类。
  • 通过测试,可确定我们编写的代码在面对各种输入时都能按照要求的运行工作,在用户发现问题前找出BUG。毕竟程序猿都会犯错,因此经常测试代码是一个良好的习惯。
  • 着重对自己编写的函数、类的重要行为进行测试,这样你就可以更加确定自己所做的工作不会破坏项目的其他部分,从而自由的改进既有的代码。如果不小心破化了原来的功能,你马上就会知道,而且能够比较轻松的修复问题。

测试函数

  • Python标准库中的模块 unittest 提供了代码测试工具。
  • 要为函数编写测试用例,可先导入模块 unittest和要测试的函数,再创建一个继承 unittest.TestCase 的类,并编写一系列方法对函数行为的不同方面进行测试。

断言方法

  • 核实得到的结果是否与期望的结果一致。
断言方法用途
assertEqual(a, b)核实 a == b
assertNotEqual(a, b)assertNotEqual(a, b)
assertTrue(x)核实 x 为 真
assertFalse(x)核实 X 为 假
assertIn(item, list)核实 item 在 list 中
assertNotIn(item, list)核实 item 不在 list 中
assertisinstance(a, b)核实 a 是 b 的实例
assertisNone(x)核实 x 是 None
# 一个返回整洁姓名的函数 #

def get_formatted_name(first_name, last_name, middle=''):
    '''返回整洁的姓名'''
    if middle:
        full_name = f"{first_name} {middle} {last_name}"

    else:
        full_name =first_name+' '+last_name
    return full_name.title()
# 测试用例

# 模块 unittest 提供代码测试工具
import unittest
from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase): # TestCase类,所有测试用例需要继承的基类
    '''测试 name_function.py'''

    # 所有以 test_ 打头的方法都将自动运行
    def test_first_last_name(self):
        '''能够正确的处理像 Janis Joplin 这样的姓名吗?'''
        formatted_name = get_formatted_name('janis', 'joplin')

        # assert 断言方法。 核实得到的结果是否与期望结果一致。
        # assertEqual(参1, 参2) :参1、参2,相等测试通过。
        self.assertEqual(formatted_name, 'Janis Joplin')

    def test_first_last_milld(self):
        '''能够正确的处理像 Wolfgang Amaeus Mozart 这样的姓名吗?'''
        formatted_name = get_formatted_name('wolfgang', 'mozart', 'amaeus')
        self.assertEqual(formatted_name, 'Wolfgang Amaeus Mozart')

# 注:不能将 unittest.main() 写到类中,否则测试用例会执行成功,但是不会有测试通过。
# 如果这个文件作为主程序执行,变量 __name__ 将被设置为 '__main__'
if __name__ == '__main__':
        # 调用 unittest.main() 来运行测试用例
        unittest.main()

已通过的测试

这是一个测试用例通过后向控制台输出的结果

未通过的测试

这是一个测试用例未通过向控制台输出的结果

测试用例未通过时,有两种情况。

  1. 测试用例中测试的内容有误,不符合函数的行为;如上面未通过的测试例子,这就需要修改测试了。
  2. 测试用例条件无误,意味着编写的代码有错。此时应修复导致测试不能通过的代码,找出导致函数行为不符合预期的修改。

测试类

  • 测试类与测试函数相差不大,也会用到 unittest 模块以及各种断言方法。
  • 下例中使用了方法 setUp()
    • unittest.TestCase类包含了方法setUp(),Python将先运行它,再运行各个以test_打头的方法。这样在你编写的每个测试方法中,都可以使用setUp()中创建的对象。
# 一个要测试的类

class AnonymousSurvey:
    '''收集匿名调查问卷的答案'''

    def __init__(self, question):
        '''存储一个问题,并为存储答案做准备'''
        self.question = question
        self.responses = []

    def show_question(self):
        '''显示调查问卷'''
        print(self.question)

    def store_response(self, new_response):
        '''存储单份调查问卷'''
        self.responses.append(new_response)
        
    def show_results(self):
        '''显示收集到的所有答案'''
        for respomse in self.responses:
            print(f"- {respomse}")
# 测试AnonymousSurvey

import unittest
from survey import AnonymousSurvey

class TestAnonymousSurvey(unittest.TestCase):
    '''测试 survey.py ,针对单个类 AnonymousSurvey 进行测试'''

    def setUp(self):
        '''方法 setUp() 创建一个调查对象和一组答案,供下列方法使用。'''
        question = "What language did you first learn to speak?"
        self.my_survey = AnonymousSurvey(question)
        self.responses = ['English', 'Spanish', 'Mandarin']

    def test_store_single_response(self):
        '''测试单个答案是否会被妥善储存'''
        self.my_survey.store_response(self.responses[0])
        self.assertIn(self.responses[0], self.my_survey.responses)
		# 断言方法assertIn()

    def test_store_three_response(self):
        '''测试三个答案是否会被妥善储存'''
        for response in self.responses:
            self.my_survey.store_response(response)
        for response in self.responses:
            self.assertIn(response, self.my_survey.responses)

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

在这里插入图片描述


本篇小结

  • 学习了如何使用 unittest 模块编写测试
  • 学习了如何编写继承 unittest.TestCase 的类
  • 学习了如何编写测试方法
  • 学习了如何使用方法setUp()高效的创建实例

作为初学者,并非为你所有的项目编写测试,然而参与工作量较大的项目时,你应该对自己所编写的函数、类的重要行为进行测试。这样你能够确定自己所做的工作不会破坏项目的其他部分,从而自由的改进既有的代码。

这是一张描述学习的表情包


感谢,每一位认真阅读到这里的少侠!来个手滑三联吧,不迷路~

一张猫咪比心的表情包
关于一键三联的图片


下期见,等你哟~


在这里插入图片描述

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:25:05  更:2021-08-20 15:25:13 
 
开发: 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/17 20:49:52-

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