Python+Selenium笔记(三):使用unittest
#网络很慢可能会运行报错
(一) 前言
Selenium WebDriver是一个浏览器自动化测试的API集合。它提供了很多与浏览器自动化交互的特性,并且这些API主要是用于测试Web程序。如果仅仅使用Selenium WebDriver,我们无法实现执行测试前置条件、测试后置条件,比对预期结果和实际结果,检查程序的状态,生成测试报告,创建数据驱动的测试等功能。
(二) unittest单元测试框架
unittest(一般称为PyUnit)是从Java程序开发中广泛应用的JUnit启发而来的。unittest使我们具备创建测试用例、测试套件、测试夹具的能力。
(三) xUnite测试框架
Arrange:是用来初始化测试的前置条件,包含初始化被测试的对象、相关配置和依赖。
Act:用来执行功能操作。
Assert:用来校验实际结果与预期结果是否一致。
(四) TestCase类
通过继承TestCase类并且在测试类中为每一个测试添加测试方法来创建单个测试或者一组测试。
(五) 使用unittest
(1) 定义一个继承于TestCase 类的子类。
(2) 在类中定义setUp()方法。
(3) 编写测试方法
(4) 代码清理(在类中定义tearDown()方法)
(5) 运行测试
说明:
1、 一个测试用例是从setUp()方法开始执行的,我们可以用这个方法在每个测试开始前去执行一些初始化的任务。可以是这样的初始化准备:比如创建浏览器实例,访问URL,加载测试数据和打开日志文件等。此方法没有参数,而且不返回任何值。当定义了一个setUp()方法,测试执行器在每次执行测试方法之前优先执行该方法。
2、 有了setUp()方法,就可以写一些测试用来验证我们想要测试的程序的功能。测试方法命名以test开头,这种命名约定通知test runner哪个方法代表测试方法。
3、 类似于setUp()方法在每个测试方法之前被调用,TestCase类也会在测试执行完成之后调用tearDown()方法来清理所有的初始化值。一旦测试被执行,在setUp()方法中定义的值将不再需要,所以最好的做法是在测试执行完成的时候清理掉由setUp()方法初始化的数值。
(六) 新建一个目录 data ,创建一个文件category.txt,录入以下数据
编程语言,Java,C++,PHP,Delphi,Python,Ruby,C语言,Erlang,Go,Swift,Scala,R语言,Verilog,其它语言

(七) 测试博客园首页编程语言下的分类信息是否与预期结果一致
import unittest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
class SearchTest (unittest.TestCase):
def setUp(self):
self.driver
= webdriver.Firefox()
self.driver.implicitly_wait(10)
self.driver.maximize_window()
self.driver.get("https://www.cnblogs.com/")
def test_search_by_category(self):
#读取category.txt文件,返回一个字典
with open('data/category.txt', encoding='UTF-8') as category_file:
category_dict = dict()
category_data =
category_file.readline().strip().split(',')
the_class =
category_data.pop(0)
category_dict[the_class] =
category_data
#定位首页网站分类中的编程语言
self.seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')
#光标悬停在“编程语言”上
ActionChains(self.driver).move_to_element(self.seach_class).perform()
# 以列表形式返回编程语言下的所有小类
seach_small = self.driver.find_elements_by_xpath( '//div[@id="cate_content_block_2"]/div[@class="cate_content_block"]/ul/li')
#休眠3秒
time.sleep(3)
small_cate = []
for s in seach_small:
#去掉小类最后面的3个字符(0),并添加到列表small_cate中
small_cate.append(str(s.text)[:-3])
#检查表达式是否为true(此处检查编程语言下的小类是否与预期结果一致)
self.assertTrue(small_cate == category_dict["编程语言"])
# self.assertEqual(small_cate,category_dict["编程语言"])
def tearDown(self):
self.driver.quit()
#加上下面2句,可以通过命令行运行测试,不加的话不影响通过IDE运行测试
if __name__ == '__main__':
#加verbosity=2参数,在命令行中显示具体的测试方法
unittest.main(verbosity=2)
(八)
测试结果如下

