python之使用单元测试框架unittest执行自动化测试
Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。
单元测试框架即一堆工具的集合。
在说unittest之前,先说几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
unittest单元测试 --- “代码驱动”(用例是用代码写的),也支持“数据驱动”,将数据存在文件里去取数据
atp-根据excel,用例写在Excel里的,属于“数据驱动”
下面写一个简单的单元测试用例
import unittest #导入unittest def calc(a,b):
return a/b class TestCalc(unittest.TestCase): # 继承unittest.TestCase @classmethod
def setUpClass(cls): #必须使用 @ classmethod装饰器, 所有test运行之前运行一次
print('我是setupClass') @classmethod
def tearDownClass(cls): #必须使用 @ classmethod装饰器, 所有test运行结束后运行一次
print('我是tearDownClass') def setUp(self):#每条用例执行之前都会先执行它
print('我是setup') def tearDown(self):#每条用例执行之后都会执行它
print('我是teardown') def test_calc1(self): #下面的三引号/双引号中显示的是描述信息
'''测试正常的'''
# result = calc(2,1)
# self.assertEqual(2,result,'除法运算不正确')
print('calc1') def test_calc2(self):
print('calc2')
"测试异常的"
# result = calc(2, 2)
# self.assertEqual(1,2,'结果不正确') def test_mysql(self):
'''测试mysql'''
print('test_mysql') def test_login(self):
'''测试登录'''
print('print test_login') def test_abc(self):
print('abc') def test_zbc(self):
print('zbc') def test_fail(self):
self.assertEqual(1,2,msg='测试失败的') #msg表示如果代码执行失败,则打印的信息 unittest.main() #运行当前文件里面的所有测试用例
#执行顺序:执行所有以test开头的方法/用例,且按照方法/用例名称A-Z顺序执行,而不是按照书写顺序
#以上代码运行结果如下:
我是setupClass
...F...
======================================================================
我是setup
FAIL: test_fail (__main__.TestCalc)
abc
我是teardown
我是setup
calc1
我是teardown
----------------------------------------------------------------------
我是setup
calc2
Traceback (most recent call last):
我是teardown
File "E:/Python学习/pycharm/python脚本/day12/单元测试unittest.py", line 58, in test_fail
我是setup
我是teardown
self.assertEqual(1,2,msg='测试失败的') #msg表示如果代码执行失败,则打印的信息
我是setup
AssertionError: 1 != 2 : 测试失败的
print test_login 我是teardown
我是setup
----------------------------------------------------------------------
test_mysql
Ran 7 tests in 0.001s
我是teardown 我是setup
FAILED (failures=1)
zbc
我是teardown
我是tearDownClass
下面是一些常用的断言,也就是校验结果
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
那如何生成一个测试报告呢,需要加入另外一个模块了,HTMLTestRunner,这个模块需要自己安装,使执行测试用例就会生成一个html的测试报告,里面会有每个测试用例的执行结果
HTML TestRunner:
用来产生测试报告的HTML TestRunner放入python安装目录下(sys.path目录),在打开pycharm的External Libraries -> Python 3.6.5有显示目录(C:\ProgramData\Anaconda3)
使用的时候直接 import HTML TestRunner即可
代码如下:
# test_suite = unittest.TestSuite() #创建一个测试集合
# test_suite.addTest(TestCalc('test_zbc')) #测试套件中添加测试用例 if __name__ == '__main__':
# 产生不好看的报告:HTMLTestRunner
f = open('report.html','wb') #打开一个保存结果的HTML文件
runner = HTMLTestRunner.HTMLTestRunner(stream=f, description='测试报告里面的描述', title='接口测试报告') #生成执行用的对象
test_suite = unittest.makeSuite(TestCalc) #把这个类变成一个测试集合
runner.run(test_suite)#运行用例套件
#以上代码执行结果
...F...我是setupClass
我是tearDownClass
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
Time Elapsed: 0:00:00
用浏览器打开的测试报告显示如图:

如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行,代码如下:
import unittest,HTMLTestRunner
suite = unittest.TestSuite()#创建测试套件
all_cases = unittest.defaultTestLoader.discover(case_path,'test_*.py')
#找到某个目录下所有的以test开头的Python文件里面的测试用例
for case in all_cases:
suite.addTests(case)#把所有的测试用例添加进来
fp = open('res.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')
runner.run(suite)
#运行测试
还可以用BeautifulReport产生好看的测试报告
解压文件夹->将文件夹和setup.py复制到day12(当前要使用的目录)中 -》运行setup.py -》运行成功之后(运行结果显示success)把day12中的BeautifulReport文件夹删除
使用的时候直接 import BeautifulReport即可
以上方法不行的话,将BeautifulReport解压后的文件夹放入pycharm的External Libraries -> site-packages目录下
使用BeautifulReport,执行代码如下:
import BeautifulReport as bf
#产生好看的报告
test_suite = unittest.makeSuite(TestCalc) #把这个类变成一个测试集合
runner = bf.BeautifulReport(test_suite)
runner.report(filename='new_report.html',description='描述') #文件名必须是html格式的
#以上代码执行结果如下:
我是setupClass
...F...我是tearDownClass 测试已全部完成, 可前往E:\Python学习\pycharm\python脚本\day12查询测试报告
用浏览器打开的测试报告显示如图:

用BeautifulReport执行多个python文件里的多个测试用例,代码如下:
import unittest
import BeautifulReport
import time
tests = unittest.defaultTestLoader.discover(case_path,'*.py') #找指定路径下以.py结尾的文件
runner = BeautifulReport.BeautifulReport(tests)#运行找到的所有用例
today = time.strftime('%Y-%m-%d%H%M%S')
file_name = '%s-report.html'%today #报告文件名
runner.report('utp自动化测试报告-%s'%today,filename=file_name,log_path=report_path)#产生报告
我们在后续进行持续集成的时候,要让代码自动运行,就会用到Jenkins了,但是上面产生的测试报告都是html格式的,Jenkins不认识,就在Jenkins里面显示不出来。那咱们就要产生一些Jenkins认识的测试报告,Jenkins认识xml格式的报告,那咱们就产生xml格式的呗,就需要用一个新的模块,xmlrunner,安装直接 pip install xmlrunner即可,代码如下:

import unittest
import xmlrunner
#导入这个模块
class My(unittest.TestCase): def test1(self,a,b,c):
self.assertEqual(a+b,c) if __name__=='__main__':
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(My))
runner = xmlrunner.XMLTestRunner(output='report')#指定报告放的目录
runner.run(test_suite)

然后咱们运行,可以看到在report目录下已经产生了xml格式的报告了,而且还自动把日期加上了

python之使用单元测试框架unittest执行自动化测试的更多相关文章
- Python单元测试框架unittest之深入学习
前言 前几篇文章该要地介绍了python单元测试框架unittest的使用,本篇文章系统介绍unittest框架. 一.unittest核心工作原理 unittest中最核心的四个概念是:test c ...
- Python单元测试框架unittest使用方法讲解
这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下 概 ...
- Python单元测试框架unittest之单用例管理(一)
一.概述 本文介绍python的单元测试框架unittest,unittest原名为PyUnit,是由java的JUnit衍生而来,这是Python自带的标准模块unittest.unittest是基 ...
- 单元测试框架unittest
单元测试:单元测试,是指对软件中的最小可测试单元进行检查和验证,对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义如:c语言中单元指一个函数,java里单元指一个类,图形化的软件中可以 ...
- Python单元测试框架unittest
学习接口自动化测试时接触了unittest单元测试框架,学习时参照了虫师编写的<selenium2自动化测试实战>,个人觉得里面讲的例子还比较容易理解的. 一.基础 1.main()和框架 ...
- Python必会的单元测试框架 —— unittest
用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库——unittest. unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那 ...
- Appium+python的单元测试框架unittest(1)(转)
unittest为python语言自带的单元测试框架,python把unittest封装为一个标准模块封装在python开发包中.unittest中常用的类有:unittest.TestCase.un ...
- Python单元测试框架unittest重要属性 与 用例编写思路
前言 本文为转载,原文地址作者列举python unittest这个测试框架的主要属性和 测试用例思路 unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行, ...
- Appium+python的单元测试框架unittest(4)——断言(转)
(原文:https://www.cnblogs.com/fancy0158/p/10051576.html) 在我们编写的测试用例中,测试步骤和预期结果是必不可少的.当我们运行测试用例时,得到一个运行 ...
随机推荐
- identity server4 证书
我们需要对token进行签名, 这意味着identity server需要一对public和private key. 幸运的是, 我们可以告诉identity server在程序的运行时候对这项工作进 ...
- i春秋 百度杯”CTF比赛 十月场 login
出现敏感的信息,然后进行登录 登录成功发现奇怪的show 然后把show放到发包里面试一下 出现了源码,审计代码开始 出flag的条件要user 等于春秋 然后进行login来源于反序列化后的logi ...
- 使用PowerDesigner 15对现有数据库进行生成图表结构
PowerDesigner的安装和基本使用,我就不阐述了.大家可以到这里看看:http://www.blogjava.net/wangdetian168/archive/2011/04/07/Powe ...
- DeeplabV3+ 训练自己的遥感数据
一.预处理数据部分 1.创建 tfrecord(修改 deeplab\ dateasets\ build_data.py) 模型本身是把一张张 jpg 和 png 格式图片读到一个 Example 里 ...
- <转>性能测试指标
下午在家看书,清理收藏栏的内容,翻出来几篇去年收藏的博文,此时再看,真切的感觉到了自己这一年的成长,分享出来,希望看到的童鞋都能有所得,就好... 原文地址:性能测试指标 一.通用指标 指Web应用服 ...
- 乡下人设计模式——SOLID之六大原则
S(Single Responsibility Principle):单一责任原则 O(Open Closed Principle):开放封闭原则 L(Liskov Substitution Prin ...
- 动态链接库-Win32 DLL的说明
在实际编程时,我们可以把完成某种功能的函数放在一个动态链接库中,然后给其他程序调用. WinAPI中所有的函数都包含在3个最重要的DLL中. Kernel32.dll 它包含那些用于管理内存.进程和线 ...
- 控制结构(5): 必经之地(using)
// 上一篇:局部化(localization) // 下一篇:最近最少使用(LRU) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上一周,我们谈到了分支/卫语句 ...
- react-navigation 简介
StackNavigator: 原理和浏览器相似但又有局限,浏览器的方式是开放性的,通过点击一个链接可以跳转到任何页面(push),点击浏览器后退按钮,返回到前一个页面(pop).StackNavig ...
- 在Django中使用logging模块
一.Django logging配置 1.在setting.py中配置 # 日志文件存放路径 BASE_LOG_DIR = os.path.join(BASE_DIR, "log" ...