选择

语言选择

本次个人作业我选择的语言是Python,了解学习Python有一段时间了但是一直没有练习,所以这次玩蛇,使用的版本是Python3.6。

开发工具选择

我选择的IDE是Pycharm,个人认为Pycharm是一款不错的Py开发工具,用起来得心应手,unittset是py自带的包不需要安装直接引用即可,方便快捷。开发工具截图如下。

Python单元测试框架unittest

unittest简介

TestCase(测试用例)

一个testcase就是一个测试用例,包括测试前环境的搭建setUp,执行测试代码run,测试后环境的还原tearDown,是一个完整的测试单元。

TestSuite(测试套件)

多个testcase的集合

TestLoder

用来加载TestCase到TestSuite中

TextTestRunner

是来执行测试用例的

TextTestResult

保存测试结果的类

TestFixture

测试准备前和执行后要做到的工作

核心工作原理

unittest实例

准备待测方法

mathfunc.py

def  add(a,b):
return a+b def minus(a,b):
return a-b def multi(a,b):
return a*b def divide(a,b):
return a/b

编写测试方法

test_mathfunc.py

import unittest
from mathfunc import * class TestMathFunc(unittest.TestCase):
#每个测试方法以test开头
def test_add(self):
self.assertEqual(3,add(1,2))
self.assertNotEqual(3,add(2,2)) def test_minus(self):
self.assertEqual(1,minus(3,2)) def test_multi(self):
self.assertEqual(6,multi(2,3)) def test_divide(self):
self.assertEqual(2,divide(6,3))
self.assertEqual(2.5,divide(5,2)) if __name__ == '__main__':
#verbosity 输出详细程度 0 1 2
unittest.main(verbosity=2)

运行结果

测试通过

测试不通过

把除法/改为//(整除)报错如下图

TestSuite

上面的代码运行无序,如果我们写的用例有顺序的话,就需要用TestSuite,被添加到TestSuite中的case会被按照顺序执行。

编写test_suite.py代码如下

 import unittest
from test_mathfunc import TestMathFunc
from HTMLTestRunner import HTMLTestRunner if __name__ == '__main__':
suite = unittest.TestSuite() tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]
#addTests添加多个TestCase
#addTest添加单个TestCase
#suite.addTests(tests)
suite.addTests(unittest.TestLoader().loadTestsFromName('test_mathfunc.TestMathFunc'))
#suite.addTests(unittest.TestLoader().loadTestsFromNames(['test_mathfunc.TestMathFunc')]) 传入列表 runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)

addTests方法

传入一个TestCase对象的列表。

unittest.TestLoader().loadTestsFromName/Names

传入一个TestCase对象,这个对象里可以包含多个test_开头的方法,每个test_开头的方法处理的时候都可以理解为一个TestCase实例。

TestFixture

在实际测试中,我们可能会遇到这种情况,需要测试的方法中有的需要连接数据库,测试完毕需要还原数据,所以我们就需要一个准备环境的方法(setUp)还有清理环境的方法(TearDown),这就是TestFixture所包含的内容。

修改test_mathfunc.py如下

import unittest
from mathfunc import * class TestMathFunc(unittest.TestCase):
#重写了TestCase的方法
def setUp(self):
print("开始测试之前的环境搭建") def tearDown(self):
print("环境清理") def test_add(self):
self.assertEqual(3,add(1,2))
self.assertNotEqual(3,add(2,2)) def test_minus(self):
self.assertEqual(1,minus(3,2)) def test_multi(self):
self.assertEqual(6,multi(2,3))
#skip装饰器
@unittest.skip("我不想执行除法")
#@unittest.skipIf(condition=,reason=) 当condition为true时跳过
#@unittest.skipUnless(condition=,reason=) 为false时跳过
def test_divide(self):
self.assertEqual(2,divide(6,3))
self.assertEqual(2.5,divide(5,2)) if __name__ == '__main__':
unittest.main(verbosity=2)

在实际测试中我们也可能会遇到这样的情况,开始测试前需要连接数据库,测试结束后关闭连接,不需要还原数据,只在开始和结束各自执行一次即可,setUpClass和tearDownClass的作用就是实现以上功能。

    @classmethod
def setUpClass(cls):
print("开始测试之前的环境搭建统一") @classmethod
def tearDownClass(cls):
print("最后清理环境")

输出结果如下图



没有得到想要的结果,多次输出发现setUp和tearDown输出位置不定,猜想是因为不是单线程执行造成的,所以进行调试结果正确,暂存疑问。

跳过测试

有时候当某些条件的时候我们可能需要跳过测试,unittest也为我们提供了相应的方法

    #@unittest.skipIf(condition=,reason=)   当condition为true时跳过
