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 ...
随机推荐
- STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据
当出现这个问题时,往往是因为你没有在RCC寄存器中把相关的时钟使能打开. 配置寄存器之前记得调用"RCC_AxxxPeriphClockCmd"先打开需要配置的时钟源,别调用了“R ...
- C# SQL 多条件查询技巧
#region 多条件搜索时,使用List集合来拼接条件(拼接Sql) StringBuilder sql = new StringBuilder("select * from PhoneN ...
- 课程笔记-lisanke
1.判断真需求假需求 真需求:所有人都需要的功能 假需求:只有自己需要的功能 2.找到目标用户 ①不要直接询问是否需要这个功能 ②旁敲侧击式提问:用户使用了什么方式?之前都是怎么做的? case:购物 ...
- Django static静态配置文件
对于Django来说静态文件一般交由Web服务器处理,Django本身不处理静态文件.为了使Django开发环境能够处理静态文件,Django有和生产环境不同的静态文件配置方式. Django 版本: ...
- ie中onclick问题
代码:<button > <span onclick="xxx();">确定</span></button> 在chrome和fir ...
- MyEclipse如何使用debug模式
知道如何打断点,如何进入debug与debug模式的视图,还有工具栏的使用和快捷键的使用 https://blog.csdn.net/menglanyingfei/article/details/55 ...
- C语言利用动态数组实现顺序表(不限数据类型)
实现任意数据类型的顺序表的初始化,插入,删除(按值删除:按位置删除),销毁功能.. 顺序表结构体 实现顺序表结构体的三个要素:(1)数组首地址:(2)数组的大小:(3)当前数组元素的个数. //顺序表 ...
- python随机数(转载)
随机生成 0 到 1 之间的浮点数 random.random() 方法会返回 [0.0, 1.0) 之间的浮点数,注意,这是一个左闭右开的区间,随机数可能会是 0 但不可能为 1 . 随机生成 a ...
- 用maven创建Spring MVC项目
用maven创建Spring MVC项目 mvn archetype:generate -DgroupId=fry-arthur -DartifactId=spring-mvc-study -Darc ...
- Cesium官方教程12--材质(Fabric)
原文地址:https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric 介绍 Fabric 是Cesium中基于JSON格式来描述materi ...