引入 unittest 框架

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

import unittest

class Baidu(unittest.TestCase):

Baidu 类继承 unittest.TestCase 类,从TestCase 类继承是告诉unittest 模块的方式,这是一个测试案例。

def setUp(self):

self.driver = webdriver.Firefox()

self.base_url = "http://www.baidu.com/"

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

self. verificationErrors = []

脚本运行时,错误的信息将被打印到这个列表中。

self.accept_next_alert = True

是否继续接受下一下警告

def test_baidu(self):

driver = self.driver

driver.get(self.base_url + "/" )

test_baidu 中放置的就是我们的测试脚本。

def is_element_present(self, how, what):

try : self.driver.find_element(by=how, value=what)

except NoSuchElementException, e: return False

return True

is_element_present 函数用来查找页面元素是否存在,在这里用处不大,通常删除。因为判断页面元素是否存在一般都加在testcase 中。

def is_alert_present(self):

try : self.driver.switch_to_alert()

except NoAlertPresentException, e: 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)

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

浏览器等。

if __name__ == "__main__":

unittest.main()

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

unittest 单元测试框架解析


  • 用import 语句引入unittest 模块
  • 让所有执行测试的类都继承于TestCase 类,可以将TestCase 看成是对特定类进行测试的方法的集合
  • setUp()方法中进行测试前的初始化工作,tearDown()方法中执行测试后的清除工作。setUp()和tearDown()都是TestCase 类中定义的方法
  • 在testSize()中调用assertEqual()方法,对Widget 类中getSize()方法的返回值和预期值进行比较,确保两者是相等的,assertEqual()也是TestCase 类中定义的方法。
  • 提供名为suite()的全局方法,PyUnit 在执行测试的过程调用suit()方法来确定有多少个测试用例需要被执行,可以将TestSuite 看成是包含所有测试用例的一个容器。

采用PyUnit 提供的动态方法,只编写一个测试类来完成对整个软件模块的测试,这样对象的初始化工作可以在setUp()方法中完成,而资源的释放则可以在tearDown()方法中完成。

我们可以在一个测试类中,写多个测试用例对被测试类的方法进行测试。

完整的单元测试很少只执行一个测试用例,开发人员通常都需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,在PyUnit 中是用TestSuite 类来表示的。可以在单元测试代码中定义一个名为suite()的全局函数,并将其作为整个单元测试的入口,PyUnit 通过调用它来完成整个测试过程。

def suite():

suite = unittest.TestSuite()

suite.addTest(WidgetTestCase( "testSize"))

suite.addTest(WidgetTestCase( "testResize"))

return suite

如果用于测试的类中所有的测试方法都以test 开头,Python 程序员甚至可以用PyUnit 模块提供的makeSuite()方法来构造一个。

def suite():

return unittest.makeSuite(WidgetTestCase, "test")

TestSuite 类可以看成是TestCase 类的一个容器,用来对多个测试用例进行组织,这样多个测试用例可以自动在一次测试中全部完成。

PyUnit 使用TestRunner 类作为测试用例的基本执行环境,来驱动整个单元测试过程。

runner = unittest.TextTestRunner()

runner.run(suite)

# 测试

if __name__ == "__main__" :

# 构造测试集

suite = unittest.TestSuite()

suite.addTest(WidgetTestCase( "testSize"))

suite.addTest(WidgetTestCase( "testResize"))

# 执行测试

runner = unittest.TextTestRunner()

runner.run(suite)

PyUnit 模块中定义了一个名为main 的全局方法,使用它可以很方便地将一个单元测试模块变成可以直接运行的测试脚本,main()方法使用TestLoader 类来搜索所有包含在该模块中的测试方法,并自动执行它们。如果Python 程序员能够按照约定(以test开头)来命名所有的测试方法,那就只需要在测试模块的最后加入如下几行代码即可:

# 测试

if __name__ == "__main__" :

unittest.main()

批量执行测试集


合理的做法是一个例一个文件,把所文件放一个文件夹下,通过单独的脚本控制所有用例的执行,将脚本的执行结果输出到一个log 文件中。

执行用例集的脚本:

#-*-coding=utf-8 -*-

import os

