一直在努力做测试的小白白个人觉得使用python标准库中的Unittest搭建自动化测试框架很好用所以在这里做个笔记。其实想要清楚Unittest内部逻辑看懂这张类图即可,夫图之缺如,岂不若言之大D,不多BB。
复制代码

Unittest模块核心概念非为四层先后顺序可以为TestFixture->TestCase->TestSuite->TestRunnerSurprise MotherF*cker 跟这个图有什么关系呢?别急慢慢听我说。
复制代码

图由下到上details ·TestCase简单说就是测试样例,就是有一个完善的测试流程。 Setup(准备测试环境)-> Run(运行测试)-> Teardown(测试结束,环境恢复) Unittest 本质也在这里,单元即在不可分,一个单元即一个完整的测试单元。 ·TestSuite是可以打包testcase的嵌套工具,将每个类型的单元测试归类等,PS:TestSuite可以嵌套TestSuite。 ·TestLoader中的loadTestsFrom方法搜寻TestCase并加载到TestSuite中 ·TestRunner跑TestSuite中的TestCase并生成result ·TestFixture则是面对测试用例的环境搭建与销毁

一个类继承了Unittest了以后便是一个测试用例,而class中的方法(以test名称开头的方法),会在TestLoaderd的时候被加载到TestCase中并生成对应实例,然后如果被加载在TestSuite中也是不变的实例

Process梳理: 完成TestCase内容,由TestLoadFrom将其加载到TestSuite中,然后TestRunner测试输出结果到TestResult

Unittest实例:

直接测TestCase 这里写好待测方法

然后把对这些方法使用Unittest进行测试

PS: 补充一下unittest.main()就是把TestCase交给TestRunner,并打印结果到结果栏(也可以写入文件), 并且可以在unittest.main()中加入verbosity=0/1/2(数字表示log详细程度)

把TestCase打包到TestSuite中并测试

使用addTest()一个一个或者将testcase写进列表不实用 个人觉得这样手动添加testcase实在!!!麻烦,遂使用load功能把testcase中开头带test字样的全部加载进来

suite.addTests(unittest.TestLoader().loadTestsFromName('test_mathfunc.TestMathFunc'))
复制代码

这样可以加载test_mathfunc模块中TestMathFunc实例中所有的testcase,加载TestCase的顺序是无序的,可以核对一下打印结果和TestCase实例中的待测def

将日志打印成文档 python中使用with open 打开文件做文件流处理很方便,不需要手动close不需要担心内存泄漏,一切垃圾回收机制搞定。(面试的时候有可能会问python中的垃圾回收机制,建议好好看一下。因为楼主Java很久不用了堆垃圾回收机制概念清楚但是深层原理不记得了,这时面试官问,我就会说我目前清楚python的,java很久不用了XXXXXXX) 加上如下coding

with open('UnittestTextReport.txt', 'a') as f:runner = unittest.TextTestRunner(stream=f, verbosity=2)runner.run(suite)
复制代码

环境准备与恢复TestFixture 如果我们有这样两个testcase,1.登陆一个网站(正确的account&pwd)2.登陆一个网站(非法用户名&pwd).第一个测试样例进行完必须要退出,清理缓存这样最好,然后进行第二个测试样例的测试。 这时候TestFixture的setup()和TearDown()就有作用了。

def setUp(self):print "do something before test.Prepare environment."def tearDown(self):print "do something after test.Clean up."
复制代码

将其添加到testcase中,类似于魔法方法,每有一个测试样例开始走unittest的框架流程时,就会在开始处调用setup()搭建初始化环境,结束时恢复至刚开始测试的环境。

如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用 setUpClass() 与 tearDownClass():

class TestMathFunc(unittest.TestCase):"""Test mathfuc.py"""@classmethoddef setUpClass(cls):print "This setUpClass() method only called once."@classmethoddef tearDownClass(cls):print "This tearDownClass() method only called once too."...
复制代码

