---恢复内容开始---

一.python单元测试实例介绍

unittest框架又叫PyUnit框架,是python的单元测试框架。

先介绍一个普通的单元测试(不用unittest框架)的实例:

首先构造一个方法:count.py

#coding=utf-8

def add(a,b):
return a+b;
def minus(a,b):
return a-b

然后构建一个单元测试的方法:testCount.py,(也可以创建一个类,类里面有多个测试方法)

#coding=utf-8

import count

#整数相加
def test_add():
try:
sum=count.add(5,4)
assert(sum==9),"Integer addition result error!"
except AssertionError,msg:
print msg
else:
print "test pass!" if __name__=="__main__":
print count.add(2,3)
print count.minus(12,1)
test_add()

运行结果如下:

>>>
5
11
test pass!
>>>

知识点一.     __name__=="__main__"

.py有两种使用方式,一种是作为模块被调用,另外一种是直接运行。那么如何判断呢?

.py文件会根据自身的使用方式,它的__name__的属性会不同。

(1)如果它的属性是“__main__”,那么脚本就知道自己是被直接执行的。

(2)如果是被别的文件import的来用,__name__的属性就会是脚本自己的文件名,从而防止错误的执行。

引入的if语句的作用就是  通过检查该模块的__name__属性来实现判断.py文件被使用的方式。从而方便我们代码复用,也可以测试模块。

其实就一句话,即例如:test.py

如果是自身运行,则__name__=="__main__",如果 test.py被其他脚本引用,则  __name__=="__test__",

使用下面这个判断的作用就是使程序只有在自身被运行的情况下才执行,如果只是被调用,那么就不运行了。

知识点二. import 的脚本生成 .pyc文件

testCount.py  import了 count.py 这个模组,用import引入模块时,会将引入的模块文件中的代码执行一次。但是注意,只在第一次引入时才会执行模块文件中的代码,因为只在第一次引入时进行加载,之后不会再加载,而导入的这些文件进行字节编译后以.pyc作为扩展名,只有被 import的包才会执行编译生成此文件,所以会生成 count.pyc文件。

二.引用unnittest单元测试框架

先上代码:unittest.py

#coding=utf-8
import count
import unittest #当pyc文件仍存在时,删除即可 class Mytest(unittest.TestCase):
def setUp(self):
pass def test_add(self):
self.assertEqual(count.add(3,4),7)
def test_minus(self):
self.assertEqual(count.minus(10,4),6) def tearDown(self):
pass #构造测试集,注意suite不和上面的方法是一模块
#报错:AttributeError: 'module' object has no attribute 'suite' def suite():
suite=unittest.TestSuite()
suite.addTest(Mytest("test_add"))
suite.addTest(Mytest("test_minus"))
return suite #注意是双下划线,则报错
#报错:NameError: name '_name_' is not defined
if __name__ =="__main__":
unittest.main(defaultTest='suite')

代码编写中出现的问题:

1.报错:Python脚本正常的,但执行报错"AttributeError: 'module'object has no attribute 'unittest'",其实是.pyc文件存在问题。

问题定位:查看import库的源文件,发现源文件存在且没有错误,同时存在源文件的.pyc文件

问题解决方法:删除该库的.pyc文件,重新运行代码;或者找一个可以运行代码的环境,拷贝替换当前机器的.pyc文件即可

2.报错:AttributeError: 'module' object has no attribute 'suite'

问题定位:def suite():方法缩进错误,它属于全局方法,缩进和类保持一致,而不是和方法保持一致,相当于testng类和testng.xml文件,属于同级设置

3.报错:NameError: name '_name_' is not defined

问题定位:name左右是双下划线!!!少个下划线。。。。。。。。。晕死。

框架介绍:

1.想使用unittest框架,首先要引入unittest 包

import  unittest  

2.Mytest类继承unittest.TestCase 类,所有测试执行的类都继承 TestCase类,可以看成是对特定类进行测试的方法的集合

class Mytest(unittest.TestCase):

3. 其中setUp(), tearDown() 和 aseertEqual() 都是TestCase类下的方法。

setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。一般将浏览器的调用和URL的访问放到初始化部分。

tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。

测试的方法通常以test开头

unitest.main()函数用来测试 类中以test开头的测试用例。

4.suite()为全局方法,是unittest的TestSuite(),通过 addTest(类名("方法名"))来添加测试用例,例如一个类中可以写多个用例,通过suite()使之形成多个测试用例被执行。

运行的测试结果如下:

>>>
..
----------------------------------------------------------------------
Ran 2 tests in 0.005s OK
>>>

三.测试集的运用(如何组织测试用例):

