unittest,顾名思义就是一个单元测试框架,但是它不仅适用于单元测试,还适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。

  实例:

  百度搜索界面测试用例Test Case:

 # coding=utf-8

 import unittest
from selenium import webdriver
import time class TestBaiduUi(unittest.TestCase):
def setUp(self):
chromedriver = "C:\Program Files\Google\Chrome\Application\chromedriver"
self.driver = webdriver.Chrome(chromedriver)
self.driver.implicitly_wait(30) # 隐性等待时间为30秒
self.base_url = "https://www.baidu.com" def test_baidu(self):
driver = self.driver
driver.get(self.base_url + "/")
driver.maximize_window()
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("unittest")
driver.find_element_by_id("su").click()
time.sleep(3)
# 对浏览器标题进行断言测试
title = driver.title
self.assertEqual(title, u"unittest_百度搜索") def tearDown(self):
self.driver.quit() if __name__ == "__main__":
unittest.main()

  豆瓣界面测试用例Test Case:

 # coding=utf-8

 import unittest
from selenium import webdriver
import time class TestDoubanUi(unittest.TestCase): def setUp(self):
chromedriver = "C:\Program Files\Google\Chrome\Application\chromedriver"
self.driver = webdriver.Chrome(chromedriver)
self.driver.implicitly_wait(30) # 隐性等待时间为30秒
self.base_url = "https://www.douban.com/" def test_douban(self):
driver = self.driver
driver.get(self.base_url + "/")
driver.maximize_window()
driver.find_element_by_xpath('//*[@id="anony-nav"]/div[2]/form/span[1]/input').clear()
driver.find_element_by_xpath('//*[@id="anony-nav"]/div[2]/form/span[1]/input').send_keys("复仇者联盟三")
driver.find_element_by_xpath('//*[@id="anony-nav"]/div[2]/form/span[2]/input').click()
time.sleep(3)
# 对浏览器标题进行断言测试
title = driver.title
self.assertEqual(title, u"搜索: 复仇者联盟三") def tearDown(self):
self.driver.quit() if __name__ == "__main__":
unittest.main()

  通过测试套件TestSuite来组装多个测试用例。 

 # coding=utf-8

 import unittest
from com.action import test_baidu
from com.action import test_douban
import HTMLTestRunner
import time # 构造测试集
suite = unittest.TestSuite()
suite.addTest(test_baidu.TestBaiduUi('test_baidu'))
suite.addTest(test_douban.TestDoubanUi('test_douban')) if __name__ == '__main__':
# 执行测试
now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))
fp = open("result" + now + ".html", 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='UI界面测试', description=u'用例执行情况:')
runner.run(suite)
fp.close() 

  从上述运行实例可以看出:

  一、TestSuite是多个测试用例集合在一起

  二、runner定义测试报告格式,stream定义报告写入的二进制文件,title为报告的标题,description为报告的说明,runner.run()用来运行测试case,注意最后用fp.close()将文件关闭!

  三、用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。在模式字符的后面,还可以加上+ b t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件。

理解unittest(六)的更多相关文章

  1. Java反射的理解(六)-- 通过反射了解集合泛型的本质

    Java反射的理解(六)-- 通过反射了解集合泛型的本质 上述写了那么多,我们可能会有个疑问,为什么要用反射,步骤比我们常规的加载类操作复杂多了,别急,这个问题我最后才解答,我们先来了解集合泛型的本质 ...

  2. Python单元测试——深入理解unittest (转)

    单元测试的重要性就不多说了,可恶的是Python中 有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, no ...

  3. python单元测试--深入理解unittest

    单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nos ...

  4. Python单元测试——深入理解unittest

    单元测试的重要性就不多说了,可恶的是python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nos ...

  5. 学习C++ Primer 的个人理解(六)

    第四章和第五章没什么特别的.基本上就是书本上的字面意思,也没什么需要注意的细节.直接记录第六章. 本章介绍了函数,其实也没什么特别的.但有几个重点 1.形参的类型决定了形参和实参的交互方式.形参是引用 ...

  6. 深入理解JVM(六)类文件结构

    6.1 关于类文件 1.class文件的一次编译,到处运行的跨平台性: 2.JVM不止有跨平台性,还有跨语言性,不管是JRuby还是Groovy写出来的程序,只要编译出符合JVM规范的class文件就 ...

  7. 单元测试框架之unittest(六)

    一.摘要 本片博文将介绍unittest框架的一些轻便有效的特性,在我们的测试中经常可以用到 如果有一些测试方法不想执行,如果有些测试方法在某些条件下不执行 该当如何? 如果有些方法未在unittes ...

  8. jvm入门及理解(六)——垃圾回收与算法

    一.jvm垃圾回收要做的事情 哪些内存需要回收 什么时候回收 怎么回收 二.如何判断对象已经死亡,或者说确定为垃圾 引用计数法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1: ...

  9. TensorFlow从入门到理解(六):可视化梯度下降

    运行代码: import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.m ...

随机推荐

  1. ZT 二叉树的非递归遍历

    ZT 二叉树的非递归遍历 二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就 是递归定 ...

  2. 【教程】【FLEX】#006 控件位置的拖动

    上一篇笔记学习了怎么从 把一个控件拖放到另外一个控件里面(即 A --> B里面). 而现在呢,则是学习  怎么把 A 拖到另外一个位置. (A -->A位置改变): 先说一下实现的思路( ...

  3. casperjs,phantomjs,slimerjs and spooky

    1.casperjs http://casperjs.org/ CasperJS is a navigation scripting & testing utility for Phantom ...

  4. php分享一个n维数组转一维的函数

    好玩,所以做了这么一个函数,来输出唐诗 函数如下 function changearr($arr){ if(count($arr)==count($arr,1)){ return $arr; } el ...

  5. Oracle中修改sysman和dbsnmp密码正确流程

    1.停止dbconsole $ emctl stop dbconsole 查看状态,确认dbconsole已经停止 $ emctl status dbconsole   2.修改sysman用户和db ...

  6. wk_06.md

    IO与文件操作 文件内建函数open 内建函数open提供了初始化输入/输出(I/O)操作的通用接口.open()内建函数成功打开文件后会返回一个文件对象.open函数的语法如下: open(file ...

  7. 【转】Android中获取应用程序(包)的信息-----PackageManager的使用(一)

    转载请注明出处:http://blog.csdn.net/qinjuning       本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占 ...

  8. Linux搜索查找命令

    Linux搜索查找指令 find,用于在文件树中查找文件并作相应的处理 -name:按照文件名查找文件 -perm:按照文件权限查找文件 -user:按照文件属主来查找文件 -size:按照指定的文件 ...

  9. vue-cli代理开发

    如何设置接口代理? 一.找到config文件下的index.js 二.找到dev里面的proxyTable他的值就是一个{},这里为了方便配置配置文件单独写成一个文件 dev: { env: requ ...

  10. 443 D. Teams Formation

    http://codeforces.com/contest/879/problem/D This time the Berland Team Olympiad in Informatics is he ...