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. 更改网卡名称以及重启网卡提示Determining if ip address x.x.x.x is already in use for device eth0

    安装系统完成后,在CentOS6.6下网卡名称变为em1,有些不太方便,还是改回eth0 修改grub配置文件,vi /boot/grub/grub.conf,增加如下红色字体 kernel /vml ...

  2. Java程序员必备的10个大数据框架!

    作者:java妞妞 blog.csdn.net/javaniuniu/article/details/71250316 当今IT开发人员面对的最大挑战就是复杂性,硬件越来越复杂,OS越来越复杂,编程语 ...

  3. appium基础一:连接手机和appium-desktop定位元素

    一.获取手机信息 adb devices获取手机或模拟器的设备名 aapt dump badging xxxx.apk获取app的包名.入口等基本信息 如果想要知道手机原生携带的app的基本信息,首先 ...

  4. Linux 下 Nand Flash 调用关系

    Nand Flash 设备添加时数据结构包含关系 struct mtd_partition        partition_info[] --> struct s3c2410_nand_set ...

  5. (转)linux centos 编译luabind-0.9.1 动态库 静态库

    编译时:virtual memory exhausted: Cannot allocate memory 一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual ...

  6. selenium学习笔记——driver.get(url) 页面加载时间太长

    # 两个同时设置才行 # 实现效果:加载状态停止,进行代码下一步操作 driver.set_page_load_timeout(10) driver.set_script_timeout(10) # ...

  7. css3 ---1 基本的选择器

    基本的选择器 <style type="text/css"> /*通配符选择器*/ * { margin: ; padding: ; border: none; } / ...

  8. linux yum 安装 卸载

    安装一个软件时 yum -y install httpd 安装多个相类似的软件时 yum -y install httpd* 安装多个非类似软件时 yum -y install httpd php p ...

  9. 关于公式文件.eqn

    建议默认打开该选项

  10. [violet6] 故乡的梦

    题目 描述 不知每日疲于在城市的水泥森林里奔波的你会不会有时也曾向往过乡村的生活.你会不会幻想过,在夏日一个静谧的午后,你沉睡于乡间路边的树荫里,一片叶子落在了你的肩上, 而你正做着一个悠长的梦,一个 ...