• 第二个月课堂017讲解接口实战之python+requests(002)


    python+requests 接口自动化框架设计

    基本介绍:

    接口分层思想:
    cms_api:组建并发送接口请求
    config:放所有接口的入参信息
    report:放置运行所有测试用例生成的报告
    run:自动加载所有的测试用例、并且运行
    testcase:继承unittest单元测试框架、组建接口测试用例
    utils:工具类、发送邮件和生成报告模块

    ===================================================================
    cms_api包
    我用登录和查询用户接口为例:

    from dcs003_cms.config.conf import *   #在conf模块中导入所有接口的入参信息
    import requests
    #此层用来组建所有的接口
    session = requests.Session()
    class Cms_Api(object):
        def __init__(self):
            pass   #创建一个session对象
        #1.定义登录接口
        def login(self):
            rep = session.post(url=login_url,data=login_data,json=login_header)
            return rep.json()
        #2.定义查询用户接口
        def queryUserList(self):
            rep = session.post(url=query_url,data=query_data,json=query_header)
            return rep.json()
    #调试代码,其他模块导入不会被运行
    if __name__ == '__main__':
        cms = Cms_Api()
        print (cms.login())
        print (cms.queryUserList())
    

    ========================================================================  

    config包

    config包 :存放接口所有的入参

    # 接口自动化框架设计
    # 此层配置所有接口的基本信息
    #1.登录接口的参数
    login_url = "http://cms.duoceshi.cn/cms/manage/loginJump.do"
    login_data = {
        "userAccount":"admin",
        "loginPwd":"123456"
    }
    login_header = {
        "Content-Type":"application/x-www-form-urlencoded"
    }
    #2.查询用户接口的参数
    query_url = "http://cms.duoceshi.cn/cms/manage/queryUserList.do"
    query_data = {
        "startCreateDate":"",
        "endCreateDate":"",
        "searchValue":"",
        "page":"1"
    }
    query_header = {
        "Content-Type":"application/x-www-form-urlencoded"
    }
    

    ============================================================================  

    report包 :存放测试报告
    ===================================================================================
    run_allcase运行所有用例

     1、导入测试报告模板

    2、搜索并运行测试用例+生成报告路径

    run_main

     ==========================================================================================

    TestCase包   (存放所有测试接口用例)

    #此层用来组建测试用例
    from dcs003_cms.api.cms_api import Cms_Api
    import unittest
    class Cms_TestCase(unittest.TestCase):
        def setUp(self):
            pass
        def tearDown(self):
            pass
        def test001_login(self):
            result1 = Cms_Api().login()
            print (result1)
            self.assertEqual(result1['msg'],'登录成功!')
        def test002_queryUserList(self):
            result = Cms_Api().queryUserList()
            print (result)
            self.assertEqual(result['msg'],'查询用户成功!')
    if __name__ == '__main__':
        unittest.main()
    

    ============================================================================

     utils工具(存放所有的工具)

     

     mail3邮箱

    =============================================================

    图片1

    import smtplib    #smtplib提供了一种很方便的途径发送电子邮件
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    import os
    class SendMail:
    def __init__(self, send_msg,
    smtpserver="smtp.163.com", sender="15949613302@163.com", #15949613302@163.com
    psw="VOQGWBZYNBOAVZGE", receiver="15949613302@163.com", #psw这个为授权码
    port=25, attachment=None):
    # self.reportfile = reportfile
    self.send_msg = send_msg
    self.smtpserver = smtpserver
    self.sender = sender
    self.psw = psw
    self.receiver = receiver
    self.port = port
    self.attachment = attachment
    def send_mail(self):
    """发送最新的测试报告内容"""
    #打开测试报告,读取测试报告内容
    with open(self.send_msg, "rb") as f:
    mail_boday = f.read()
    #定义邮件
    msg = MIMEMultipart()
    msg['subject'] = Header("自动化测试报告", 'utf-8')
    msg['From'] = Header(self.sender, 'utf-8')
    msg['To'] = self.receiver

    #添加附件
    if self.attachment != None:
    file_name = self.attachment.split(os.path.sep)[-1]
    att = MIMEText(open(self.attachment, "rb").read(), "base64", "utf-8")
    att["Content-Type"] = "application/octet-stream"
    att.add_header('Content-Disposition', 'attachment', filename = file_name)
    msg.attach(att)

    body = MIMEText(mail_boday, _subtype="html", _charset='utf-8')
    msg.attach(body)
    smtp = smtplib.SMTP()
    smtp.set_debuglevel(1)
    smtp.connect(self.smtpserver, self.port)
    #用户登录并发送邮件
    smtp.login(self.sender, self.psw)
    smtp.sendmail(self.sender, self.receiver, msg.as_string())
    smtp.quit()
     ===========================================================================================

     邮箱自动化发送的操作步骤:

    第一步、进入如下网址申请163邮箱。

    https://mail.163.com/

    第二步、注册完之后登录、点击如下图设置­点击POP3/SMTP/IMAP。

     

    第三步、右侧点击客户端授权密码。

     第四步、点击开启­然后点击重置授权码。

    第五步、按照如下操作编辑短信发送、然后就可以

     

      

    重置授权码了、授权码和密码不要设置为一样的注意点:授权码和密码不一致、用代码连接163邮件服务器就需要用授权码而不是密码。

    第六步、然后把 init 构造函数里面的psw默认参数的值改为你自己设置的授权码

    就可以用如下的代码发送邮件了。

    代码如下:

    import smtplib    #smtplib提供了一种很方便的途径发送电子邮件
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    import os
    class SendMail:
        def __init__(self, send_msg,
                     smtpserver="smtp.163.com", sender="15949613302@163.com", #15949613302@163.com
                     psw="VOQGWBZYNBOAVZGE", receiver="15949613302@163.com",   #psw这个为授权码
                     port=25, attachment=None):
            # self.reportfile = reportfile
            self.send_msg = send_msg
            self.smtpserver = smtpserver
            self.sender = sender
            self.psw = psw
            self.receiver = receiver
            self.port = port
            self.attachment = attachment
        def send_mail(self):
            """发送最新的测试报告内容"""
            #打开测试报告,读取测试报告内容
            with open(self.send_msg, "rb") as f:
                mail_boday = f.read()
            #定义邮件
            msg = MIMEMultipart()
            msg['subject'] = Header("自动化测试报告", 'utf-8')
            msg['From'] = Header(self.sender, 'utf-8')
            msg['To'] = self.receiver
    
            #添加附件
            if self.attachment != None:
                file_name = self.attachment.split(os.path.sep)[-1]
                att = MIMEText(open(self.attachment, "rb").read(), "base64", "utf-8")
                att["Content-Type"] = "application/octet-stream"
                att.add_header('Content-Disposition', 'attachment', filename = file_name)
                msg.attach(att)
    
            body = MIMEText(mail_boday, _subtype="html", _charset='utf-8')
            msg.attach(body)
            smtp = smtplib.SMTP()
            smtp.set_debuglevel(1)
            smtp.connect(self.smtpserver, self.port)
            #用户登录并发送邮件
            smtp.login(self.sender, self.psw)
            smtp.sendmail(self.sender, self.receiver, msg.as_string())
            smtp.quit()
    

      ===================================================================

    总结下:

    接口分层
    点击File =>new 一个 project
    然后点击project =》new 以下的python package
    cms_api :构建包=》组建并发送接口请求
    cms_config :配置包=》放所有接口的入参信息
    cms_report:报告包 =》放置运行所有测试用例生成的报告
    cms_run:运行包=》自动加载所有的测试用例、并且运行
    cms_testcase :用例包 =》继承unittest单元测试框架、组建接口测试用例
    cms_utils :工具包 =》工具类、发送邮件和生成报告模块

    1.
    写config,把参数值都写好,比如url、data和header,注意各个参数的数值类型,参数的具体值可以在浏览器中打开对应网页,按F12查看代码,在network里面查看参数

    2.
    在cms_pi包中组建接口和发送接口请求,导入request和config,参数名引用config里面的,创建一个全局的session对象、用来保持会话的状态和管理上下文,把各个接口的请求方式编写出来,同时用rep.json()来转换,全部封装在一个类里

    3.
    在testcase包中组建测试用例导入unittest模块、cms_api里面的Cms类,定义一个类,且继承unittest中的TestCase,用匿名对象来调用实例方法,然后进行断言,注意断言内容要与结果完全一致

    4.
    用run模块来运行所有的测试用例导入unittest、time,mail3, HTMLTestRunner,定义项目的路径
    定义用例的路径,定义测试报告的名称
    定义自动搜索用例,执行测试用例并生成报告,这里要注意时间戳。


    5.
    测试用例报告生成在report里面,用谷歌浏览器打开

    6.
    最后就是把报告发送到邮件里

     
  • 相关阅读:
    高可用——Keepalived安装部署使用详解
    Java—File类详解及实践
    MySQL—设置数据库(库、表等)不区分大小写
    MySQL—Mysql与MariaDB启停命令的区别
    Linux—微服务启停shell脚本编写模板
    SpringBoot—集成AOP详解(面向切面编程Aspect)
    Java—Map集合详解
    手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊
    Java高效编程:总结分享
    Redis的几种应用实战
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/14174997.html
Copyright © 2020-2023  润新知