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使用小结的更多相关文章

  1. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

  2. 自动化测试神器 之 python unittest 断言

    自动化测试的最后一步需要判断结果是否正确,而正确设置断言可以帮助判断测试用例的执行结果,从而提高自动化测试的效率,python unittest  提供了一个比较完整的断言方法.unittest框架测 ...

  3. 第二种方式,修改python unittest的执行顺序,使用猴子补丁

    1.按照测试用例的上下顺序,而不是按方法的名称的字母顺序来执行测试用例. 之前的文章链接 python修改python unittest的运行顺序 之前写的,不是猴子补丁,而是要把Test用例的类名传 ...

  4. Pycharm上python unittest不执行"if __name__ == '__main__' "问题or选择非unittest run

    转:http://www.cnblogs.com/csjd/p/6366535.html python unittest不执行"if __name__ == '__main__' " ...

  5. 简单实现接口自动化测试(基于python+unittest)

    简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Pytho ...

  6. python+unittest 搭建简易的接口测试框架

    主要介绍如何使用python+unittest快速搭建一个接口测试的框架 1.安装python  unittest 2.新建一个python项目ApiTest 在setUp和setDown里设置一些需 ...

  7. Python unittest基本框架组成(1)

    Python的标准库——unittest(可以实现自动化测试框架的搭建) python unittest四大组成“元件”: test fixture(测试脚手架)——测试代码的运行环境,指测试准备前和 ...

  8. Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架

    整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport  多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...

  9. 接口自动化-python unittest+requests+HTMLrunner

    从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...

随机推荐

  1. java基础语法(标识符 修饰符 关键字)

    标识符 用来表示类名,变量名,方法名,类型名,数组名,文件名的有效字符序列称为标识符.   1)只有字母(区分大小写),下划线,美元符号和数字组成,长度不受限制.注:字母包括英文26个字母 ,汉字,日 ...

  2. mysql安装密码策略插件

    https://blog.csdn.net/kk185800961/article/details/79447754 注意linux安装密码策略的插件 validate_password.so

  3. html:布局class名和其他class名个人整理总结

    一:app 二:header 三:main 四:footer 1:中横杠:布局(main-top.main-left等) 2:下横杠:状态(item-active:选中等)

  4. C语言语法

    1.函数指针类型定义,然后指针结构体类型定义,最后的调用形式为aaa.bbb();(aaa为结构体变量)或者 aaa->bbb();(aaa为结构体指针),函数指针最好用结构体封装起来变成指针结 ...

  5. layui表格点击排序按钮后,表格绑定事件失效解决方法

    最近项目使用layui较为频繁,遇到了一个麻烦的问题,网上搜索也没有看到同类型的问题,故此记下来. 需求是点击上图右侧表格中某一个单元格,会触发点击事件如下代码: $("table>t ...

  6. c语言:第一次作业,分支,顺序结构

    1.本章学习总结(2分) 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 学了几节课的c语言了,因为没自学的原因,跟不上进度.对于c语言现在挺有兴趣的,愿意去花时间去弥补 ...

  7. map基本方法

    添加功能: V put(K key, V value)  添加和修改 ,添加时返回null,修改时返回被修改的值   Map<String,String> map = new HashMa ...

  8. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  9. selenium调用webdriver异常

    使用selenium调用webdriver的时候报错. from selenium import webdriver browser = webdriver.Chrome() browser.get( ...

  10. 小强学渲染之Unity Shader噪声应用

    之前玩Tencent的仙剑4手游时,杀死boss会看到boss有“消融”的效果,就是身体上有多个洞洞然后往四周扩散直至尸体完全消失,但效果是没有关闭背面剔除的“穿帮”效果,可能也是考虑性能因素. em ...