可以理解为是已经帮我们封装好的东东,可以完成执行用例\预期与实际结果的对比等.

import unittest  封装好的单元测试框架,可以直接使用

编写的测试类的继承unittest.TestCase

setUp  用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用,当然你可以不写

test_xxx  测试case,一定是以test开头

tearDown  在每个测试方法执行后调用,这个地方做所有测试用例执行完成的清理工作,当然你也可以不写

TestSuite  测试套件:就是组合测试case的,常用的方法是addTest

TextTestRunner  测试执行,就是来执行我们的脚本,常用方法是run

常用断言:

以上这些方法都带接受一个msg参数,如果指定则用于报告关于失败的错误信息.

eg:

  assertEqual(first,second,msg=None),如果first和second不等,测试失败,打印msg指定信息

被测试模块

#! /usr/bin/env python
#coding=utf-8 class Add():
def add(self,a,b):
print(a+b)
return a+b

单元测试模块:

import unittest
from add import Add #从add.py引入Add类 #编写的测试类中继承unittest.TestCase
class TestAdd(unittest.TestCase):
#setUp用于初始化的部分,在测试用例执行前,这个方法中的函数将先调用,可不写
def setUp(self):
print("我是setUp") #测试case,一定是以test开头
def test_add_1(self):
a = Add() #生成对象
result = a.add(1,2)#调用函数
#断言,注意self
self.assertEqual(result,3)
print("实际结果符合预期结果") #@unittest.skip("跳过该条用例")
def test_add_2(self):
try:
a = Add()
result = a.add(2,2)
self.assertEqual(result,5,msg="实际结果不符合预期结果")
except Exception as e:
print("错误:",e) #tearDown在每个测试方法执行后调用,做所有测试用例完成的清理工作,可不写
def tearDown(self):
print("我是teardown") '''
#TestSuite测试套件:就是组合测试case的,常用的方法是addTest
#addTest(class名(方法名))
suite = unittest.TestSuite()
suite.addTest(TestAdd("test_add_1"))
suite.addTest(TestAdd("test_add_2")) #TestTestRunner测试执行,就是来执行我们的脚本,常用的方法是run
#自动找test开头的进行运行
runner = unittest.TextTestRunner()
runner.run(suite)
'''
if __name__ == '__main__':
unittest.main()

结果:

我是setUp
3
实际结果符合预期结果
我是teardown
我是setUp
4
错误: 4 != 5 : 实际结果不符合预期结果
我是teardown
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

@unittest.skip(reason)
无条件的跳过被修饰的测试,reason描述为啥跳过该测试

@unittest.skipIf(condition,reason)
如果条件为真,则跳过被修饰的测试

@unittest.skipUnless(condition,reason)
除非条件为真,否则跳过被修饰的测试

被跳过的测试将不执行setUp()和tearDown()

练习:

在unittest_2.py中增加一个test方法,来测试是否get请求成功(利用断言来判断)引入之前封装好的http请求class

被测试模块:之前封装的请求类:get_post_class.py

#! /usr/bin/env python
#coding=utf-8
import requests
import json class Jiekou: #get请求,参数是key-value格式
def get_kv(self,url,params,headers):
try:
r = requests.get(url,params = params,headers = headers)
#转换为python类型的字典格式,json包的响应结果,调用json(),转换成python类型
json_r = r.json()
print("get请求响应结果=",json_r)
return json_r #将处理过的结果返回
except Exception as e:
print('%s' % e)
return {} #psot请求,参数是key-value格式
def post_kv(self,url,data,headers):
try:
r = requests.post(url,data = data,headers = headers)
#转换为python类型的字典格式
json_r = r.json()
print("POST请求相应结果(python类型,供后续使用)=",json_r)
return json_r #将处理过的结果返回
except Exception as e:
print('%s' % e)
return {} #post请求,参数是json格式
def post_json(self,url,data,headers): try:
#python类型转化为json类型
data = json.dumps(data)
r = requests.post(url,data = data,headers = headers)
json_r = r.json()
print("POST请求相应结果(python类型,供后续使用)=",json_r)
return json_r
except Exception as e:
print('请求不能完成:',str(e))
return {}

单元测试模块:

#! /usr/bin/env python
#coding=utf-8 import unittest
from get_post_class import Jiekou class TestHttp(unittest.TestCase):
def setUp(self):
print("我是setUp") def tearDown(self):
print("我是teardown") def test_get_kv_1(self):
try:
url = 'http://v.juhe.cn/laohuangli/d'
params = {"key":"e711bc6362b3179f5a28de7fd3ee4ace","date":"2016-5-14"}
headers = {} http = Jiekou()
response = http.get_kv(url, params,headers)
#提取响应中的error_code字段进行对比
self.assertEqual(response['error_code'], 0, msg="fail")
except Exception as e:
print("错误:",str(e)) '''
#TestSuite测试套件:就是组合测试case的,常用的方法是addTest
suite = unittest.TestSuite()
suite.addTest(TestHttp("test_get_kv_1")) #TextTestRunner测试执行,就是来执行我们的脚本,常用方法是run
#自动找test开头的进行运行
runner = unittest.TextTestRunner()
runner.run(suite)
'''
if __name__ == '__main__':
unittest.main()

结果:

我是setUp
get请求响应结果= {'reason': 'successed', 'error_code': 0, 'result': {'yinli': '丙申(猴)年四月初八', 'yi': '纳采  嫁娶 裁衣 理发 出行 修造 动土 进人口 开市 交易 立券 挂匾 移徙 上梁 栽种 纳畜', 'yangli': '2016-05-14', 'baiji': '丙不修灶必见灾殃 申不安床鬼祟入房', 'wuxing': '山下火 平执位', 'jishen': '鸣犬 天恩 相日 不将 续世 六合 五富 除神 天德合', 'xiongshen': '河魁 死神 月刑 游祸 天刑 五离 五虚 血忌 复日', 'chongsha': '冲虎(庚寅)煞南', 'id': '2251', 'ji': '伐木 安葬 安床 祭祀 祈福'}}
我是teardown
.
----------------------------------------------------------------------
Ran 1 test in 0.295s

OK

python-unittest单元测试框架的更多相关文章

  1. python unittest单元测试框架-2discover

    基于TestLoader提供的discover方法实现用例执行 当用例达达到数十条后,在runtest.py文件中通过addTest()添加/删除测试用例就非常麻烦.此时可以使用discover方法找 ...

  2. python unittest单元测试框架-1

    Test Case.Test Suite.Test Runner.Test Fixture Test Case:单个测试用例 Test Suite:测试组合.可以把多个测试用例集合在一起执行. Tes ...

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

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

  4. Python+selenium之简单介绍unittest单元测试框架

    Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...

  5. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  6. Python+Selenium ----unittest单元测试框架

    unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...

  7. Python 单元测试框架系列:聊聊 Python 的单元测试框架(一):unittest

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  8. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  9. Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架

    一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  10. Python+Selenium学习笔记16 - unittest单元测试框架

    unittest单元测试框架包括 Test Case,  Test Suite, Test Runner, Test Fixture Test Cases 组成Test Suite, Test Run ...

随机推荐

  1. 笔记本WIFI卡简介

    1.Intel AC9560(CNVI) AC9260(pcie) 3165D2W(pcie) 2.Realtek瑞昱 RTL8822be(pcie) RTL8723BU(USB) 英特尔在300系主 ...

  2. html5 cocos2d js Access-Control-Allow-Origin

    1.No 'Access-Control-Allow-Origin' header is present on the requested 近期在接html5的渠道,遇到了跨域的问题,使用 js 的 ...

  3. canvas drawImage方法不显示图片的解决方案

    先复习一下用法: context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 各个参数说明: 参数 描述 img 规定要使用的图像.画布 ...

  4. Python模拟登录12306

    #!/usr/bin/python # -*- coding: utf-8 -*- import re; import sys; import cookielib; import urllib; im ...

  5. jdbc 模板 连接

    package itcast; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;i ...

  6. items" does not support runtime expression

    <%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%> 更改为  <%@tagl ...

  7. openwrt patch

    一: 这几天使用一款电信的4G网卡,发现了一些问题,所以决定打个pitch来解决问题,顺便把patch的生成与使用学习一下 二:安装patch的管理工具quilt 1. sudo apt-get in ...

  8. 目标检测之vibe---ViBe(Visual Background extractor)背景建模或前景检测

    ViBe算法:ViBe - a powerful technique for background detection and subtraction in video sequences 算法官网: ...

  9. 在ios中使用单例模式编程

    本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007     1.    @implementation Singleton ...

  10. 【BZOJ4966】总统选举 线段树+随机化

    [BZOJ4966]总统选举 Description 黑恶势力的反攻计划被小C成功摧毁,黑恶势力只好投降.秋之国的人民解放了,举国欢庆.此时,原秋之国总统因没能守护好国土,申请辞职,并请秋之国人民的大 ...