有些人可能对@classmethod感到陌生或者不熟悉,好吧既然说到这里了,就插播一个python知识点。

python中的classmethod与staticmethod

@classmethod是类方法 @staticmethod是静态方法

那么有什么区别呢? 来写一个简单的类观察下

class A(object):def m1(self,n):print("self:",self)@classmethoddef m2(cls,n):print ("cls:",cls)@staticmethoddef m3(n):print ("n",n)
a = A()
a.m1(1)
A.m2(1)
a.m3(1)
复制代码

输出为

一般来说如果要使用某个类的方法,必须实例化该类的对象后再调用该类中的方法,self将该方法绑定在了对象身上,这个结果能看出一些问题,self大家应该不陌生是绑定在类实例化的对象的,而cls则是绑定在类A身上的。

那么staticmethod和self绑定的类中用法又有什么区别呢,两者都可以通过实例化对象.类方法()来调用类方法或者类属性,但是self可以在内部调用,而staticmethod只能依靠前面一种方法。

那么classmethod和staticmethod又有什么区别? 显然大家应该有一些想法了,就是classmethod作为一个装饰器他可以在类未被实例化前就可以执行classmethod下面的语句,他是属于类的可以使用类名.类方法/类属性来调用。

Well,in one word. 就是staticmethod是静态的调用类或者对象属性都可以,但是不可以内部自身调用,class method修饰作用在于类可以调用,而self最大特点是内部可以进行调用。

那么这(classmethod)又有什么用呢?

有这种民工三连问题就对了,看下面例子。

用户输入的是2018 5 5 但是如果输入format变为2018.5.5,重构类的时候最好不要修改原有的构造函数,只需要添加classmethod和你额外的处理函数即可。 如下:

绕了一大圈,终于回来了,继续说Unittest

如果执行到某个testcase你想跳过去呢?

skip装饰器即可-->@unittest.skip

Just like this ,这样就可以在打印台上或者文档中看到记录该testcase已经被跳过 skip装饰器一共有三个 unittest.skip(reason) unittest.skipIf(condition, reason) unittest.skipUnless(condition,reason) skip无条件跳过,skipIf当condition为True时跳过,skipUnless当condition为False时跳过。 根据自己情况去pick。

总结一下: unittest是Python自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架。 unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。 一个class继承unittest.TestCase即是一个TestCase,其中以 test 开头的方法在load时被加载为一个真正的TestCase。 verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告。 可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。 用 setUp()、tearDown()、setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境 我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。 参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告。

由于楼主研究生跨专业到计算机,所以很多东西还很欠缺,打算自学,方便自己复习记录自己的学习历程,打算总结整理一些东西,这样更有仪式感,交流学习勘误

Memo: -Exactly.Parker was a young kid. Pretty good on the sax. Gets up to play in the cutting session. And he fucks it up. And Jones nearly decapitates him for it. And he's laughed off-stage crie himself to sleep that night, but the next morning, what does he do? He practices. Never to be laughed at again. And he practices and he practices, with one goal in mind. And a year later he goes back to the Reno. And he steps up on that stage and he plays the best motherfucking solo the world has ever heard. --Whiplash(爆裂鼓手)


感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)

