unitTest介绍

  • UnitTest是python自带的自动化测试框架
  • UnitTest主要包含的内容
  1. TestCase(测试用例)
  2. TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite)
  3. TestRunner(执行测试用例)
  4. TestLoader(自动从代码中加载多个测试用例TestCase)
  5. Fixture(UnitTest特性)             

TestCase(测试用例)

使用时注意点:

  1. 类必须要继承unitTest.TestCase
  2. 创建方法名必须以test开头
# 导包
import unittestdef my_sum(a, b):return a + b# 创建类
class test(unittest.TestCase):#类必须要继承unitTest.TestCase# 创建方法(方法名必须以test开头)def test_01(self):print(my_sum(5, 6))# 创建方法(方法名必须以test开头)def test_02(self):print(my_sum(7, 6))

TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite)

注意点:主要是调用unitTest.TestSuite()方法中的addTest()方法添加测试用例

# 用unittest.makeSuite一次导入一个类中的所有测试方法

testSuite()与TestLoader()的区别:

  • 当只是要执行py文件中的几个用例时,使用TestSuite()方法中的addTest()方法加载指定用例
  • 当要执行整个py文件时可以直接调用TestLoader(),加载整个py文件的测试用例
# 测试套件
# 导包
import unittest
import unitTest_testCase# 只是把测试用例添加到了测试套件中,并不是执行测试用例
suite = unittest.TestSuite()
suite.addTest(unitTest_testCase.test.test_01())
suite.addTest(unitTest_testCase.test.test_02())# 用unittest.makeSuite一次导入一个类中的所有测试方法
# suite.addTest(unittest.makeSuite(unitTest_testCase.test))

TestRunner(执行测试用例)

注意点:主要是调用unitTest.TextTestRunner()方法中的run()方法来执行测试用例

# 测试套件
# 导包
import unittest
import unitTest_testCasesuite = unittest.TestSuite()
suite.addTest(unitTest_testCase.test.test_01())
suite.addTest(unitTest_testCase.test.test_02())# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

TestLoader(自动从代码中加载多个测试用例TestCase)

# 测试套件
# 导包
import unittest
import unitTest_testCase# TestLoader
# 用TestLoader对象的discover方法来自动查找py,自动加载py文件中的方法
# 第一个参数是从哪里找py文件,"."从当前目录开始查找py文件
# 第二个参数是指定py文件的文件名,可以用通配符
suite = unittest.TestLoader().discover(".", "unitTest_testCase.py")
# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

小结:

  • 所有的testCase都是被textTestRunner来执行
  • textTestRunner执行的是testSuite
  • 一个testSuite中有很多testCase

Fixture(UnitTest特性)

方法级别的FiXTure:在方法执行前调用setup()方法;在用例执行之后调用tearDown()方法

# 导包
import unittestdef my_sum(a, b):return a + b# 创建类
class test(unittest.TestCase):def setUp(self):print("方法级调用---setup")def tearDown(self):print("方法级调用---tearDown")# 创建方法(方法名必须以test开始)def test_01(self):print(my_sum(5, 6))# 创建方法(方法名必须以test开始)def test_02(self):print(my_sum(7, 6))

类级别的fixture:在类执行前调用setUpClass(cls)方法,在类执行之后调用tearDownClass(cls)方法,类级别的调用要加@classmethod装饰器

# 导包
import unittestdef my_sum(a, b):return a + b# 创建类
class test(unittest.TestCase):@classmethoddef setUpClass(cls):print("类级别调用--setUpClass")@classmethoddef tearDownClass(cls):print("类级别调用--tearDownClass")def setUp(self):print("方法级调用---setup")def tearDown(self):print("方法级调用---tearDown")# 创建方法(方法名必须以test开始)def test_01(self):print(my_sum(5, 6))# 创建方法(方法名必须以test开始)def test_02(self):print(my_sum(7, 6))

模块级别调用: 模块级别调用指整个py文件执行之前调用setUpModule()方法,执行之后调用tearDownModule()方法

import unittestdef setUpModule():print("setUpModule自动调用了")def tearDownModule():print("tearDownModule自动调用了")def my_sum(a, b):return a + bclass my_test1(unittest.TestCase):@classmethoddef setUpClass(cls):print("setupclass自动调用了")@classmethoddef tearDownClass(cls):print("teardownclass自动调用了")def setUp(self):print("setup被自动调用了")def tearDown(self):print("teardown被自动调用了")def test_001(self):print(my_sum(5, 6))def test_002(self):print(my_sum(0, 3))class my_test2(unittest.TestCase):@classmethoddef setUpClass(cls):print("setupclass自动调用了")@classmethoddef tearDownClass(cls):print("teardownclass自动调用了")def setUp(self):print("setup被自动调用了")def tearDown(self):print("teardown被自动调用了")def test_001(self):print(my_sum(5, 6))def test_002(self):print(my_sum(0, 3))

