| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> Python学习24:unittest框架入门 -> 正文阅读 |
|
[开发测试]Python学习24:unittest框架入门 |
笔者:风起怨江南?出处:https://blog.csdn.net/JackMengJin?笔者原创,文章转载需注明,如果喜欢请点赞+关注,感谢支持! 导读:python官方自带的单元测试框架——unittest框架。上手简单但功能强大,是python自动化测试必须要掌握的技能,希望本文对大家学习unittest框架有些许帮助。 目录 unittest框架入门unittest框架是python内置的单元测试框架,类似Java的JUnit框架、.Net的NUnit框架等。
python自动化测试的学习中unittest框架是基础,要理解unittest框架的工作原理就要先清楚单元测试的概念。 ? 一、测试阶段——单元测试单元测试单元测试(Unit Testing)又称为模块测试,简单来说就是对软件里最小的单元进行测试。 单元:函数、类、方法、一段代码块都可以称之为单元,单元是应用的最小可测试部件。单元测试其实就是测的类和函数,是否是按照自己定义好的去执行。 单元测试意义:为了从底层发现bug,减少合成后出现的问题。优点就是投入小,收益大,能够精准更早的发现问题。黑盒测试方法进行功能测试,而白盒测试方法进行单元测试,一般由开发自测。 而除了单元测试还有集成测试、系统测试和验收测试。 单元测试举例 用一个简单的登陆功能函数来说明下:
设计几个场景的测试用例来对该函数进行单元测试。 场景1:账号密码正确
场景2:账号正确,密码错误
场景3:账号错误,密码正确
场景4:账号为空
场景5:密码为空
unittest具体实现 模块导入:import unittest
集成测试单个的功能模块测试通过之后,才是集成测试(Intergration Testing)。而黑盒测试,白盒测试和灰盒测试方法都可以进行集成测试。
定义:单元测试通过后把单个功能模块集成起来做集成测试。 目的:虽然软件的所有模块已经在单元测试中进行了测试,但由于以下原因仍然存在错误:
系统测试
定义:系统测试(System Testing)是一系列不同类型的测试用来针对集成软件的全部工作,包括测试完全集成的软件系统。 测试内容:系统测试是测试整个系统的功能和性能,相较之集成测试则是测试各个单元模块之间的接口。 验收测试定义:对要交付的产品根据验收细则进行验收测试(Acceptance Testing),也称为交付测试,验收测试通过后会交给客户验收产品。
Beta 测试:Beta测试由最终用户实施,通常开发(或其他非最终用户)组织对其的管理很少或不进行管理。Beta测试是所有验收测试策略中最主观的。 β测试:β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。 二、unittest框架四件套unittest框架的核心内容就是unittest四件套:TestCase、TestSuite、Fixture、TextTestRunner。 TestCase
定义:在unittest中测试用例表示为?unittest.TestCase?的实例。通过编写TestCase的子类或使用?FunctionTestCase?编写你自己的测试用例。 TestCase表示为测试用例,一个TestCase的实例就是一个测试用例。一个TestCase实例的测试代码完全可以独立运行,或与其它任意组合任意数量的测试用例一起运行。 TestCase最简单的子类需要实现一个测试方法以执行特定的测试代码,命名以test开头的方法:
这里TestCase提供的assert*() 方法进行断言处理。 断言定义:自动去检查预期结果和实际结果是否相等。 判断一句话是否为真,如果为真就是成功,为假就是失败。 断言机制:测试不通过会引发一个带有说明信息的异常,并且unittest会将这个测试用例标记为测试不通过。判断预期结果和实际结果是否存在某种关系,也就是断言 assert。测试用例通过,预期结果等于实际结果,说明断言成功,用例也就成功,反之为失败。 assertEqual:判断两个参数是否相等。 assertTrue:表达式。
断言优点:assert断言简单直接,如果失败直接报错并抛出异常。单用例出现异常,不会影响其他用例,能保证每个测试用例的独立性。 ?? 异常报错:AssertionError,断言只关注用例失败的操作,对于unittest框架来说一个用例一个断言。后续会单独出文章详细讲解 assert*() 各种断言方法的使用。 ? TestSuite定义:TestSuite表示为测试套件,一系列的测试用例集合在一起生成测试集。而多个测试运行的顺序由内置字符串排序方法也就是ASCII映射关系表对测试名进行排序的结果决定。 执行顺序:由于是通过ASCII映射关系决定的顺序,所以可以增加数字来改变执行顺序。 unittest.TestSuite()用法 addTest():添加单个测试用例方法。
addTests([..]):添加多个测试用例方法,方法名存在一个列表。
TestLoader 定义:加载器,用来加载TestCase到TestSuite,和TestSuite配合使用。 初始化加载器对象:unittest.TestLoader()
unittest.TestLoader()用法 loadTestsFromTestCase(测试类名):添加一个测试类。
loadTestsFromModule(模块名):FromModule(),通过模块加载。 loader.loadTestsFromModule(),参数传入列表:[suite_login,suite_register]
discover(测试用例的所在目录):指定目录去加载,会自动寻找这个目录下所有符合命名规则(test*)的测试用例。test
module和discover区别:discover将所有用例都放在suit集合里,而module是单独加载的方式,需要一个个手动添加,最后再合入。 TestRunner定义:TestRunner是一个用于执行和输出测试结果的组件,表示为测试运行程序。用来执行测试用例,Runner运行器可能使用图形接口或者文本接口来生成测试报告。 TextTestRunner:TextTestRunner是unittest自带的TestRunner,可以生成.txt测试报告。了解即可,一般用HTMLTestRunner代替TextTestRunner。
结果表示—— .??f??E 通过:.表示通过,断言成功。 失败:f表示失败,断言失败,发现bug或者预期结果不对时用f表示。 错误:E表示程序错误,自己代码错误而不是断言失败。 HTMLTestRunner:HTMLTestRunner是 Python 标准库的 unittest 框架的一个扩展,需要下载(需要的朋友可以私信)。HTMLTestRunner可以生成HTML测试报告,用wb二进制模式写入文件。生成的HTML格式的测试报告效果在最后展示。
Fixture定义:测试夹具,也称为测试脚手架。测试用例环境的搭建和销毁,测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。 ?运行机制 1.setUp(self):前置条件执行每个用例前要做的事情。
2.setUpClass(cls):一个测试类只执行一次的前置条件,由于是类方法,setUpClass(cls)和tearDownClass(cls)使用时必须带@classmethod(),。 3.tearDown(self):后置条件,执行每个用例后要做的事情,比如断开数据库,善后工作。即使测试方法引发异常也会调用。 4.tearDownClass(cls):一个测试类只执行一次的后置条件。? ? ? ? ? ? ? ? ?? 特点:setUp和tearDown每一个用例都会执行一遍。 setUpClass(cls)和tearDownClass(cls)在一个测试类,只执行一次的后置。
运行效果如下: 三、扩展内容?FunctionTestCase定义:如果需要用unittest运行已经存在的测试用例,也就是复用已有的测试代码,则要用到FunctionTestCase类去实现,可以创建等价的测试用例。 具体用法:
用FunctionTestCase可以快速将现有的测试转换成基于 unittest 的测试,好处是不需要再把已有的每个测试函数转化为一个TestCase的子类,同时还支持设置前置和后置函数。 Skippingpython3.1以后,unittest框架支持跳过单个或整组的测试用例,同时可以将测试标注为预期失败,当这些被标注的用例断言失败后是不计入最终测试结果的。
加上skip装饰器标记为预期失败后,再次运行:
? ?同样的方法也可以跳过测试类,甚至setup。
最后献上skip装饰器的源码:
subTestsubTest上下文管理器是python3.4版本新功能,用来当测试差异很小的一组参数时,如果不希望在第一次就断言失败而终止后面参数的测试时,可以使用subTest方法:
类似上面的例子,运行后第一个参数(0)断言失败后后面的参数就会被终止: 使用subTest的效果不言而喻: unittest框架其他更多扩展的用法可以点击文章开头的官网链接学习。 ? 四、基础总结1.unittest导包:import unittest 2.继承unittest.TestCase:测试用例需要继承unittest.TestCase。在unittest 中测试用例表示为 unittest.TestCase 的实例,通过编写TestCase的子类或使用FunctionTestCase编写测试用例。 3.unittest运行:用例执行runner.run()。
运行unittest需要在代码空白行运行,否则有概率无法触发unittest运行机制。推荐直接在main方法里运行unittest.main()。调用unittest.main() 执行所有用TestCase分组的测试。
4.命名要求:模块名称要以test开头,下划线拼接,比如test_demo.py。 而测试用例(也就是TestCase类)要求首字母大写,驼峰命名,如下:
5.assert断言:unittest框架的TestCase基类提供assert*()方法用来断言测试结果。 6.测试夹具:setUp前置条件和tearDown后置条件,在运行每个测试时,setUp() 、tearDown() 和 __init__() 会被调用一次。 7.用例执行:runner.run(),调用 unittest.main() 执行所有用TestCase分组的测试。用例执行顺序按照ASCII顺序执行。 8.整体流程:loader收集用例,unittest.TestLoader(),得到suite测试集,suite = discover(),runner运行,test_runner =??HTMLTestRunner( ),runner.run(suite)。 最终效果1.创建test_demo.py模块用来存放测试用例,run.py模块用来执行用例,并生产report测试报告。 2.test_demo.py?
2.run.py模块
3.生成report.html测试报告 ? 以上便是《Python学习24:unittest框架入门》的所有内容。 原创不易,如果喜欢请点赞和关注,谢谢大家的支持!想获得免费的学习资料请添加微信公众号——风起怨江南之。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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:21:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |