python+requests 接口自动化框架设计
基本介绍:
接口分层思想:
cms_api:组建并发送接口请求
config:放所有接口的入参信息
report:放置运行所有测试用例生成的报告
run:自动加载所有的测试用例、并且运行
testcase:继承unittest单元测试框架、组建接口测试用例
utils:工具类、发送邮件和生成报告模块
===================================================================
cms_api包
我用登录和查询用户接口为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # 接口自动化框架设计 # 此层配置所有接口的基本信息 #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包 (存放所有测试接口用例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #此层用来组建测试用例 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默认参数的值改为你自己设置的授权码
就可以用如下的代码发送邮件了。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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.
最后就是把报告发送到邮件里
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架