fixture小结

  • 一定要在继承于unittest.TestCase这个类的子类中使用
  • setUP,tearDown, 每个方法执行开始和完毕后自动调用
  • setUPClass, tearDownClass, 每个类开始时候和结束时候自动调用
  • setUpModule, tearDownModule,每个py文件开始和结束的时候自动调用

assert断言

让程序判断测试用例执行是否符合预期

常用方法:assertEqual(参数1,参数2)
  • 如果参数1与参数2的值相等,则断言成功,否则断言失败。
  • 两个参数有一个存放实际结果,一个存放预期结果。

常用方法:assertIn(参数1,参数2)

  • 如果参数1在参数2里面,断言通过,否则断言失败

参数化

测试用例中使用参数化的场景:多个测试用例代码相同,只是测试数据不同,预期结果不同,可以把多个测试用例通过参数化技术合并 为一个测试用例
步骤:
  1. 导入from parameterized import parameterized
  2. 在方法上面用@parameterized.expand()修饰方法
  • expand()里面是一个列表
  • 列表里面放多个元组,每个列表中的成员就代表调用方法使用的实参
  • 列表中有几个元组方法就会被调用几次
import unittest
from parameterized import parameterizeddef my_sum(a, b):return a + bclass my_test1(unittest.TestCase):@parameterized.expand([(1, 2, 3), (5, 6, 110)])def test_001(self, a, b, c):# a是my_sum()方法的第一个参数# b是my_sum()方法的第二个参数# c是预期结果num = my_sum(a, b)self.assertEqual(num, c)  # num是实际数值,C是预期数值# 实际结果与预期结果相符,代表测试用例测试通过 # 不相符代表测试用例测试失败

跳过:

方法:unitTest.skip

可以通过@unittest.skip跳过指定的方法或者函数
import unittest
from parameterized import parameterizeddef my_sum(a, b):return a + bclass my_test1(unittest.TestCase):@parameterized.expand([(1, 2, 3), (5, 6, 110)])def test_001(self, a, b, c):num = my_sum(a, b)self.assertEqual(num, c)  # num是实际数值,C是预期数值@unittest.skipdef test_002(self, ):print("跳过")

HTML报告

通过TextTestRunner生成测试报告
  1. 在实例化TextTestRunner对象的时候,需要写参数
  2. runner = HTMLTestRunner(stream=file, title="我的第一个html测试报告",verbosity=2)
  • stream=file, verbosity=2,file代表用open打开的一个文件verbosity=2,固定
第一步:用open,w方式打开测试报告文件
第二步:实例化TextTestRunner对象
第三步调用对象的run方法执行测试套件
第四步:关闭open打开的文件
import unittest
# 用TestLoader对象的discover方法来自动查找py,自动加载py文件中的方法
# 第一个参数是从哪里找py文件,"."从当前目录开始查找py文件
# 第二个参数是指定py文件的文件名,可以用通配符
suite = unittest.TestLoader().discover(".", "my*.py")# runner = unittest.TextTestRunner()
file = open("test01.txt", "w", encoding="utf8")
runner = unittest.TextTestRunner(stream=file, verbosity=2)
runner.run(suite)
HTML测试报告:
  1. 把文件HTMLTestRunner.py拷贝到项目目录下
  2. 在代码中导入模块from HTMLTestRunner import HTMLTestRunner
  3. 调用HTMLTestRunner(stream=file, title="我的第一个html测试报告")
  4. 第一个参数是用open打开的文件, 打开的文件扩展名一定是.html;open打开文件的时候,用wb,不用指定字符集
  5. 调用runner对象的run方法执行测试套件
  6. 关闭open打开的文件
# 测试套件
# 导包
import unittest
from HTMLTestRunner import HTMLTestRunner# 加载unitTest_testCase.py模块下的所有测试用例
suite = unittest.TestLoader().discover(".", "unitTest_testCase.py")
# 用open,w方式打开测试报告文件
file = open("test01.html", "wb")  # open打开文件的时候,用wb,不用指定字符集runner = HTMLTestRunner(stream=file, title="我的第一个html测试报告")
# 执行测试套件
runner.run(suite)
# 关闭open打开的文件
file.close()

