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邮件服务器就需要用授权码而不是密码。
第六步、然后把 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.
最后就是把报告发送到邮件里