#列出某个文件夹下的所有case,这里用的是python,所在py 文件运行一次后会生成一个pyc的副本

caselist=os.listdir( 'D:\\selenium_use_case\\test_case')

for a in caselist:

s=a.split('.')[1:][0] #选取所要执行的用例

if s== 'py':

#此处执行dos 命令并将结果保存到log.txt

os.system( 'D:\\selenium_use_case\\test_case\\%s 1>>log.txt 2>&1'%a )

引入

unittest

框架

相想使用

unittest

框架,首先要引入

unittest

import unittest

class Baidu(unittest.TestCase):

Baidu

类继承

unittest.TestCase

类,从

TestCase

类继承是告诉

unittest

模块的方式,这

是一个测试案例。

def setUp(self):

self.driver = webdriver.Firefox()

self.base_url = "http://www.baidu.com/"

setUp

用于设置初始化的部分,

在测试用例执行前,

这个方法中的函数将先被调用。

这里将

浏览器的调用和

URL

的访问放到初始化部分。

self. verificationErrors = []

脚本运行时,错误的信息将被打印到这个列表中。

self.accept_next_alert = True

是否继续接受下一下警告

def test_baidu(self):

driver = self.driver

driver.get(self.base_url + "/" )

test_baidu

中放置的就是我们的测试脚本。

def is_element_present(self, how, what):

try : self.driver.find_element(by=how, value=what)

except NoSuchElementException, e: return False

return True

is_element_present

函数用来查找页面元素是否存在,在这里用处不大,通常删除。因为

判断页面元素是否存在一般都加在

testcase

中。

def is_alert_present(self):

try : self.driver.switch_to_alert()

 

except NoAlertPresentException, e: 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)

tearDown

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

浏览器等。

if __name__ == "__main__":

unittest.main()

unitest.main()

函数用来测试类中以

test

开头的测试用例。

unittest

单元测试框架解析

import

语句引入

unittest

模块

让所有执行测试的类都继承于

TestCase

类,

可以将

TestCase

看成是对特定类进行

测试的方法的集合

setUp()

方法中进行测试前的初始化工作,

tearDown()

方法中执行测试后的清除工作。

setUp()

tearDown()

都是

TestCase

类中定义的方法

testSize()

中调用

assertEqual()

方法,

Widget

类中

getSize()

方法的返回值和预

期值进行比较,确保两者是相等的,

assertEqual()

也是

TestCase

类中定义的方法。

 

提供名为

suite()

的全局方法,

PyUnit

在执行测试的过程调用

suit()

方法来确定有多

少个测试用例需要被执行,

可以将

TestSuite

看成是包含所有测试用例的一个容器。

 

采用

PyUnit

提供的动态方法,只编写一个测试类来完成对整个软件模块的测试,这样对象

的初始化工作可以在

setUp()

方法中完成,而资源的释放则可以在

tearDown()

方法中完成。

我们可以在一个测试类中,写多个测试用例对被测试类的方法进行测试。

完整的单元测试很少只执行一个测试用例,

开发人员通常都需要编写多个测试用例才能对某

一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,在

PyUnit

是用

TestSuite

类来表示的。

可以在单元测试代码中定义一个名为

suite()

的全局函数,

并将

其作为整个单元测试的入口,

PyUnit

通过调用它来完成整个测试过程。

def suite():

suite = unittest.TestSuite()

suite.addTest(WidgetTestCase( "testSize"))

suite.addTest(WidgetTestCase( "testResize"))

return suite

如果用于测试的类中所有的测试方法都以

test

开头,

Python

程序员甚至可以用

PyUnit

块提供的

makeSuite()

方法来构造一个。

def suite():

return unittest.makeSuite(WidgetTestCase, "test")

TestSuite

类可以看成是

TestCase

类的一个容器,用来对多个测试用例进行组织,这样多

个测试用例可以自动在一次测试中全部完成。

PyUnit

使用

TestRunner

类作为测试用例的基本执行环境,来驱动整个单元测试过程。

runner = unittest.TextTestRunner()

runner.run(suite)

#

测试

if __name__ == "__main__" :

#

构造测试集

suite = unittest.TestSuite()

suite.addTest(WidgetTestCase( "testSize"))

