接口测试基础——第6篇unittest模块

Posted 自动化测试实战

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口测试基础——第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"

以上是关于接口测试基础——第6篇unittest模块的主要内容,如果未能解决你的问题,请参考以下文章

接口测试基础-ddt

接口测试基础-ddt

接口测试基础——第8篇 requests模块

接口测试基础——第4篇logging模块

接口测试基础——第4篇logging模块

自动化测试基础篇--Selenium unittest生成测试报告(HTMLTestRunner)