014-unittest扩展
unittest扩展
1. unittest框架里面---verbosity设置
这里的verbosity是一个选项,表示测试结果的信息复杂度,有三个值:
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
并且 你在命令行里加入不同的参数可以起到一样的效果
加入 –quiet 参数 等效于 verbosity=0
加入–verbose参数等效于 verbosity=2
什么都不加就是 verbosity=1
2. Python 跳过前几行读取文件内容 itertools(islice)使用
参数:islice(文件名, 开始行, 结束行):
from itertools import islice
input_file = open("test.csv")
for line in islice(input_file, 1, None):
do_readline()
3. python 文件读写时用open还是codecs.open
open打开文件只能写入str类型,不管字符串是什么编码方式,有时候我们爬虫或者其他方式得到一些数据写入文件时会有编码不统一的问题,所以就一般都统一转换为unicode。此时写入open方式打开的文件就有问题了
>>> line2 = u'我爱祖国'
>>> fr.write(line2) Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
fr.write(line2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
我们可以将上面的line2编码成str类型,但是太麻烦。我们要把得到的东西先decode为unicode再encode为str。。。代替这繁琐的操作就是codecs.open
>>> import codecs
>>> fw = codecs.open('test1.txt','a','utf-8')
>>> fw.write(line2)
4. 区别 utf-8 和utf-8-sig
”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 会发生错误.
"uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8", 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果.
发送邮件
5.
smtplib.SMTPDataError: (554, b'DT:SPM 126 smtp9
#报错原因是因为“发件人和收件人参数没有进行定义
解决方法:对发件人和收件人参数进行定义
msg['from'] = 'sender@126.com'
msg['to'] = 'receiver@163.com'
6.
AttributeError: module 'yagmail' has no attribute 'SMTP'
关于使用yagmail发邮件报错的解决方法:
用yagmail,发送自动化测试结果邮件,发现运行的时候报错。最后发现是自己的脚本名称用的yagmail.py,更改成另一个就好,换了my_yagmail.py
7.数据驱动
使用读取文件来实现参数化,这里以读取CSV文件为例
# 多条数据当作多个多条用例执行 import csv
import codecs
import unittest
from time import sleep
from itertools import islice
from selenium import webdriver class TestBaidu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.base_url = "http://www.baidu.com"
cls.test_data = []
with codecs.open("baidu_data.csv", "r", "utf_8_sig") as f:
data = csv.reader(f)
for line in islice(data, 1, None):
cls.test_data.append(line) def baidu_search(self,search_key):
self.driver.get(self.base_url)
self.driver.find_element_by_id("kw").send_keys(search_key)
self.driver.find_element_by_id("su").click()
sleep(2) def test_search_selenium(self):
self.baidu_search(self.test_data[0][1]) def test_search_unittest(self):
self.baidu_search(self.test_data[1][1]) def test_search_parameterized(self):
self.baidu_search(self.test_data[2][1]) @classmethod
def tearDownClass(cls):
cls.driver.quit() if __name__ == "__main__":
unittest.main(verbosity=2)
8.使用邮件发送测试报告
import unittest
import time
import yagmail
from HTMLTestRunner import HTMLTestRunner def send_mail(report):
yag = yagmail.SMTP(user="sender@126.com", password="123456", host="smtp.126.com")
subject = "自动化测试报告"
contents = "请查看附件"
yag.send("receiver@126.com", subject, contents, report)
print("email has send out !") if __name__ == "__main__":
# 定义测试用例的目录为当前目录
test_dir = "./test_case"
suit = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")
# 获取当前日期和时间
now_time = time.strftime("%Y-%m-%d %H_%M_%S")
html_report = "./test_report/" + now_time + "result.html"
fp = open(html_report, "wb")
# 调用HTMLTestRunner,运行测试用例
runner = HTMLTestRunner(stream=fp, title="测试报告", description="运行环境:Window 10,Chrome浏览器")
runner.run(suit)
fp.close()
send_mail(html_report) # 发送报告
014-unittest扩展的更多相关文章
- 13.unittest扩展
- 014.NET5_MVC_Razor扩展Html控件02
第二种方法: 通过一个后台方法,返回一个不存在的html标签字符串,在读取的时候,通过后台方法去渲染成需要的标签和内容: 1. 定义一个普通类,类名称建议以TagHelper结尾,并且给类添加特性[H ...
- 基于unittest测试框架的扩展
1 unittest介绍 Unittest,Python自带的单元测试框架,PyUnit类包含TestResult,TestCase, TestSuite,TextTestResult,TextTes ...
- unittest单元测试框架实现参数化
当我们在使用TestNG时,发现它有一个非常好用的参数化功能.当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数. 例子如下: import static org.testng.A ...
- DataSetToJson 扩展方法
001 using System; 002 using System.Collections.Generic; 003 using System.Linq; 004 using System.Text ...
- unittest框架官方翻译:中文版
指数 模块 | 下一个 | 上一个 | Python » 英语 法国 日本 朝鲜的 开发(3.8) 3.7.3rc1 3.6 3.5 2.7 文档 » Python标准库 » 开发工具 » | ...
- 【转】nose-parameterized是Python单元测试框架实现参数化的扩展
原文地址: http://www.cnblogs.com/fnng/p/6580636.html 相对而言,Python下面单元测试框架要弱上少,尤其是Python自带的unittest测试框架,不支 ...
- 收藏清单: python测试框架最全资源汇总
xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...
- Django 测试驱动开发
第一章 1.编写functional_tests.py from selenium import webdriver browser = webdriver.Firefox() browser.get ...
随机推荐
- iOS开发线程之NSThread
1.初始化 - (instancetype)init API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0)) NS_DESIGNAT ...
- 前端笔记:animate+easing用法(hexo next主题自定义动画)
个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io easing介绍 animate默认是有加速度 ...
- Eclipse 中安装 CDT 插件编写 C/C++
使用到的软件 1.Eclipse 开发工具 2.MinGW 编译器 一.Eclipse 中安装 CDT 插件 打开 Eclipse 插件市场 搜索 CDT,并找到如下的插件.插件的版本名字可能不太一样 ...
- 2018-8-10-如何删除错误提交的-git-大文件
title author date CreateTime categories 如何删除错误提交的 git 大文件 lindexi 2018-08-10 19:16:51 +0800 2018-2-1 ...
- Expression表达式 实现and、or搜索
用法: [HttpPost] public ActionResult GetBannerList(int pageIndex, int pageSize, string search) { Resul ...
- Gym - 100941G
Gym - 100941G https://vjudge.net/problem/Gym-100941G比赛的时候真的是不会啊,那就没办法了.结论:每x周减一次头发,第k次剪发时的头发长度为x^k.x ...
- Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序【转】
Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序[转] 标签: javajvm监控工具性能优化 2015-03-11 18:37 1394人阅读 评论(0) 收 ...
- LUOGU P1967 货车运输(最大生成树+树剖+线段树)
传送门 解题思路 货车所走的路径一定是最大生成树上的路径,所以先跑一个最大生成树,之后就是求一条路径上的最小值,用树剖+线段树,注意图可能不连通.将边权下放到点权上,但x,y路径上的lca的答案不能算 ...
- Python学习day18-常用模块之NumPy
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- c#设置文件及文件夹的属性
c#中通过FileAttributes枚举来设置文件或文件夹的属性. FileAttributes 枚举 成员名称 说明 Archive 文件的存档状态.应用程序使用此属性为文件加上备份或移除标记. ...