dcsxlh

导航

 

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.
最后就是把报告发送到邮件里

 
posted on 2020-12-22 20:12  多测师_肖sir  阅读(270)  评论(0编辑  收藏  举报