1.直接在suite()中添加测试用例

    def suite():
suite=unittest.TestSuite()
suite.addTest(Mytest("test_add"))
suite.addTest(Mytest("test_minus"))
if __name__ =="__main__":
unittest.main(defaultTest='suite')

2.若测试用例都是以 test开头,则用 makeSuite()方法一次性运行

def suite():
return unittest.makeSuite(Mytest,"test")
if __name__ =="__main__":
unittest.main(defaultTest='suite')

3.可以使用TestRunner的子类 TextTestRunner来执行

if __name__ =="__main__":
suite=unittest.TestSuite()
suite.addTest(Mytest("test_add"))
suite.addTest(Mytest("test_minus"))
return suite runner=unittest.TextTestRunner()
runner.run(suite)

4.若所有的方法都严格按照test开头,则直接用 unittest.main()即可

if __name__ =="__main__":
unittest.main()

---恢复内容结束---

python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)的更多相关文章

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

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

  2. 前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)

    写在前面: 在JavaScript代码中,异步运行是很常见的.当你有异步运行的代码时,Jest需要知道它测试的代码何时完成,然后才能继续进行另一个测试.Jest提供了几种方法来处理这个问题. 测试异步 ...

  3. 四. 引入unittest单元测试框架

    1.   安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...

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

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

  5. python实例编写(5)--异常处理,截图,用例设计

    一.python的异常处理 异常抛出处理机制: 1.若在运行时发生异常,解释器会查找相应的处理语句(handler) 2.若在当前函数无法找到,就将异常传给上层的调用函数,看是否能处理 3.如果在最外 ...

  6. [python 测试框架学习篇] 分享 uiautomator测试框架

    uiautomator测试框架 :https://testerhome.com/topics/4194

  7. #测试框架推荐# test4j,数据库测试

    # 背景 后端都是操作DB的,这块的自动化测试校验的话,是需要数据库操作的,当然可以直接封装方法来操作数据,那么有没有开源框架支持数据操作,让我们关注写sql语句?或者帮我们做mysql的断言呢? # ...

  8. 基于python3在nose测试框架的基础上添加测试数据驱动工具

    [本文出自天外归云的博客园] Python3下一些nose插件经过2to3的转换后失效了 Python的nose测试框架是通过python2编写的,通过pip3install的方式安装的nose和相关 ...

  9. Spring MVC测试框架详解——服务端测试

    随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...

随机推荐

  1. java protected修饰符理解

    Protected类型可以在本包和子类中访问的含义.在本包中访问,顾名思义,可以在定义类的包中的任何地方申请一个包含protected修饰符的域和方法的类的对象,并通过这个对象访问被protected ...

  2. 移动端touch事件 || 上拉加载更多

    前言: 说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉 实现加载更多的插件.然后就留下了个坑:上拉加载的时候会由于用户错误 ...

  3. 【javascript】详解变量,值,类型和宿主对象

    前言 我眼中的<javascript高级程序设计> 和<你不知道的javascript>是这样的:如果<javascript高级程序设计>是本教科书的话, < ...

  4. 十条最有效的PCB设计黄金法则

    十条最有效的PCB设计黄金法则 尽管目前半导体集成度越来越高,许多应用也都有随时可用的片上系统,同时许多功能强大且开箱即用的开发板也越来越可轻松获取,但许多使用案例中电子产品的应用仍然需要使用定制PC ...

  5. JRE 和 JDK 的区别

    JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库.是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的.   JDK顾名思义是java开发 ...

  6. eclipse创建的maven项目无法部署到tomcat

    今天在eclipse中创建了个maven项目,想运行起来看看,发现代码开发完成后无法发布到tomcat. 解决办法如下: 第一种: 选中项目-右键属性-Project Facets 勾选上面三项并选择 ...

  7. Selenium常规操作---基于python

    from selenium import webdriver 1. 打开浏览器 driver=webdriver.Firefox()  #火狐浏览器 driver=webdriver.Ie()  #打 ...

  8. [C#] 分布式ID自增算法 Snowflake

    最近在尝试EF的多数据库移植,但是原始项目中主键用的Sqlserver的GUID.MySQL没法移植了. 其实发现GUID也没法保证数据的递增性,又不太想使用int递增主键,就开始探索别的ID形式. ...

  9. PHP初入,(特效的使用)

    <body> <input id="btn1" type="button" value="按钮" /> <in ...

  10. CCIE-交换路由复习笔记

    交换 考点: 1.trunk link(基础) 2.vtp 3.vlan 4.stp rstp mstp 5.hsrp vrrp glbp 6.ec Trunk link: 修改封装模式 802.1q ...