unittest培训后总结记录
今天在给同学们上了自动化测试单元框架unittest之后,突发奇想,要总结下自己今天上的课程内容。于是有了下面的一幕:
首先,今天上课的目标是要学会关于unittest框架的基本使用及断言、批量执行。
第一个,unittest是什么:
为了让单元测试代码能够被测试和维护人员更容易地理解,最好的解决办法是让开发人员遵循一定的规范来编写用于测试的代码,所以说unittest就随机缘而生,又因为用的人多了,所以逐渐的变成了python的单元测试标准。unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
第二个,unittest类和方法的简介:
(注:所有的测试用例需要使用test开头作为用例名称)
unittest.TestCase:所有测试用例类必须继承TestCase类。
TestCase.setUp():setUp()方法用于测试用例执行前的初始化工作。例如可以初始化driver对象,可以新建数据库访问对象,可以存放公共变量等。
TestCase.tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭浏览器,关闭数据库连接等。
TestCase.assert*():assert是一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。(常用的断言有:assertEqual,assertIs,assertIn等)
unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。
unittest.main():main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。所以以A开头的测试用例方法会优先执行,以a开头会后执行。
unittest.TestSuite():TestSuite()类是用来创建测试集的。
unittest.TestSuite().addTest():addTest()方法是将测试用例添加到测试集合中。
unittest.defaultTestLoader().discover():通过defaultTestLoader类的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。
unittest.TextTextRunner():通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件。
第三,进行代码unittest实践:
具体实现代码如下:
新建Test_baidu测试类:
import unittest
from selenium import webdriver class testBaidu1(unittest.TestCase):
# 添加setup进行初始化工作
def setUp(self):
self.driver = webdriver.Firefox() # 测试用例使用test开头
def testbaidu(self):
self.driver.get("http://www.baidu.com")
self.driver.find_element_by_id("kw").send_keys("selenium")
self.driver.find_element_by_id("su").click()
text = self.driver.find_element_by_xpath(".//*[@id='1']/h3/a").get_attribute("text")
print(text) # 断言判断文本是否存在于页面中
self.assertIn("Web Browser Automation",text) def testbaidu1(self):
self.driver.get("http://www.baidu.com")
self.driver.find_element_by_id("kw").send_keys("selenium")
self.driver.find_element_by_id("su").click()
text = self.driver.find_element_by_xpath(".//*[@id='1']/h3/a").get_attribute("text")
# 断言判断文本是否存在于页面中
self.assertIn("Web Browser Automation",text) # 添加teardown进行善后处理
def tearDown(self):
self.driver.quit() # 添加测试集合
suit = unittest.TestSuite()
suit.addTest(testBaidu1("testbaidu"))
suit.addTest(testBaidu1("testbaidu1")) if __name__ == '__main__':
# 使用main()方法进行运行用例
# unittest.main() # 使用 run放进行运行测试用例集
run = unittest.TextTestRunner()
run.run(suit)
新建 run_all_case类:
import os
import unittest # 添加用例搜索目录
case_path = os.path.join(os.getcwd(),"case") def all_case():
# 使用discover进行自动搜索测试集
discover = unittest.defaultTestLoader.discover(case_path,
pattern="Test*.py",
top_level_dir=None
)
print(discover)
return discover if __name__ == '__main__':
# 使用run方法运行测试集
run = unittest.TextTestRunner()
run.run(all_case())
最后,直接运行run_all_case进行自动化测试。
unittest培训后总结记录的更多相关文章
- ***CI中的数据库操作(insert_id新增后返回记录ID)
在system/application/config 文件夹和里面的config文件里已经配置了参数 $active_group = "default";$db['default' ...
- 利用mysql中的SQL_CALC_FOUND_ROWS 来实现group by后的记录数统计
最近正在做一个显示消息的列表页,列表页中需要根据一个字段来分组显示.并且需要一个分页的效果. 大家也知道group by 后的数据是每一组一行记录,统计分组后的总的记录数又不能用count,所以SQL ...
- Linux随笔 - linux 多个会话同时执行命令后history记录不全的解决方案【转载】
基本认识linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场景 ...
- 【Linux】 多个会话同时执行命令后history记录不全的解决方案
基本认识 linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场 ...
- SQL(oracle) 取得分组后最大值记录
方法一 select t1.a,t1.b,t1.c from test t1 inner join (seelct a,max(b) as b from test group by a) t2 on ...
- 页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置
当div中绑定数据,给它一个属性overflow-y: scroll,添加长度大小,使其能够出现滚动条:每次刷新的时候滚动条总是会出现在最上方,这使我很头疼,经过查阅网上资料,返现两种方法可行.如下: ...
- 【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
问题描述 Azure Redis在使用的过程中,多次无规律的出现超时问题.抓取到客户端的异常错误后,想进一步的分析是何原因导致了如下异常呢? Timeout awaiting response (ou ...
- MongoDB非正常关闭后修复记录
启动mongodb时出现如下错误: 根据提示可以知道错误原因是mongodb非正常关闭,此时需要对数据库进行修复.修复命令:mongod --repair 或 ./mongod --repair , ...
- JS实现刷新页面后回到记录时滚动条的位置
window.onbeforeunload = function () { var scrollPos; if (typeof window.pageYOffset != 'undefined') { ...
随机推荐
- js大数字转换,将大额数字转换为万、千万、亿等
代码 /** * 大数字转换,将大额数字转换为万.千万.亿等 * @param value 数字值 */ export function bigNumberTransform (value) { co ...
- 两台Linux服务器文件同步
在给公司或者学校做系统部署的时候,为了数据安全往往我们至少需要两台服务器,接下来请看: 我们要实现的是把客户端(192.168.0.1)的复制到目标服务器(192.168.0.2) 一.目标服务器 1 ...
- centos6.8上安装部署 jhipster-registry
必备环境:jdk8,git,maven 1.安装nodejs #由于采用编译的方式很容易出现一些意外的惊喜,所以我们这儿直接用yum命令安装 #1.查看nodejs版本(命令中不要加 -y 如果版本不 ...
- WPF实现手势解锁
桌面程序的解锁方式一般是账号密码,互联网的可以使用扫码解锁,甚至人脸识别.但扫码需要网络,人脸识别又较复杂.所以就想把安卓常用的手势解锁移植到桌面程序上. 先来张效果图,有兴趣的往下看,没兴趣的打扰了 ...
- npm 进阶命令知多少(一)
npm命令知多少(一) 前言 作为前端模块化扎展现形式的npm包,已经在前端开发中不可或缺,熟练掌握npm相关内容,也是前端开发者的一门必修课,那么除了npm publish这类常见内容之外,还有哪些 ...
- 购书网站前端实现(HTML+CSS+JavaScript)
购书+阅读静态网页设计与实现 一.主页设计HTML 1.效果展示及实现 2.完整代码 二.主页样式布局CSS 三.空间功能实现Javascript 主要功能 Javascript完整代码: 总结 购书 ...
- Java 8 Stream API实例
一.开篇 Stream?其实就是处理集合的一种形式,称之为流,在Java8中被引入,可被Collection中的子类调用. 作用?简化代码,提升你的开发效率. 不会?看完这篇你就能自己上手了! 二.实 ...
- 《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载
Selenium是一种非常流行的浏览器和网页自动化技术,开发人员可以使用C#.Java.Python等语言来操作Chrome.Firefox等浏览器. VBA语言可以直接操作访问Microsoft I ...
- loadrunner做http接口的性能测试
不用录制脚本的方法 步骤: 1.先打开Virtual User Generator——选择Web/HTTP协议,进入到主页面,这里不按照传统录脚本的方式输入url,所以直接叉掉录制脚本选项,进入下面的 ...
- Java成神之路:第二帖---- 数据结构与算法之稀疏数组
数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...