Python unittest使用小结
unittest是Python自带的单元测试框架,其中最核心的四个概念是:test case, test suite, test runner, test fixture.
流程:TestLoader加载写好的TestCase到TestSuite,由TextTestRunner来运行,并将结果保存在TextTestResult中.通过命令行或unittest.main()执行时,main会调用TextTestRunner中的run来执行
testCase就是一个测试用例,即完整的测试流程,包含测试前环境搭建setUp,执行测试run,断言,测试后环境恢复tearDown.
testSuite多个testCase集合在一起.
testLoader加载testCase到testSuite中,用loadTestsFrom__()方法寻找TestCase,创建实例并添加到TestSuite中返回TestSuite实例.
TextTestRunner用来执行测试用例,其中的run(test)会执行TestSuite/TestCase中的run(result)方法,测试结果保存在TextTestResult中(运行多少,成功多少,失败多少)
test fixture对一个测试用用例环境的搭建和恢复,主要是setUp()和tearDown()
unittest要求单元测试类必须继承 unittest.TestCase,该类中可重写setUp(),tearDown(),setUpClass(),tearDownClasee()四个方法,其他的测试方法需要满足如下要求:
测试方法没有返回值。
测试方法没有任何参数。
测试方法应以test开头
通过命令行python -m unittest TestMyFunc.py执行或调用unittest.main执行:
if name == 'main':
unittest.main()
在unittest中用例默认执行顺序是根据用例名称升序执行而非用例定义的先后顺序执行.自定义执行顺序:
if name == 'main':
tests = [TestMyFunc("test_is_prime"), TestMyFunc("test_add"), TestMyFunc("test_divide")]
suite = unittest.TestSuite()
suite.addTest(tests)
runner = unittest.TextTestRunner()
runner.run(suite)
setUp()和tearDown()是每个test_开头的方法都会在用例执行前和结束后调用一次.setUpClass(cls)和tearDownClass(cls)则是在TestMyFunc.py中执行所有test_开头的方法时才调用.需要用@classmethod
def setUp(self):
print('每个用例执行前调用一次')
@classmethod
def setUpClass(cls):
print('所有用例执行前调用一次)
跳过用例使用skip装饰器,即unittest.skip(reason)无条件跳过,unittest.skipIf(condition,reason)condition为True跳过,unittest.skipUnless(condition,reason)condition为False跳过
@unittest.skipUnless(sys.platform.startwith('linux'), "requires Linux")
def test_divide(self):
...
myfunc.py
def is_prime(num):
if num < 0 or num in (0, 1) or num % 2 == 0:
return False
for ele in range(3, num, 2):
if num % ele == 0:
return False
return True
def add(a, b):
return a + b
def divide(a, b):
return a / b
TestMyFunc.py
import unittest
import PythonScripts.myfunc as my
class TestMyFunc(unittest.TestCase):
"""This is my first testcase, test myfunc.py"""
@classmethod
def setUpClass(cls):
print("每个测试用例执行前会调用setUp()进行环境准备\n")
@classmethod
def tearDownClass(cls):
print("每个测试用例执行后会调用tearDown()来进行恢复\n")
def test_is_prime(self):
"""test the function is_prime()"""
self.assertTrue(my.is_prime(3))
self.assertFalse(my.is_prime(10))
self.assertFalse(my.is_prime(101))
self.assertFalse(my.is_prime(-2))
def test_add(self):
"""test the function add"""
self.assertEqual(10, my.add(4, 6))
self.assertNotEqual(8, my.add(3, 4))
def test_divide(self):
"""test the function divide"""
self.assertEqual(2, my.divide(6, 3))
self.assertNotEqual(3, my.divide(9, -3))
if __name__ == "__main__":
unittest.main(verbosity=2)
Python unittest使用小结的更多相关文章
- 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"
在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...
- 自动化测试神器 之 python unittest 断言
自动化测试的最后一步需要判断结果是否正确,而正确设置断言可以帮助判断测试用例的执行结果,从而提高自动化测试的效率,python unittest 提供了一个比较完整的断言方法.unittest框架测 ...
- 第二种方式,修改python unittest的执行顺序,使用猴子补丁
1.按照测试用例的上下顺序,而不是按方法的名称的字母顺序来执行测试用例. 之前的文章链接 python修改python unittest的运行顺序 之前写的,不是猴子补丁,而是要把Test用例的类名传 ...
- Pycharm上python unittest不执行"if __name__ == '__main__' "问题or选择非unittest run
转:http://www.cnblogs.com/csjd/p/6366535.html python unittest不执行"if __name__ == '__main__' " ...
- 简单实现接口自动化测试(基于python+unittest)
简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Pytho ...
- python+unittest 搭建简易的接口测试框架
主要介绍如何使用python+unittest快速搭建一个接口测试的框架 1.安装python unittest 2.新建一个python项目ApiTest 在setUp和setDown里设置一些需 ...
- Python unittest基本框架组成(1)
Python的标准库——unittest(可以实现自动化测试框架的搭建) python unittest四大组成“元件”: test fixture(测试脚手架)——测试代码的运行环境,指测试准备前和 ...
- Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架
整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...
- 接口自动化-python unittest+requests+HTMLrunner
从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...
随机推荐
- Struts2高位漏洞升级到struts2.3.32
Struts2高位漏洞升级到struts2.3.32 3月7日带来了一个高危漏洞Struts2漏洞——CVE编号CVE-2017-5638.其原因是由于Apache Struts2的Jakarta M ...
- php laravel加密 form表单认证 laravel分页
use Illuminate\Support\Facades\Crypt; echo Crypt::encrypt(123); //加密echo "<br>";//解密 ...
- js自执行事件
let a = document.createElement("a");let event = new MouseEvent("click");a.downlo ...
- 关于python的一些想法
我来自信息管理与信息系统专业,大一学过c语言但不太精通.学习python是为了学会这门新语言,据了解python会慢慢成为主流编程语言. 因为对绘图方面很感兴趣,希望老师能够在课上多讲一些这方面的东西 ...
- turtle画戒指
import turtleturtle.bgcolor('black')turtle.speed(5)turtle.pensize(3)for i in range(1,5): turtle.righ ...
- pycharm中运行成功的python代码在jenkin中运行问题总结
我们在用selenium+python完成了项目的UI自动化后,一般用jekins持续集成工具来定期运行,python程序在pycharm中编辑运行成功,但在jenkins中运行失败的两个问题,整理如 ...
- 魔力Python--经典SQL语法大全
具体转载自哪里,我也忘记了... 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明: ...
- drf框架之分页器的用法
1. 分页器分为:简单分页器与偏移分页器和加密分页器 2.实现一个简单的分页器的用法: # 简单分页 # 第一步,导入分页类 # from rest_framework.pagination impo ...
- matplotlib.mlab库的重要函数
连接地址 matplotlib.mlab¶ 与 MATLAB兼容的函数 MATLAB compatible functions¶ cohere() Coherence (normalized cros ...
- GIS案例学习笔记-三维生成和可视化表达
GIS案例学习笔记-三维生成和可视化表达 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:针对栅格或者矢量数值型数据,进行三维可视化表达 操作时间:15分钟 案 ...