接口测试基础——第6篇unittest模块(一)
我们先来简单介绍一下unittest框架,先上代码,跟住了哦~~
1、建立如下结构的文件夹:
注意,上面的文件夹都是package,也就是说你在new新建文件夹的时候不要选directory,而是要选package;
建好了文件夹,第一步就算完成啦!
2、第二步,我们先来说一下面向对象的思想
面向对象,很简单,你需要先找一个女朋友/男朋友……咳咳,跑题了。面向对象,就是把所有的功能都当做单独的模块,模块之间的耦合(就是关联)度越低,那么你的结构越好,当你需要这些功能时,你只需要去调用相应的模块即可,这样的好处就是如果出错一定是调用的时候出错,而不会写了一大堆代码导致不容易定位报错的根源,当然啦,前提是你封装起来的模块没有错误。
3、第三步,封装模块
3.1 封装常量
把你用到的不变的东西放到一起,这样以后改起来会很方便,比如邮件的发件人、收件人、密码、账号等等……
# coding: utf-8
# 邮件配置
mail_host = 'smtp.163.com'
Smtp_Sender = 'warrior_meng08@163.com'
Smtp_Password = '授权码'
Smtp_Receivers = ['312652826@qq.com','721@qq.com']
将以上内容放在baseInfo包(package)下面的__init__.py文件中
3.2 封装发送邮件的方法
之前已经学过了发送邮件的方法,那我们就先来封装一个发送邮件的方法吧~
# coding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import baseInfo
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def sendMail(file):
f = open(file, 'rb')
# 读取测试报告正文
mail_body = f.read()
f.close()
# 创建一个带附件的实例
msg = MIMEMultipart()
msg['From'] = baseInfo.Smtp_Sender
receiver = ','.join(baseInfo.Smtp_Receivers)
msg['To'] = receiver
msg['Subject'] = 'Python test'
# 邮件正文
msg.attach(MIMEText('sending email test', 'plain', 'utf-8'))
# 构造附件1
att1 = MIMEText(mail_body, 'base64', 'utf-8')
att1['Content-Type'] = 'application/octet-stream'
att1['Content-Disposition'] = 'attachment; filename= %s' % file
msg.attach(att1)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(baseInfo.mail_host, 25)
smtpObj.login(baseInfo.Smtp_Sender, baseInfo.Smtp_Password)
smtpObj.sendmail(baseInfo.Smtp_Sender, receiver, msg.as_string())
print 'Success'
except smtplib.SMTPException:
print 'Error'
将以上代码放在common->module->email_module.py文件中,作为一个模块(对象),将来直接调用。
注:上面的代码都是教过的哦~~船长也是复制过来用的,只是把打开的文件设置成了参数的形式,常量的地方调用的baseInfo文件夹下面的变量。如果这里不明白就留言哦~~我有几个粉丝(哈哈)有我的QQ,如果他们不明白会问我的,我也会及时给大家解释一下~~
4、用例
接下来我们先写用例,这里为了有代表性,船长先写最简单的用例:
# coding: utf-8
import unittest
class Testcases(unittest.TestCase):
def setUp(self):
print "setUp"
def tearDown(self):
print "tearDown"
def test01(self):
print "test01"
def test03(self):
print "test03"
def test02(self):
print "test02"
是不是很简单~~将上面的代码放在testcase包下面的Testcases.py文件中
5、运行用例并发送测试报告
这里我们只写了3个用例,实际工作中要写几百条用例,我们不可能一个一个的去运行,那样鼠标会点坏的……所以我们需要写一个方法,一次运行所有的用例,这也是unittest框架的方便之处,上代码:
# coding: utf-8
import unittest
from common.module import email_module
def all_case():
#你的文件路径
case_dir = r"E:\a\mytest\testcase"
discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py", top_level_dir=None)
return discover
if __name__=='__main__':
#导入HTMLTestRunner模块
import HTMLTestRunner
#结尾一定要写.html哦
report_path = r"E:\你的路径\report\report.html"
fp = open(report_path, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告", description=u"用例执行情况")
runner.run(all_case())
fp.close()
#调用封装好的sendMail方法,参数为上面的文件
mail = email_module.sendMail(report_path)
print "Email sending Success"
将上面的代码放在runAllTests.py文件中,注意这里的HTMLTestRunner.py
大家可以在这里下载,直接保存那个.py文件即可
http://tungwaiyip.info/software/HTMLTestRunner.html
然后将这个HTMLTestRunner.py文件放在你的Python安装目录的lib文件夹里即可
到这里就大功告成啦!最后运行runAllTests.py文件,一次就好,不用担心鼠标点坏,在你的运行显示框处就会有如下显示:
注意,后面打印Success会稍微慢一些,因为是在调用发送邮件的方法,需要经过登录、发送的过程。然后你的收件箱就会收到相应的邮件啦:
下载下面这个附件,可以看到经过HTMLTestRunner.py处理后的测试报告:
这里碍于图片大小,只截了一部分图,大家可以自己运行一下。还有就是大家下载的HTMLTestRunner.py文件测试报告样式可能会和我的不太一致,因为我在原来的基础上稍作了一些改动,留下的只是自认为必要的信息,这些都无所谓的,需要的同学可以留言,船长会加你QQ或微信,把我的发给你~~
好啦,今天先把代码给大家发出来,大家可以先有目的的看一下,明天船长会具体的给大家介绍整个代码以及unittest框架的,大家加油~~
船长牺牲了开黑的时间写代码,大家也要努力哦~~~这个unittest框架有点恶心,不,是真特么恶心,大家和我慢慢的吃透它!代码是死的,就那么点东西,等我们吃透了再回头看,就会觉得——真特么简单啦~~
微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~
还请大家多多提意见,我们慢慢来,重要的是学会~~~如果你觉得对你有帮助,也欢迎大家转发,船长先谢谢各位啦~~~
接口测试基础——第6篇unittest模块(一)的更多相关文章
- 接口测试基础——第6篇unittest模块(三)
今天是unittest最后一讲,我们解决一下如何只运行一次setUp和tearDown方法以及简单的数据驱动的知识. 1.只运行一次setUp和tearDown方法 很简单,只需要把setUp和tea ...
- 接口测试基础——第6篇unittest模块(二)
通过上次的运行,大家应该已经发现了,就是我们写了三个用例,那么在测试报告中setUp和tearDown方法分别运行了三次.没错,这也就是说,每次运行用例之前都会运行setUp和tearDown方法.今 ...
- 接口测试基础——第5篇xlrd模块
读取Excel表格中的内容,不多说,直接上代码: # coding: utf-8 import xlrd # excel路径 excel_path = r'C:\Users\weiming\Deskt ...
- 接口测试基础——第4篇logging模块
Logging:日志记录是为了跟踪记录软件运行时,发生的事件,包括出错,提示信息等等. log日志级别:日志级别大小关系为:CRITICAL > ERROR > WARNING > ...
- 接口测试基础——第7篇 Python中_、__、__func__之间的区别
今天的东西很少,主要是给自己做个笔记,顺便帮大家普及一下Python中的边角知识: 1.if __name__ == "__main__"是什么意思 答:一个.py文件,如果是自身 ...
- 接口测试基础——第3篇smtplib发送带图片的邮件
smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...
- Java基础之集合篇(模块记忆、精要分析)
千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...
- 接口测试基础——第7篇 简单的Python知识普及(二)之装饰器
今天我们来学习python里面的“装饰器” 1.我在函数test运行前想先打印一些内容怎么办? def func(param): print u"打印的内容" para ...
- 接口测试基础——第2篇smtplib发送带附件的邮件
我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...
随机推荐
- TensorFlow备忘录——conv2d函数
卷积函数 TensorFlow学习备忘录 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_forma ...
- 在Windows使用VC编译ICU
1 编译过程在Cygwin下进行,所以必须得安装Cygwin,并且加上Automake, autoconf, make, ar等选项 2 打开命令行窗口,设置环境变量,主要是可以启动cygwin的ba ...
- Memcached prepend 命令
Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 . 语法: prepend 命令的基本语法格式如下: prepend key flags e ...
- 【Linux】无法添加用户,报“useradd: cannot open /etc/passwd”问题解决过程记录
问题描述 今天在一个新的Linux环境添加用户的时候,发现不能添加,遇到了以下错误 useradd: cannot open /etc/passwd 解决方法 用lsattr命令查看/etc/pass ...
- [spring]xml配置文件---节点解释
转载:https://blog.csdn.net/u012099568/article/details/51423837
- Windows Server 2008 R2网站访问PHP响应慢的解决方法
最近换了台新服务器,由于内存是8G的,所以就换了Windows Server 2008 R2 这款系统,虽然有点陌生,但是熟悉了一下感觉性能非常好,但是在配置完PHP环境之后却发现了问题,访问HTML ...
- 性能测试TPS目标值确定-二八原则
在性能测试中通常使用二八原则来量化业务需求. 二八原则:指80%的业务量在20%的时间里完成. TPS(QPS)=并发数/响应时间 例:如某个公司1000个员工,在周五下午3点-5点有90%的员工登陆 ...
- 1-24-case流程控制和while循环语句的使用
大纲: 1.while循环控制语句 while实战---批量添加规则用户 while实战---猜价格游戏 2.case流程控制语句和exit退出 exit实战---返回值测试 case实战---智能解 ...
- UVA-10054 The Necklace (欧拉回路)
题目大意:有n个珠子,珠子两边的颜色已知,问能否连成一条项链.(两个珠子可以项链当且仅当一个珠子的一边颜色与另一个珠子的另一边颜色相同). 题目分析:欧拉回路.将颜色视作节点,珠子当做边,问题变成了找 ...
- day29 主机管理-堡垒机2-原生ssh会话记录
day29课堂代码:https://github.com/liyongsan/git_class/tree/master/day29 课堂笔记: 通过原生Ssh 记录会话1. 在我们自己的堡垒机交互脚 ...