详解python单元测试框架unittest
作者:df0128 发布时间:2022-05-31 23:16:58
一:unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的。
基本用法如下:
1.用import unittest导入unittest模块
2.定义一个继承自unittest.TestCase的测试用例类,如
class abcd(unittest.TestCase):
3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法。
4.定义测试用例,名字以test开头,unittest会自动将test开头的方法放入测试用例集中。
5.一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符。
6.调用unittest.main()启动测试
7.如果测试未通过,则会显示e,并给出具体的错误(此处为程序问题导致)。如果测试失败则显示为f,测试通过为.,如有多个testcase,则结果依次显示。
一个单testcase的简单的例子:
# -*- coding:UTF-8 -*-
'''
Created on 2015年3月24日
@author: Administrator
'''
import unittest
from selenium import webdriver
import time
class TestCase1(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Firefox()
self.base_url="http://www.baidu.com"
def tearDown(self):
self.driver.quit()
def testCase1(self):
driver=self.driver
driver.get(self.base_url)
print "将窗口最大化"
driver.maximize_window()
time.sleep(10)
if __name__ == "__main__":
unittest.main()
一个多testcase的例子:
# -*- coding:UTF-8 -*-
'''
Created on
@author: Administrator
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException,\
NoAlertPresentException
import HTMLTestRunner
#form selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
class Baidu(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://www.baidu.com/?tn=98012088_4_dg&ch=3"
self.verificationErrors = []
self.accept_next_alert = True
self.driver.get(self.base_url)
def test_baidu_search(self):
'''百度搜索'''
driver = self.driver
# driver.get(self.base_url + "/")
try:
driver.find_element_by_id("kw").send_keys("selenium webdriver")
driver.find_element_by_id("su").click()
except:
driver.get_screenshot_as_file('D:\\workspace\\python_prictise\\src\\error.png')
time.sleep(2)
driver.close()
def test_baidu_set(self):
'''百度新闻'''
driver = self.driver
driver.find_element_by_name("tj_trnews").click()
self.assertEqual(driver.title,u'百度新闻搜索——全球最大的中文新闻平台',"switch to baidu news faile!")
# time.sleep(2)
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException: return False
return True
def is_alert_present(self):
try: self.driver.switch_to_alert()
except NoAlertPresentException: return False
return True
def close_alert_and_get_its_text(self):
try:
alert = self.driver.switch_to_alert()
alert_text = alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally: self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
二:跳过单个testcase和testclass的方法
在unittest中也支持类似junit中的跳过单个测试case或者测试class的方法,如下:
@unittest.skip(reason)
无条件的跳过被修饰的testcase或者testclass,reason描述为何跳过该测试,为一个字符串;
@unittest.skipIf(condition,reason)
如果条件condition为真,则跳过该testcase或者testclass;
@unittest.skipUnless(condition,reason)
除非条件condition为真,否则跳过被修饰的testcase或者testclass;
@unittest.expectedFailure
标记测试为一个预期失败的测试,但不会作为失败测试统计在结果中;
三:断言
在unittest中用断言来判断是pass还是fail,常见的断言方法如下:
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b 2.7
assertGreaterEqual(a, b) a >= b 2.7
assertLess(a, b) a < b 2.7
assertLessEqual(a, b) a <= b 2.7
assertRegexpMatches(s, re) regex.search(s) 2.7
assertNotRegexpMatches(s, re) not regex.search(s) 2.7
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs 2.7
assertDictContainsSubset(a, b) all the key/value pairs in a exist in b 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
其他断言方法请查阅官方文档
四:组成测试套件
1.添加数量较少的测试case,可以用如下方法:
suite=unittest.Testsuite()
suite.addTest(testclass(testcase))
这里testclass为测试类的名称,testcase为该测试类下的测试case的名称,为字符串。
2.对于有多个测试类的情况,可以用如下方法:
def createsuite():
testunit=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(testdir,pattern='test_*.py', top_level_dir=None)
print discover
for test_suite in discover:
for testsuit in test_suite:
testunit.addTest(testsuit)
return testunit
alltestnames = createsuite()
如此便可以将一个目录下多个测试文件中的testcase导入。
来源:https://blog.csdn.net/df0128/article/details/45770077
猜你喜欢
- MySQL4.1以前版本服务器只能使用单一字符集,从MySQL4.1版本开始,不仅服务器能够使用多种字符集,而且在服务器、数据库、数据表、数
- 摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载组
- 本文实例讲述了js+ajax实现获取文件大小的方法。分享给大家供大家参考,具体如下:顾名思义,通过JS和Ajax来获取上传文件的大小,在上传
- 1 跳出循环-breakpython提供了一种方便快捷的跳出循环的方法-break,示例如下,计算未知数字个数的总和:if __name__
- 在 做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址,
- 这个使用起来很简单,以前需要的时候在网上找的,用了感觉还不错,具体的看演示就明白了。,这个可以保留你文章中的html标记,需要你修改的就是下
- 前言大家好,我叫善念。这是我的第二篇博客,也是第一篇技术博客,希望大家多多支持,让我更加有动力去更新一些python爬虫类的案例教程。开始确
- 虚拟环境管理创建虚拟环境#默认路径下创建虚拟环境conda create -n pythonVirtual python=x.x # -n:
- 本文实例讲述了Python实现链表反转的方法。分享给大家供大家参考,具体如下:Python实现链表反转链表反转(while迭代实现):链表的
- 如下所示:"""提取文档数超过10000的数据按照某个字段的值具有唯一性进行升序,按照@timestamp进行
- tkinter库Canvas操作三个实例实例一:涂鸦import tkinter as tkimport pyautogui as agfr
- 一、使用ddt和data装饰器的大致框架如下,每个test_开头的方法,代表一条测试用例from ddt import ddt,dataim
- 在python中进行两个整数相除的时候,在默认情况下都是只能够得到整数的值,而在需要进行对除所得的结果进行精确地求值时,想在运算后即得到浮点
- 1、代码from aip import AipFaceimport cv2import timeimport base64from PIL
- 在实际写程序中,经常要对变量类型进行判断,除了用type(变量)这种方法外,还可以用isinstance方法判断:a = 1b = [1,2
- 算法11、分小数和整数:如果小数点个数为1,则可能是小数。如小数点个数为0,则可能是整数。小数点个数非0也非1,那么就不是数字。2、如果是小
- 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片
- 前言不要在用手敲生成Excel数据报表了,用Python自动生成Excel数据报表!废话不多说让我们愉快地开始吧~开发工具Python版本:
- Javascript中括号有四种语义语义1,声明数组 var ary = []; // 声明一个空数组var ary = [1,3]; //
- 反射反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、