博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口测试基础——第6篇unittest模块(一)
阅读量:4291 次
发布时间:2019-05-27

本文共 3615 字,大约阅读时间需要 12 分钟。

廖雪峰官方网站可以学习Python

我们先来简单介绍一下unittest框架,先上代码,跟住了哦~~

1、建立如下结构的文件夹:

注意,上面的文件夹都是package,也就是说你在new新建文件夹的时候不要选directory,而是要选package;

建好了文件夹,第一步就算完成啦!

2、第二步,我们先来说一下面向对象的思想

面向对象,很简单,你需要先找一个女朋友/男朋友……咳咳,跑题了。面向对象,就是把所有的功能都当做单独的模块,模块之间的耦合(就是关联)度越低,那么你的结构越好,当你需要这些功能时,你只需要去调用相应的模块即可,这样的好处就是如果出错一定是调用的时候出错,而不会写了一大堆代码导致不容易定位报错的根源,当然啦,前提是你封装起来的模块没有错误。

3、第三步,封装模块

3.1 封装常量

把你用到的不变的东西放到一起,这样以后改起来会很方便,比如邮件的发件人、收件人、密码、账号等等……

# coding: utf-8# 邮件配置mail_host = 'smtp.163.com'Smtp_Sender = 'yyshyd@163.com'#授权码得修改Smtp_Password = 'ys123'Smtp_Receivers = ['3239552624@qq.com','120732@qq.com']

将以上内容放在baseInfo包(package)下面的__init__.py文件中

3.2 封装发送邮件的方法

之前已经学过了发送邮件的方法,那我们就先来封装一个发送邮件的方法吧~

# coding: utf-8import sysimport importlibimportlib.reload(sys)#sys.setdefaultencoding('utf8')import baseInfoimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartdef 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-8import unittestclass 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-8import unittestfrom common.module import email_moduledef all_case():    #你的文件路径    case_dir = r"E:\report\mytest\testcase"    discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py", top_level_dir=None)    return discoverif __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("EmailsendingSuccess")

将上面的代码放在runAllTests.py文件中,注意这里的HTMLTestRunner.py

大家可以在这里下载,直接保存那个.py文件即可

http://tungwaiyip.info/software/HTMLTestRunner.html

然后将这个HTMLTestRunner.py文件放在你的Python安装目录的lib文件夹里即可

到这里就大功告成啦!最后运行runAllTests.py文件,一次就好,不用担心鼠标点坏

,在你的运行显示框处就会有如下显示:

注意,后面打印Success会稍微慢一些,因为是在调用发送邮件的方法,需要经过登录、发送的过程。然后你的收件箱就会收到相应的邮件啦:

下载下面这个附件,可以看到经过HTMLTestRunner.py处理后的测试报告:

这里碍于图片大小,只截了一部分图,大家可以自己运行一下。还有就是大家下载的HTMLTestRunner.py文件测试报告样式可能会和我的不太一致,因为我在原来的基础上稍作了一些改动,留下的只是自认为必要的信息,这些都无所谓的,需要的同学可以留言,船长会加你QQ或微信,把我的发给你~~

好啦,今天先把代码给大家发出来,大家可以先有目的的看一下,明天船长会具体的给大家介绍整个代码以及unittest框架的,大家加油~~

转载地址:http://ovqgi.baihongyu.com/

你可能感兴趣的文章
MYSQL sql 语句性能分析
查看>>
C++操作Redis数据库
查看>>
python yield用法
查看>>
python pipe模块用法
查看>>
安装完 MySQL 后必须调整的 10 项配置
查看>>
开发者必备的 12 个 JavaScript 库
查看>>
http错误码
查看>>
python 多线程
查看>>
sipp命令 各参数含义
查看>>
搜集的动植物分类、检索网站
查看>>
ffmpeg源码分析之媒体打开过程
查看>>
Ubuntu/centos/redhat/SUSE sipp安装(带rtp支持,3.5.1版本)
查看>>
周鸿祎:很多程序员聪明,但我一看就知道他不会成功
查看>>
编译程序遇到问题 relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;
查看>>
Const指针 、 指向const的指针 、引用、指针
查看>>
GDB调试命令
查看>>
常见数据类型的字节数
查看>>
gcc/g++ 编译常见问题
查看>>
【设计模式】 工厂模式实例 C++ , 利用工厂模式写一个计算器
查看>>
opencv
查看>>