华为五年自动化测试工程详细解说:unittest单元测试框架
一、单元测试框架说明

单元测试是指在编程中,针对程序模块的最小单元(类中的方法)进行正确性检验的测试工作。python+selenium自动化测试中通常使用unittest或者pytest作为单元测试框架。而java+selenium自动化测试中通常使用junit或者testng作为单元测试框架。
二、unittest框架的4个重要概念。

(1) test fixture(测试固件):一个测试固件代表一个或多个测试执行前的准备工作和测试结束后的清理工作,例如:创建数据库连接、关闭数据库连接、启动服务进程、测试环境的清理等。
(2) test suite(测试套件):一个测试套件是一组测试用例的集合(也可以是一组测试套件的集合)。它的作用是将测试用例集合到一起一次性执行集合中所有的测试用例。
(3) test case(测试用例):一个测试用例是一个完整的测试流程,是最小的测试单元,通常会继承unittest.TestCase类。
(4) test runner(测试运行器):一个测试运行器执行设定的测试用例并将测试结果反馈给用户两部分功能组成。
三、unittest框架中的特殊方法以及特殊方法执行顺序。
(1)自动化中要求所有的测试用例都继承unittest.TestCase基类。TestCase基类中定义的几个特殊的方法如下:
setUp() 每个测试用例运行前执行,主要作用是测用例前的初始化工作。
tearDown() 每个测试用例运行后执行,主要作用是测试用例后的清理工作。
setUpClass() 所有测试用例运行前运行,必须使用@classmethod装饰器装饰,在setUp()方法前执行,整个测试过程只执行一次,主要作用是单元测试前的准备工作。
tearDownClass() 所有测试用例运行后运行,必须使用@classmethod装饰器装饰,在tearDown()方法后执行,整个测试过程只执行一次,主要作用是单元测试后的清理工作。
(2) 执行顺序如下:
setUpClass()
#测试用例一
setUp()
test_01()
tearDown()
#测试用例二
setUp()
test_02()
tearDown()
tearDownClass()
四测试用例的命名。
最简单的测试用例方法命令只需要覆盖runTest()方法即可。而更可取的是测试用例以"test"开头命名。
五、unittest加载并执行测试用例方法
在unittest单元测试框架中,提供两种单元测试加载执行测试用例的方法:
(1)直接通过unittest.main()方法加载并执行当前py文件中的测试用例。这是一种最简单的加载方法,所有的测试方法执行顺序都是按照方法名字符串所表示的ASCII码升序排序(数字与字母的顺序为:0-9,A-Z,a-z)。如:
(2)将所有的测试用例添加到测试套件集合中,然后一次性加载所有的测试对象。此方法经测试执行顺序是按照测试用例的加载顺序执行,但是特别要注意执行方式。如果是点击右键的方式运行那么总是以unittest方式执行(这种方式执行是以ASCII升序执行),而想要从main方法执行,则需要在pycharm的右上角修改Pycharm的运行方法。并按运行按钮从main方法运行。(这种方式执行是按照测试用例加载顺序执行)
测试用例添加到测试套件的方式:
注意:以上两种方式都可以执行测试套件。
#其中:TestManage是类名,test_add是用例名,verbosity参数说明如下:
#verbosity参数可以控制输出的错误报告的详细程度,只有3个取值:
#<=0(quiet): 只显示执行的用例的总数和全局的执行结果。输出结果中不提示执行成功的用例数。
#1(default): 默认值,显示执行的用例的总数和全局的执行结果,并对每个用例的执行结果(成功T或失败F)有个标注。
#>=2(verbose): 显示执行的用例的总数和全局的执行结果,并输出每个用例的详细的执行结果。
执行后测试结果说明:
.:一个点表示一个测试用例执行成功。
F:一个F表示一个测试用例执行失败。
E:一个E表示测试用例中本身有异常。
六、按照特定顺序执行测试用例
通过把测试用例按顺序加载到测试套件中执行。
通过修改函数名的方式来让测试用例按特定顺序执行。如:
def test1_add(self):
def test2_delete(self):
def test3_update(self):
def test4_select(self):
注意:从后期自动化项目批量执行多个py文件的所有测试用例的角度出发第一种方式太过于繁琐,建议使用第二种方式。
七、忽略测试用例。
在批量执行测试用例时,有时会遇到某些测试用例不需要执行,但是又想保留测试代码。除了可以注释掉代码外还可以使用unittest框架提供的更简便的注解方法来忽略那些暂时不需要执行的测试用例。忽略测试用例分为无条件忽略和有条件忽略。
另外还有一个:@expected failure #代表如果test失败了不计入失败的case数目
八、unittest单元测试框架中常见的断言。
assertEqual(a, b) a == b 最常用
assertNotEqual(a,b) a != b
assertTrue(x) x is True 最常用
assertFalse(x) x is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b 最常用
assertNotIn(a, b) a not in b
assertIsInstance(a,b) isinstance(a, b)
assertNotIsInstance(a,b) not isinstance(a, b)
assertGreater(a,b) a > b
assertGreaterEqual(a,b) a >= b
assertLess(a, b) a < b
assertLessEqual(a,b) a <= b
其中assertEqual(a,b),asserTrue(),assertIn为常用断言方法。
assertEqual(a,b)用于判断两个字符串是否相等。
assertTrue(x)用于断言一个字符串是否在页面资源。
assertIn(a,b)用于判断一个jsp或php页面在当前页面地址中。
九、结尾
如果你觉得此文对你有帮助,如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:
软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
作者:来自公众号:软测之家
原创不易,欢迎点赞、评论、转载礼貌三连,转载请保留此段声明。
华为五年自动化测试工程详细解说:unittest单元测试框架的更多相关文章
- Selenium(十五):unittest单元测试框架(一) 初识unittest
1. 认识unittest 什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误.在python语言下 ...
- Selenium 2自动化测试实战26(unittest单元测试框架)
一.unittest单元测试框架 1.认识单元测试 1.断言方法 #计算器类 #coding:utf-8 #计算器类 class Count: def __init__(self,a,b): self ...
- unittest单元测试框架前言
一.在我们没有学习过python语言的时候领导让我们做接口测试 我们都使用工具来做测试,一般常用的如jemeter,postman这些个工具,我来推荐使用postman 这个工具来进行接口测试,有的小 ...
- unittest单元测试框架总结
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- unittest单元测试框架详解
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- unittest单元测试框架简单说明
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- unittest单元测试框架总结(转载)
转载:https://www.cnblogs.com/yufeihlf/p/5707929.html unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该 ...
- 四. 引入unittest单元测试框架
1. 安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...
随机推荐
- 论JS函数传参时:值传递与引用传递的区别
什么是值传递:值传递是指在调用函数时将实际参数(实参)复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 值传递的总结:也就是说,将实参复制到函数中的这个过程叫值传递 什么是 ...
- Ajax同步和异步的区别?
今天在code review时候看到同事的代码,用了ajax同步,async:false,如果不设置async参数,默认是true,为异步,异步的情况是比较复杂的,看下同步这个例子: function ...
- SpiningUP 强化学习 中文文档
2020 OpenAI 全面拥抱PyTorch, 全新版强化学习教程已发布. 全网第一个中文译本新鲜出炉:http://studyai.com/course/detail/ba8e572a 个人认为 ...
- git的日常使用(补课)
使用git的一些反响 如果在github上做一个仓库来使用的话... 首先手动在github上创建一个空的仓库,默认没有任何东西的 使用git的命令 git pull 创建的github仓库地址 能把 ...
- django 从零开始 4 404页面和500页面设置
在视图函数中定义两个 函数 分别对应404 个500页面 (自定义html内容吧,这里只是展示) 在template页面指向自己定义的404.html和500.html页面 在项目的urls中设置 h ...
- Spark入门(七)--Spark的intersection、subtract、union和distinc
Spark的intersection intersection顾名思义,他是指交叉的.当两个RDD进行intersection后,将保留两者共有的.因此对于RDD1.intersection(RDD2 ...
- JavaScript中的内存释放
C.C++语言需要手动管理内存的分配与释放(常用方法:malloc(), calloc(), realloc()和free()等).而JavaScript与Java.C#相似,内置了垃圾回收器,能自动 ...
- (转)协议森林02 小喇叭开始广播 (以太网与WiFi协议)
协议森林02 小喇叭开始广播 (以太网与WiFi协议) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们在邮差与邮局中说到,以 ...
- MySQL数据备份及还原(一)
关于删库跑路的事故现在已经屡见不鲜了,数据备份的必要性是企业数据管理极其重要的一项工作.关于数据备份.恢复也有很多场景及方法,本系列也会将主要的几种工具通过案例进行演示. 本系列将从逻辑备份及恢复开始 ...
- 网络安全从入门到精通 (第二章-4) 后端基础PHP—简介及基本函数-上
本文内容 什么是PHP PHP的基础语法 运算符 条件分支语句 1,什么是PHP? PHP(超文本预处理器)是一种通用开源语言,(是动态语言中的一种,动态语言还有ASP,ASPX,JSP). PHP语 ...