unitTest使用相关推荐

  1. python selenium unittest_python+selenium+unittest——ui自动化的轻量级选择

    最近项目部分趋于稳定,部分功能进入了维护阶段,但每次的小改动都需要进行回归测试,回归的用例不多但也算是重复劳动浪费资源.为了节约这部分人力,我考虑引入web的ui自动化.之前在其他项目中用的都是jav ...

  2. linux下运行python unitest_Python unittest打印日志可以在Linux上运行,但在Windows上不行...

    我正在尝试编写一个unittest,它将stdout和stderr重定向到一个写在Windows网络驱动器上的文件.出于某些原因,相同的脚本(只有diff.是目录路径)可以在Linux上工作,但在Wi ...

  3. 软件测试培训教程:pytest与unittest区别

    在软件测试培训教程中,会讲到关于pytest与unittest区别,那么本期教程小编就为大家详细的介绍一下pytest与unittest区别有哪些? pytest与unittest区别: 一.用例编写 ...

  4. unittest 框架学习

    为什么80%的码农都做不了架构师?>>>    今天我学习了,怎么把testcase分到不同的文件中,然后在集中到一个testsuite中一起跑,我还学会了怎么打包,怎么引用. 打包 ...

  5. unittest安装教程_unittest框架与自动化测试环境的搭建

    1.unittest框架简介 首先以selenium IDE录制的一段代码为例(脚本的录制请参考其他文档),说明unittest框架的使用. 图 1 要使用unittest框架,首先需要import ...

  6. python unit test 访问开发代码,使用Python的unittest模块作为testrunner时,如何在测试前运行初始化代码?...

    How can a user of a library run his own initialization code (setting debug levels of loggers for exa ...

  7. python中setup什么意思_Python unittest中setUp()和setUpClass()有什么区别?

    当您在班级中有多个测试方法时,差异就会显现出来. setUpClass和tearDownClass为整个类运行一次; setUp和tearDown在每个测试方法之前和之后运行. 例如: class E ...

  8. unittest框架执行用例

    pycharm中运行脚本的方式总共有三种,分别为:unittest模式,pytest模式,普通模式,今天主要来聊一聊unittest模式执行与普通执行(因为最近在学习unittest框架,所以pyte ...

  9. python 单元测试_聊聊 Python 的单元测试框架(一):unittest

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest. ...

  10. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

最新文章

  1. 利用3D打印构建衍射深度神经网络,可光速执行数字运算
  2. php xml 动态添加数据,php向xml中添加数据一例
  3. 如何正确拒绝老板的加班要求?学起来!
  4. echarts常用方法,legend状态支持两张图片切换(四)
  5. 物流设计大赛优秀作品_独家!亲历全国大学生物流设计大赛,队员、老师、专家这样说...
  6. Python函数(2)
  7. java 博客系统_讲解开源项目:5分钟搭建私人Java博客系统
  8. Fread 和fwrite的参数不同,返回值不同
  9. SQLite学习笔记(三)--创建内存数据库
  10. locust+httprunner+Jmeter QQ群微信群问题记录
  11. xp 系统 mysql日志文件在哪里_SqlServer修改数据库文件及日志文件存放位置教程
  12. Ionic for Angular 环境搭建
  13. 《从0到1:CTFer成长之路》 配套题目Web WP
  14. 裁员先兆?腾讯员工吐槽:公司发起PIP,PCG的鹅们,自求多福吧
  15. OpenJudge1661:Bomb Game(翻译 day 6)
  16. java通过身份证号码获取出生日期、性别、年龄
  17. 售后的设计(退换货)
  18. 普迪文集团:马来西亚留学必须了解的7个真相
  19. php 打开word显示无法打开文件,word无法打开文件,因为内容有误怎么办
  20. webworker应用场景_JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景

热门文章

  1. 林轩田机器学习技法(Machine Learning Techniques)笔记(三)
  2. Outlook设置hotmail邮箱POP3和SMTP服务器
  3. Jmeter——Jmeter限制网速进行测试
  4. 学java的第一天--javaJDK的安装与配置
  5. Python对离散变量处理:哑变量编码和one-hot编码
  6. 100集华为HCIE安全培训视频教材整理 | 防火墙互联技术(三)
  7. Dev-C++使用to_string()函数报错“[Error] ‘to_string‘ was not declared in this scope”原因及解决方案
  8. jpa中表的@OneToMany等关联关系
  9. 生物序列局部比对之Blast算法
  10. 软件测试中重点测什么,在软件测试中,测试员到底扮演着一个什么样的角色?...