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扩展的更多相关文章

  1. 13.unittest扩展

  2. 014.NET5_MVC_Razor扩展Html控件02

    第二种方法: 通过一个后台方法,返回一个不存在的html标签字符串,在读取的时候,通过后台方法去渲染成需要的标签和内容: 1. 定义一个普通类,类名称建议以TagHelper结尾,并且给类添加特性[H ...

  3. 基于unittest测试框架的扩展

    1 unittest介绍 Unittest,Python自带的单元测试框架,PyUnit类包含TestResult,TestCase, TestSuite,TextTestResult,TextTes ...

  4. unittest单元测试框架实现参数化

    当我们在使用TestNG时,发现它有一个非常好用的参数化功能.当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数. 例子如下: import static org.testng.A ...

  5. DataSetToJson 扩展方法

    001 using System; 002 using System.Collections.Generic; 003 using System.Linq; 004 using System.Text ...

  6. unittest框架官方翻译:中文版

    指数 模块 | 下一个 | 上一个 | Python » 英语 法国 日本 朝鲜的   开发(3.8) 3.7.3rc1 3.6 3.5 2.7  文档 » Python标准库 » 开发工具 » | ...

  7. 【转】nose-parameterized是Python单元测试框架实现参数化的扩展

    原文地址: http://www.cnblogs.com/fnng/p/6580636.html 相对而言,Python下面单元测试框架要弱上少,尤其是Python自带的unittest测试框架,不支 ...

  8. 收藏清单: python测试框架最全资源汇总

    xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...

  9. Django 测试驱动开发

    第一章 1.编写functional_tests.py from selenium import webdriver browser = webdriver.Firefox() browser.get ...

随机推荐

  1. 万恶之源-python介绍

    PATH OF PYTHON (生命短暂,我要学pythonヾ(◍°∇°◍)ノ゙) 一.Python介绍: 简史:Python诞生于1989年的圣诞节, 创始人为Guido van Rossum, 又 ...

  2. Font Awesome 完全兼容 Bootstrap 的所有组件。

    "F_FullName": "其他", "F_Icon": "glyphicon glyphicon-backward fa-lg ...

  3. pip install mysql-python报错1. Unable to find vcvarsall.bat 2 fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory 3.error: command 'mt.exe' failed with exit statu

    最近在安装mysql -python 时报错折腾了半天,通过以下方法解决: 1. pip install mysql-python报错 Unable to find vcvarsall.bat (参考 ...

  4. Vue的组件及传参

    目录 Vue的组件及传参 Vue组件的概念 根组件 子组件(局部组件) 父组件向子组件传值 子组件向父组件传值 Vue的组件及传参 Vue组件的概念 我们首先要知道组件的概念,实际上每一个组件都是一个 ...

  5. 【daydayup】ceshuChat

    时时当勉励,岁月不待人.珍惜时间伐~ 先看看项目运行的效果 这个是在本地环境打开了两个8080端口进行模拟运行的. 先放下作者的开源地址:https://github.com/ceshu/ceshuC ...

  6. 《OpenCV3编程入门》 札记

    图像处理和计算机视觉的区别在于: 图像处理侧重于 "处理"图像 --- 如增强,还原,去噪,分割,等等:而计算机视觉重点在于使用计算机(也许是可移动式的)来模拟人的视觉,因此模拟菜 ...

  7. 【JZOJ2288】【BZOJ1898】【luoguP2579】沼泽鳄鱼

    description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客. 为了让游玩更有情趣,人们在池塘的中央建设了 ...

  8. springboot在工具类中添加service的方法,显示为空的解决方案

    @Component// 1.将工具类声明为spring组件,这个必须不能忘 public class TestUtils { //2.自动注入 @Autowired private ItemServ ...

  9. JVM的内存空间

    一.JVM运行起来,就会给内存划分空间,这块空间成为运行时数据区.运行时数据区主要划分为以下几部分内容: 1.栈 每一个线程运行起来的都会对应一个栈(线程栈),栈中的数据是该线程独有的,不会产生资源共 ...

  10. WhaleCTF之web-本地登录

    WhaleCTF之web-本地登录 前往题目 呵呵,基然对ip限制,没事,掏出burp抓包 改包 添加XFF头部 X-Forwarded-For: 127.0.0.1 发一下 不是admin,没有用户 ...