python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】
20万的慢慢会实现的吧,hhh
unittest框架,我就不在介绍了,百度有很详细的介绍。
我们只要了解:
1、unittest是单元测试框架
2、它提供用例组织与执行:在实际工作中案例可能有上百条,我们就需要进行用例的组织以及规范,增强代码的可维护性等
3、它提供丰富的比较方法:相等\不相等,包含\不包含,True\False的断言方法等等
4、提供丰富的日志:例如,总执行时间、失败用例数、成功用例数等
这就是别人造好的车,我们直接开。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
unittest组成部分:
TestCase:测试用例,测试用例里面会有很多测试方法,是单元测试中最小维度的测试行为
Test Fixure:测试固件,测试固件是执行测试时的准备工作和收尾工作(打开和关闭浏览器,链接和关闭数据库等等)
TestSuite:测试套件,是测试用例的集合
TestRunner:测试运行器,运行测试用例
TestReport:将测试结果呈现给用户,生成测试报告
接下来我们一点一点的学习,上面是大概整体的了
TestCase类中定义的方法:
setUp(): ------> 该方法:进行测试前的初始化工作
tearDown(): ------> 该方法:进行执行测试后的清除工作(比如关闭浏览器)
我们看下代码:
import unittest #导入unittest框架 class register(unittest.TestCase): #定义一个register类,并且继承unittest中的TestCase类 def setUp(self): #TestCase类中定义的方法,setUp()进行测试前的初始化工作,所以它总是第一个执行
print('我已经做好了准备工作') def tearDown(self): #TestCase类中定义的方法,tearDown()进行执行测试后的清除工作,所以它总是案例执行后最后执行
print('已处理') def test_001(self): #第一个测试案例
print('案例_001') def test_002(self): #第二个测试案例
print('案例_002') if __name__ == '__main__':
unittest.main(verbosity=2) ##单元测试运行需要unittest.main(),作用是将一个单元测试模块变成可以直接运行的测试脚本
verbosity是有三个值,每个值表示的测试结果信息不一样。
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
我们看下运行后的setup 和 tearDown两个方法的执行顺序:
我相信你已经理解我的笔记意思,接下来我们继续:
看下setup()和tearDown()方法与setupclass()和tearDownclass()方法的区别:
TestCase类中定义的方法:
setUp(): 该方法:进行测试前的初始化工作,每条案例都会执行一遍
tearDown(): 该方法:进行执行测试后的清除工作(比如关闭浏览器),每条案例都会执行一遍 敲黑板!!!注意加class后两个方法的区别: setUpClass() 该方法:进行测试前的初始化工作,与setUp()是有区别的,不会每个案例都执行一遍,只会在第一个案例开始前执行一次
tearDownClass() 该方法:进行测试前的初始化工作,与tearDown()是有区别的,不会每个案例都执行一遍,只会在最后一个案例结束后执行一次
'''
我们看下 setupclass()和 tearDownclass()方法在下面小案例中发生了什么:
import unittest #导入unittest
import time as t #导入time 设置别名 t
from selenium import webdriver #导入selenium中的webdriver class page_baidu(unittest.TestCase): #定义一个类,并继承unittest.TestCase类 @classmethod #使用 @classmethod 装饰器函数,把方法变成类方法,可以直接调用方法,不需要实例化类对象就可以调用方法
def setUpClass(cls): ## setUpClass() 该方法:进行测试前的初始化工作,与setUp()是有区别的,不会每个案例都执行一遍,
cls.driver = webdriver.Chrome() #实例化webdriver()对象
cls.driver.maximize_window() #打开浏览器最大化
cls.driver.implicitly_wait(15) #隐性等待时间设置15秒,比如页面加载打不开,我们最多等待15秒,适用于全局
cls.driver.get(r'http://www.baidu.com') #打开百度地址
t.sleep(2) #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的
@classmethod
def tearDownClass(cls): #最后执行的工作
cls.driver.quit() #设置关闭浏览器 def test_baidu_news(self): #案例一
self.driver.find_element_by_link_text('新闻').click() #点击百度页面,超链接【新闻】两个字
t.sleep(2) #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的 def test_baidu_map(self): # 因为第一条案例执行后,setUpClass()方法没有在第二条案例开始的时候进行初始化,所以导致没有回到百度首页,所以选择text文本找不到‘新闻’两个字的超链接,导致有异常出现。
self.driver.find_element_by_link_text('地图').click()
t.sleep(2)
if __name__ =='__main__':
unittest.main(verbosity=2) #单元测试运行需要unittest.main(),作用是将一个单元测试模块变成可以直接运行的测试脚本
我们看下执行后的结果:
如果仔细看了我的笔记,或者你运行了代码,那么你应该知道为啥失败了吧~~~如果不知道,欢迎留言,一起学习
接下来我们看下setUp() 和 tearDown() 方法:
import unittest #导入unittest
import time as t #导入time 设置别名 t
from selenium import webdriver #导入selenium中的webdriver class page_baidu(unittest.TestCase): #定义一个类,并继承unittest.TestCase类 @classmethod #使用 @classmethod 装饰器函数,把方法变成类方法,可以直接调用方法,不需要实例化类对象就可以调用方法
def setUp(cls): ## setUpClass() 该方法:进行测试前的初始化工作,每条案例开始前都会进行一次
cls.driver = webdriver.Chrome() #实例化webdriver()对象
cls.driver.maximize_window() #打开浏览器最大化
cls.driver.implicitly_wait(15) #隐性等待时间设置15秒,比如页面加载打不开,我们最多等待15秒,适用于全局
cls.driver.get(r'http://www.baidu.com') #打开百度地址
t.sleep(2) #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的
@classmethod
def tearDown(cls): #最后执行的工作,每条案例开始前都会进行一次
cls.driver.quit() #设置关闭浏览器 def test_baidu_news(self): #案例一
self.driver.find_element_by_link_text('新闻').click() #点击百度页面,超链接【新闻】两个字
t.sleep(2) #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的 def test_baidu_map(self): # 因为第一条案例执行后,setUp()方法在第二条案例开始的时候,先进行初始化,所以可以在百度首页,找到‘新闻’两个字的超链接。
self.driver.find_element_by_link_text('地图').click()
t.sleep(2)
if __name__ =='__main__':
unittest.main(verbosity=2) #单元测试运行需要unittest.main(),作用是将一个单元测试模块变成可以直接运行的测试脚本
为什么setUp() 和 tearDown() 方法可以将两条案例都执行通过,我想你们应该明白了!!
那么仔细的你会发现案例中的两个案例是这样的;
def test_baidu_news(self): #案例一
self.driver.find_element_by_link_text('新闻').click() #点击百度页面,超链接【新闻】两个字
t.sleep(2) #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的 def test_baidu_map(self): # 因为第一条案例执行后,setUp()方法在第二条案例开始的时候,先进行初始化,所以可以在百度首页,找到‘新闻’两个字的超链接。
self.driver.find_element_by_link_text('地图').click()
t.sleep(2)
执行结果是这样滴:
不要慌,看笔记:
test_baidu_map ()
test_baidu_news()
之所以先执行是,因为会对名字进行比较,两条案例名字的前半部分都是一样的,但是到m和n的时候就不一样了,在ASCLL码中将m和n分别转换为数字后:
函数: ord() 它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值.看清楚哦,是一个字符,不要输入多个哦。
print('m转换为ASCLL码是数字: ',ord('m')) print('n转换为ASCLL码是数字: ',ord('n')) print('我们发现m=109,n=110,所以执行的顺序是先执行109')
什么是ASCII码:自己百度哦,下面附上百度找到的常见的对照,还有哦,小写字母和大写字母的数字是不一样的!!看下面的图吧,如果不理解留言哦
在我们知道了unittest框架执行的顺序规则后,我们可以直接用数字,让案例从我们要求的顺序开始执行。
注意:执行顺序是按照数字从小到大执行。
import unittest #导入unittest
import time as t #导入time 设置别名 t
from selenium import webdriver #导入selenium中的webdriver class page_baidu(unittest.TestCase): #定义一个类,并继承unittest.TestCase类 @classmethod #使用 @classmethod 装饰器函数,把方法变成类方法,可以直接调用方法,不需要实例化类对象就可以调用方法
def setUp(cls):
cls.driver = webdriver.Chrome()
cls.driver.maximize_window()
cls.driver.implicitly_wait(15)
cls.driver.get(r'http://www.baidu.com')
t.sleep(2)
@classmethod
def tearDown(cls):
cls.driver.quit() def test_baidu_001(self): #案例001 测试进入百度新闻界面
self.driver.find_element_by_link_text('新闻').click() #点击百度页面,超链接【新闻】两个字
t.sleep(2) #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的 def test_baidu__002(self): #案例002 测试进入百度地图界面
self.driver.find_element_by_link_text('地图').click() ##点击百度页面,超链接【地图】两个字
t.sleep(2)
if __name__ =='__main__':
unittest.main(verbosity=2) #单元测试运行需要unittest.main(),作用是将一个单元测试模块变成可以直接运行的测试脚本
顺序的问题我们清楚了,可是如果我们真的有上百条案了,当测试结果和上面的图一样的时候,我们还是会懵逼,比如测试结果第二条失败,那么第二条的测试内容测试点是什么?如果有上百条的test_baidu_00N 我们会记不住的,所以我们再次优化:我们在测试案例的方法中添加了注释
import unittest #导入unittest
import time as t #导入time 设置别名 t
from selenium import webdriver #导入selenium中的webdriver class page_baidu(unittest.TestCase): #定义一个类,并继承unittest.TestCase类 @classmethod #使用 @classmethod 装饰器函数,把方法变成类方法,可以直接调用方法,不需要实例化类对象就可以调用方法
def setUp(cls):
cls.driver = webdriver.Chrome()
cls.driver.maximize_window()
cls.driver.implicitly_wait(15)
cls.driver.get(r'http://www.baidu.com')
t.sleep(2)
@classmethod
def tearDown(cls):
cls.driver.quit() '''以下案例是测试百度首页链接'''
def test_baidu_001(self): #案例001 测试进入百度新闻界面
'''测试百度首新闻链接'''
self.driver.find_element_by_link_text('新闻').click() #点击百度页面,超链接【新闻】两个字
t.sleep(2) #设置强制等待2秒,就是必须等待,用导入的time中的sleep方法,不是全局性,哪里需要设置到哪里,局部的 def test_baidu_002(self): #案例002 测试进入百度地图界面
'''测试百度首地图链接'''
self.driver.find_element_by_link_text('').click() ##点击百度页面,超链接【地图】两个字
t.sleep(2)
self.driver.back() '''以下案例是测试百度首页搜索'''
def test_baidu_003(self):
'''测试百度首页搜索功能'''
self.driver.find_element_by_id('kw').send_keys('你好朋友')
if __name__ =='__main__':
unittest.main(verbosity=2) #单元测试运行需要unittest.main(),作用是将一个单元测试模块变成可以直接运行的测试脚本
这样即使我们有上百条案例,哪里出错后,我们都可以直观的看到,是那个测试点失败了。所以写测试案例的规范一定要遵守,给自己也给后面维护代码的人方便。
unittest组成部分:
TestCase:测试用例,测试用例里面会有很多测试方法,是单元测试中最小维度的测试行为
Test Fixure:测试固件,测试固件是执行测试时的准备工作和收尾工作(打开和关闭浏览器,链接和关闭数据库等等)
TestSuite:测试套件,是测试用例的集合
TestRunner:测试运行器,运行测试用例
TestReport:将测试结果呈现给用户,生成测试报告
总结:测试固件的学习就是这么多了,后续有特殊的地方在单独笔记
1、知道了setup() & tearDown() 两个方法的用法
2、了解了setup() & tearDown() 与 setupClass() & tearDownClass() 他们之前的区别
3、知道了运行的顺序
4、对案例编写的规范有了一定程度的认识
python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】的更多相关文章
- Python+Selenium框架 ---一个类文件多个测试方法情况下测试固件的写法
我们测试中,肯定需要,打开一个页面,然后测试这个页面的多个用例,才关闭这个页面,去测试其他页面,在unittest是有相关测试固件方法去支持这种行为.请看下面 # coding=utf-8 impor ...
- python+unittest框架第二天unittest之简单认识Test Suite:测试套件
今天了解下测试套件Test Suite,什么是测试套件,测试套件是由多个Test Case测试用例组成的,当然也可以由多个子测试套件组成. 接下来看下如果构建测试套件,构建测试套件的方法: 1.用un ...
- 第9课:备份mysql数据库、重写父类、unittest框架、多线程
1. 写代码备份mysql数据库: 1)Linux下,备份mysql数据库,在shell下执行命令:mysqldump -uroot -p123456 -A >db_bak.sql即可 impo ...
- Python+Selenium框架设计篇之-简单介绍unittest单元测试框架
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unit ...
- Python3 Selenium自动化web测试 ==> 第一节 起始点之Python单元测试框架 unittest
前置步骤 Python版本:3.6.4 selenium版本:3.11.0 >>> import selenium >>> help(selenium) IDE:P ...
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
- Python单元测试框架unittest
学习接口自动化测试时接触了unittest单元测试框架,学习时参照了虫师编写的<selenium2自动化测试实战>,个人觉得里面讲的例子还比较容易理解的. 一.基础 1.main()和框架 ...
- python学习笔记之——unittest框架
unittest是python自带的单元测试框架,尽管其主要是为单元测试服务的,但我们也可以用它来做UI自动化测试和接口的自动化测试. unittest框架为我们编写用例提供了如下的能力 定义用例的能 ...
- Python 单元测试框架系列:聊聊 Python 的单元测试框架(一):unittest
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
随机推荐
- span标签
<span>在行内定义一个区域,也就是一行内可以被<span>划分成好几个区域,从而实现某种特定效果.<span>本身没有任何属性. <span> 与& ...
- Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MB Description n个集合 m个操作 操作: 1 a b 合并a,b所在集 ...
- NodeJS基础知识
console.log方法: console.log("This is a test string"); node app.js 使用重定向标准输出流: node app.js 1 ...
- 第四组团队git现场编程实战
组员职责分工 组员 分工 林涛(组长) 分配任务.整理数据.写博客 童圣滔 UI界面制作 林红莲 UI界面制作 潘雨佳 测评出福州最受欢迎的商圈 于瀚翔 测评出福州最受欢迎的商圈 覃鸿浩 测评出福州人 ...
- zabbix (11) 监控TCP连接数
对TCP的监控可以采用ss.netstat./proc/net/tcp这三个不同的方案来实现.其中ss是最快的 (1)ss命令 [root@manager1 script_py ::]#time ss ...
- EXCEL技巧-多级目录设置
现有如下图所示的数据,要求:以方法.厚度.品种进行分类汇总,并对数量.面积.金额求和. 在进行分类汇总前需要先对数据进行排序,操作如下图所示. 在排序对话框中,点击“添加条件” 两次,这样可以对三个字 ...
- IOS添加真机调试设备
注意点: 有时需要同意协议什么的,很多时候刷新出来都是白屏,解决办法: 对于不能确认新协议的问题,我发现了一个解决方法:登陆后,直接在浏览器的地址框访问:https://developer.apple ...
- 20165223《网络对抗技术》Exp 9 Web安全基础
目录 -- Web安全基础 ★ 实验说明 实验目标 基础问答 实验准备 ★ 实验内容 SQL注入攻击 1. 命令注入(Command Injection) 2. 数字型注入(Numeric SQL I ...
- Linux fdisk命令创建扩展分区过程
[root@localhost ~]# fdisk /dev/sdb …省略部分输出… Command (m for help): n #新建立分区 Command action e extended ...
- Centos7 安装svn步骤(宝塔面板)
1.运行以下命令安装SVN yum install subversion 2.运行以下命令创建目录 mkdir /var/svn 3.依次运行以下命令创建版本库 cd /var/svn svnad ...