suite.addTest(WidgetTestCase( "testResize"))

 

#

执行测试

runner = unittest.TextTestRunner()

runner.run(suite)

PyUnit

模块中定义了一个名为

main

的全局方法,使用它可以很方便地将一个单元测试模

块变成可以直接运行的测试脚本,

main()

方法使用

TestLoader

类来搜索所有包含在该模块

中的测试方法,并自动执行它们。如果

Python

程序员能够按照约定(以

test

开头)来命名

所有的测试方法,那就只需要在测试模块的最后加入如下几行代码即可:

#

测试

if __name__ == "__main__" :

unittest.main()

批量执行测试集

合理的做法是一个例一个文件,

把所文件放一个文件夹下,

通过单独的脚本控制所有用例的

执行,将脚本的执行结果输出到一个

log

文件中。

执行用例集的脚本:

#-*-coding=utf-8 -*-

import os

#

列出某个文件夹下的所有

case,

这里用的是

python

,所在

py

文件运行一次后会生成一个

pyc

的副本

caselist=os.listdir( 'D:\\selenium_use_case\\test_case')

for a in caselist:

s=a.split('.')[1:][0] #

选取所要执行的用例

if s== 'py':

#

此处执行

dos

命令并将结果保存到

log.txt

os.system( 'D:\\selenium_use_case\\test_case\\%s 1>>log.txt 2>&1'%a )

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

  1. unittest单元测试框架总结

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  2. unittest单元测试框架详解

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

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

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

  4. unittest单元测试框架

    unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...

  5. unittest单元测试框架简单说明

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

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

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

  7. unittest单元测试框架总结(转载)

    转载:https://www.cnblogs.com/yufeihlf/p/5707929.html unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该 ...

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

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

  9. unittest 单元测试框架断言方法

    unittest单元测试框架的TestCase类下,测试结果断言方法:Assertion methods 方法 检查 版本 assertEqual(a, b)  a == b assertNotEqu ...

随机推荐

  1. hadoop之linux常用命令

    Linux的命令后面会有命令选项,有的选项还有选项值.选项的前面有短横线“-”,命令.选项.选项值之间使用空格隔开.有的命令没有选项,会有参数.选项是命令内置的功能,参数是用户提供的符合命令格式的内容 ...

  2. Python实现微信小程序支付功能

    由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 当然具体的参数配置可以参考官 ...

  3. Unity防破解 —— 加密Dll与Key保护

        在阅读这篇文章之前,我在处理mono加密问题时,也是参考了雨凇的文章,所以建议先看一下雨凇写的关于加密Dll的文章: 1.Unity3D研究院之Android加密DLL与破解DLL .SO 2 ...

  4. [POJ 2329] Nearest number-2

    Link: POJ 2329 传送门 Solution: 比较明显的$dp$,但爆搜好像也能过 用多个方向$dp$来解决此题,最后汇总答案即可 一开始我写了4个,但后来发现只要相反的2个方向即可,同时 ...

  5. [洛谷3808]【模板】AC自动机(简单版)

    题目大意: 给定$n$个模式串$p(\sum|p_i|\le10^6)$和一个$t(|t|\le10^6)$,求在$t$中被匹配的$p$的个数. 思路: AC自动机模板题,注意$t$中一个字符可能对应 ...

  6. Linux常用网络带宽监控工具(转)

    本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量分开来显示. 一些命令可以显示单个进程所使用的带 ...

  7. Android - toolbar navigation 样式

    1.修改title 边距 修改边距使用系统的app属性来引入使用,即: xmlns:app="http://schemas.android.com/apk/res-auto" 1 ...

  8. Webpack打包工具学习使用

    Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载.通过 ...

  9. ES6里关于模板字面量的拓展

    JS 的字符串相对其他语言来说功能总是有限的,事实上,ES5中一直缺乏许多特性,如多行字符串.字符串格式化.HTML转义等.ES6通过模板字面量的方式进行了填补,模板字面量试着跳出JS已有的字符串体系 ...

  10. 网络编程 TCP学习

    上传txt文本 通过socket向服务端发送数据 然后用serversocket 接收socket 通过流读取数据保存 服务端在发送确认信息并在client输出 client import java. ...