#@unittest.skipUnless(condition=,reason=) 为false时跳过
def test_divide(self):
self.assertEqual(2,divide(6,3))
self.assertEqual(2.5,divide(5,2))

执行结果如下

把结果保存到文件中

保存到文本文件中

 with open('Unittest.txt','a') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(suite)

会在项目目录下生成Unittext.txt文本文件,内容如下

test_add (test_mathfunc.TestMathFunc) ... ok
test_divide (test_mathfunc.TestMathFunc) ... ok
test_minus (test_mathfunc.TestMathFunc) ... ok
test_multi (test_mathfunc.TestMathFunc) ... ok ----------------------------------------------------------------------
Ran 4 tests in 0.000s OK

生成HTML

需要HTMLTsetRunner文件

    with open('HTMLReport.html', 'wb') as f:
runner = HTMLTestRunner(stream=f, title="123", description="test", verbosity=2)
runner.run(suite)

参考自

XUnit测试框架-Python unittest的更多相关文章

  1. [转]Python测试框架对比----unittest, pytest, nose, robot framework对比

      测试框架 什么是框架? 框架(Framework)是整个或部分系统的可重用设计,框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求 ...

  2. Python测试框架对比----unittest, pytest, nose, robot framework对比

    什么是框架? 框架(Framework)是整个或部分系统的可重用设计, 框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求,记录日志, ...

  3. Allure测试框架 python

    关于Allure Allure是一个report框架,可以基于一些测试框架生成测试报告,比较常用的一般是Junit/Testng框架: Allure 生成的报告样式简洁美观,同时又支持中文: Allu ...

  4. Python测试框架之Unittest梳理

    1. 2.

  5. 接口框架 python+unittest+request+HTMLTestRunner

    request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项.如POST,GET最常用的两种请求 官方文档:http://docs.python-requests.org/en/mas ...

  6. Python接口测试实战3(下)- unittest测试框架

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  7. Python 各种测试框架简介

    转载:https://blog.csdn.net/yockie/article/details/47415265 一.doctest doctest 是一个 Python 发行版自带的标准模块.本篇将 ...

  8. phpunit 测试框架安装

    PHPUnit是一个轻量级的PHP测试框架.它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计).来自百度百科 一.下载wg ...

  9. PHP自动测试框架Top 10

    对于很多PHP开发新手来说,测试自己编写的代码是一个非常棘手的问题.如果出现问题,他们将不知道下一步该怎么做.花费很长的时间调试PHP代码是一个非常不明智的选择,最好的方法就是在编写应用程序代码之前就 ...

随机推荐

  1. javascript原型模式概念解读

    原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象.对于原型模式,可以利用JavaScript特有的原型继承特性去创建对象的方式,真正的原型继承是作为最新 ...

  2. iostat查看io情况

      查看TPS和吞吐量信息[root@controller ~]#iostat -d -k 1 10Device:         tps    kB_read/s    kB_wrtn/s    k ...

  3. python摸爬滚打之----tcp协议的三次握手四次挥手

    TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...

  4. 微信小程序wx.getLocation()获取经纬度及JavaScript SDK调用腾讯地图API获取某一类地址

    简介 腾讯位置服务为微信小程序提供了基础的标点能力.线和圆的绘制接口等地图组件和位置展示.地图选点等地图API位置服务能力支持,使得开发者可以自由地实现自己的微信小程序产品. 在此基础上,腾讯位置服务 ...

  5. [转]理解 Bias 与 Variance 之间的权衡----------bias variance tradeoff

    有监督学习中,预测误差的来源主要有两部分,分别为 bias 与 variance,模型的性能取决于 bias 与 variance 的 tradeoff ,理解 bias 与 variance 有助于 ...

  6. redis基础2

  7. Scala集合Map

    在scala中Map分为可变长(mutable)和不可变长(immutable) /** * 不可变长map 长度一旦初始化,就不能在进行更改 */ // 通过箭头的方式创建map val map = ...

  8. 初尝Spring Cloud Config

    1,下载源码 地址https://spring.io/guides/gs/centralized-configuration/ 2,导入工程 解压后分别把Server端与Client端导入到两个Ecl ...

  9. VMware虚拟机共享宿主机硬盘步骤

    1.打开设置 2. 进去设置后,选择选项选项卡,启用文件夹共享,添加文件夹即可 注:虚拟机安装完成后我先装了 VMwareTools,然后进行的共享操作,貌似不安装时无法启用第三步,即 总是启用 按钮 ...

  10. Mac对gdb签名

    codesign -f -s gdb-cert $(which gdb) gdb_cert为自己创建的证书名 添加证书信任 activity-monitor双击taskgated 关闭 gdb成功运行