可以自助拿走,群号953306497(备注“csdn111”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

Python 自动化测试 必会模块 Unittest相关推荐

  1. Windows平台Python编程必会模块之pywin32

    在Windows平台上,从原来使用C/C++编写原生EXE程序,到使用Python编写一些常用脚本程序,成熟的模块的使用使得编程效率大大提高了. 不过,python模块虽多,也不可能满足开发者的所有需 ...

  2. 【Python自动化测试15】unittest测试框架的核心概念与作用

    文章目录 一.前言 二.认识单元测试 三.unittest核心概念与操作 3.1.unittest的作用 3.2.测试用例(TestCase) 3.3.运行测试用例 3.4.测试套件.加载器与运行器( ...

  3. 【Python自动化测试16】测试用例数据分离

    文章目录 一.前言 二.什么是数据分离? 三.进行数据分离 四.Python操作excel 一.前言   本文章主要讲解Python自动化测试中测试用例的数据分离,在自动化测试中能够更好的管理测试用例 ...

  4. 【Python自动化测试20】接口自动化测试框架模型搭建

    文章目录 一.前言 二.框架搭建流程 2.1 项目创建 2.2 README文件 2.3 .gitignore文件 2.4 什么是测试框架? 2.5 分层设计 2.6 框架搭建 2.6.1 公用目录( ...

  5. 【Python自动化测试26】接口自动化测试实战六_pytest框架+allure讲解

    文章目录 一.前言 二.pytest讲解 2.1 什么是pytest? 2.2 为什么使用pytest? 2.3 使用pytest 2.4 pytest的运行方式 2.5 pytest高级特性 2.5 ...

  6. 【Python自动化测试32】App自动化环境搭建

    文章目录 一.前言 二.安装与环境搭建教学 2.1 环境依赖 2.2 appium程序安装 2.3 appium-python-client 2.4 模拟器安装 2.5 java jdk安装 2.6 ...

  7. 【Python自动化测试14】Python自动化测试基础与进阶练习题

    文章目录 一.前言 二.Python练习题 2.1 Python基础语法规则 2.2 字符串相关练习题 2.3 列表与元组相关练习题 2.4 字典与数据类型练习题 2.5 流程控制语句练习题 2.6 ...

  8. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  9. python自动化测试框架pytest.pdf_Python 自动化测试框架 unittest 和 pytest 对比

    一.用例编写规则 1.unittest提供了test cases.test suites.test fixtures.test runner相关的类,让测试更加明确.方便.可控.使用unittest编 ...

  10. python自动化测试-【自动化测试】Python - unittest单元测试框架

    一.测试模型 下面这部分来自于某书籍资料,拿过来,按需参考一下: 测试模型 (1)线性测试 1.概念: 通过录制或编写对应应用程序的操作步骤产生的线性脚本.单纯的来模拟用户完整的操作场景.(操作,重复 ...

最新文章

  1. mysql 2014_mysql错误之2014
  2. 运用供应链管理实现更快速、更高质量的交付
  3. C#(WinForm)实现软件注册
  4. springmvc4之mvc:exclude-mapping path= /拦截配置
  5. python视频教程云盘-Python自动化测试视频教程【百度云盘下载】
  6. mybatis-spring整合jar包功能
  7. 开机logo切换逻辑深入研究
  8. java实现在线浏览zip文件及文件下载
  9. mongodb 教程一
  10. 每卖出一部新款iPhone SE,苹果就要赚1500元?
  11. lambda java 表达式_Java中的Lambda表达式
  12. fx5u以太网通讯设置_BCNet客户机实现S7300和FX5U数据交换
  13. 从拉新、促活/留存和营收说起,做运营到底是在做什么?
  14. 软件业:印度比中国强在哪
  15. wavread被删之后的替代audioread
  16. EFCore-5 Migration操作
  17. 编写一个静态方法 lg(), 接受一个整型参数 N,返回不大于 log2N 的最大整数。
  18. 软考是什么?为什么要考?
  19. Java AOP自定义注解
  20. Java 联网五子棋(socket)

热门文章

  1. android横竖屏切换布局闪退,Android 横竖屏切换以及横屏启动闪退问题
  2. 直线段检测法(LSD)
  3. 百练oj2816:红与黑
  4. JAVA快递单号查询接口对接教程【快递鸟DEMO】
  5. win7html.exe,win7系统exe程序打开方式还原怎么弄 win7系统还原exe程序打开方式办法介绍...
  6. 【记录30】条形码的生成
  7. jQuery-3.4.1下载
  8. [ISUX译]iOS 9人机界面指南(一):UI设计基础
  9. VMware安装失败 找不到msi文件
  10. 有关win10的C:/ProgramFiles\WindowsApps\文件系统错误(12007)问题