• 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文件中,作为一个模块(对象),将来直接调用。

    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:amytest	estcase"
        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:你的路径
    eport
    eport.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
    如果对软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以加软件测试交流:1085991341,还会有同行一起技术交流。
    然后将这个HTMLTestRunner.py文件放在你的Python安装目录的lib文件夹里即可

    到这里就大功告成啦!最后运行runAllTests.py文件,一次就好,不用担心鼠标点坏,在你的运行显示框处就会有如下显示:

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


    下载下面这个附件,可以看到经过HTMLTestRunner.py处理后的测试报告了,这里就不给大家展示了。
    以上内容希望对你有帮助,有被帮助到的朋友欢迎点赞,评论。

  • 相关阅读:
    jieba库与词云的使用——以孙子兵法为例
    Python 计算π及进度条显示
    风车
    UDP协议编程
    matplotlib的基本使用、绘制雷达图及绘制数学函数
    numpy库的学习笔记及自定义手绘风
    PIL库的学习总结及生成GIF
    预测球队比赛结果及利用pyinstaller打包文件
    汉诺塔的实现
    有进度条的圆周率计算
  • 原文地址:https://www.cnblogs.com/Chaqian/p/12917629.html
Copyright © 2020-2023  润新知