通过命令行运行:

Python+Selenium笔记(三):使用unittest的更多相关文章
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- Python+Selenium笔记(九):操作警告和弹出框
#之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用) 改成 driver.switch_to.alert就不会了. (一 ...
- Python&Selenium 数据驱动测试【unittest+ddt+xml】
一.摘要 本博文将介绍Python和Selenium做自动化测试时,基于unittest框架,借助ddt模块,使用xml文件作为测试输入. 二.xml文件 保存路径:D:\\Programs\\Pyt ...
- Python+Selenium笔记(十四)鼠标与键盘事件
(一) 前言 Webdriver高级应用的API,允许我们模拟简单到复杂的键盘和鼠标事件,如拖拽操作.快捷键组合.长按以及鼠标右键操作,都是通过使用webdriver的Python API 中的Ac ...
- Python+Selenium笔记(八):操作下拉菜单
(一) Select类 Select类是selenium的一个特定的类,用来与下拉菜单和列表交互. 下拉菜单和列表是通过HTML的<select> 元素实现的.选择项是通过<sele ...
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- Python+Selenium笔记(十六)屏幕截图
(一) 方法 方法 简单说明 save_screenshot(filename) 获取当前屏幕截图并保存为指定文件 filename:路径/文件名 get_screenshot_as_base64 ...
- Python+Selenium笔记(四):unittest的Test Suite(测试套件)
(一) Test Suite测试套件 一个测试套件是多个测试或测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行. 应用unittest的TestSui ...
- Python+Selenium笔记(十八):持续集成jenkins
(一)安装xmlrunner 使用Jenkins执行测试时,测试代码中会用到这个模块. pip install xmlrunner (二)安装jenkins (1) 下载jekins https: ...
随机推荐
- (转)计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理
原文:https://blog.csdn.net/cc_net/article/details/10419645 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体 ...
- TFS2018环境搭建一单实例安装(适用于小型团队)
1.服务器配置 阿里云 单核CPU,2GB的RAM,SSD硬盘,安装TFS实例 TFS2018要求SQL Server 2016 (minimum SP1)以上.其要求有以下几点: (1).安装SQL ...
- 【Canal源码分析】数据传输协议
Canal的数据传输有两块,一块是进行binlog订阅时,binlog转换为我们所定义的Message,第二块是client与server进行TCP交互时,传输的TCP协议. 一.EntryProto ...
- Android的几种弹出框
项目效果图: 新建一个项目,结构图如下所示: activity_main.xml: <?xml version="1.0" encoding="utf-8" ...
- MyBatis中如何一次执行多条语句(使用mysql数据库)
解决办法不外乎有三个:1.多条sql分批执行:2.存储过程或函数调用:3.sql批量执行. MyBatis中如何一次执行多条语句(使用mysql数据库): 1.修改数据库连接参数加上allowMult ...
- Spring中内置的一些工具类
学习Java的人,或者开发很多项目,都需要使用到Spring 这个框架,这个框架对于java程序员来说.学好spring 就不怕找不到工作.我们时常会写一些工具类,但是有些时候 我们不清楚,我们些的工 ...
- PHP多进程系列笔记(三)
本节讲解几个多进程的实例. 多进程实例 Master-Worker结构 下面例子实现了简单的多进程管理: 支持设置最大子进程数 Master-Worker结构:Worker挂掉,Master进程会重新 ...
- j2ee高级开发技术课程第五周
pplet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序. 如下所示是独立的 J ...
- 散列算法-MD5
信息摘要技术把明文内容按某种规则生成一段哈西值,即使明文消息只改动了一点点,生成的结果也会完全不同. MD5(Message-digest algorithm 5)就是信息摘要的一种实现,它可以从任意 ...
- es6学习笔记11--Proxy和Reflect
Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy可以理解成,在目标对象之前 ...