多测师肖sir___接口自动化测试框架(python+request+unittest+ddt)

接口自动化测试框架
一、接口自动化测试框架(python+request+unittest+ddt)
首先我们新建一个新项目:名称zdh
二、在一个项目中:新建6个包
第一个包conf包用来填写配置参数、地址等
第二个包data 包用来存放测试用例的表格
第三个包report 包用来存放测试报告
第四个包case 用例包 用来编写测试用例
第五个包run包 运行包 用来运行所有的用例或邮件等
第六个包utils 包 工具类包 存放所有自己封装的语句和外包导入的工具函数

在这里插入图片描述
三、我们开始来编写框架,今天这个接口自动化框架只要是为了实现一个接口有多条用例的情况;
详解:
(1)cmf_ini 新建一个ini文件
在这里插入图片描述
ini 文件中格式: ini文件中的数据是动态变化
节点
键=值

[env]   #section         #option
url= http://cms.duoceshi.cn
headers = {"Content-Type":"application/x-www-form-urlencoded"}
[test_data]
username = admin
pwd = 123456
[db]
[email]

(2)我们要把整个项目项目中的路径设计好。如下:

# 定义项目的路径
# 获取当前运行脚本的绝对路径
import os
base_path = os.path.dirname(os.path.dirname(__file__))
# print(base_path)
# 定义conf的路径
conf_path = os.path.join(base_path,'conf')
# 定义data的路径
data_path = os.path.join(base_path,'data')
# 定义report路径
report_path = os.path.join(base_path,'report')
#定义testcase路径
testcase_path = os.path.join(base_path,'testcase')

(3)然后可以把我们接口用例写好,用xlsx的表格
在这里插入图片描述

在这里插入图片描述
(4)创建一个接口调用的方法:api 报名

#这个模块是用来封装发送接口请求的工具类,我们首先先顶定义一个类Send_requests,那么要根据类创建对象, 
保存会话,我们请求的参数在Session() 点击下ctrl;我们请求的method是哪一种,我们去判断
import  requests
class   Send_requests(object): def  __init__(self):self.session=requests.Session() # 创建session对象保持会话def  send(self,method,url,data= None,json=None,params=None,headers= None):method=method.lower() #接口请求方法中都转换成小写格式if   method=='get': #对mehod做判断response=self.session.get(url,params)elif method=='post': # 还有很多异常分支response=self.session.post(url,data,headers)elif method=='post_json':response=self.session.post(url,json,headers)elif  method=='delete':response=self.session.delete(url,data)elif  method=="put":response=self.session.put(url,data)return response

在这里插入图片描述
这个封装完以后,就涉及到数据的入参(如,环境,url等),我们可以去读取ini文件中的配置参数
首先要下载ConfigParser 模块
在这里插入图片描述

from  configparser import ConfigParser  #导入ConfigParser文件
from   conf.cms_path import *
import os
class  R_conf(ConfigParser):  #可以使用继承,可以不使用继承,我们现在继承了ConfigParser类,我们要调用def  __init__(self,filename):  #构造函数super(R_conf,self).__init__() #继承父类的构造方法self.filename=filename   #把传进来实行参数赋值给到实例变量self.read(self.filename) #我要读ini文件进行读取def  get_value(self,section,option): #获取ini文件的数据value=self.get(section,option) #return value
path=os.path.join(conf_path,"cms_conf.ini")
c=R_conf(path)
print(c.get_value("env","url"))
# print(c.get_value("test_data","username"))

我们封装一个编写read_excel.py 的py文件在utils下:
我们要下载一个openpyxl
在这里插入图片描述
我们要实现读excel模块

#封装一个读取表格的工具类import  openpyxl
from   conf.cms_path import *class R_excel(object): #我们封装一个读取excel表格的数据def __init__(self,filename,sheet_name):  self.filename=filenameself.sheet_name=sheet_namedef open(self): #打开excel 表格取对应的sheet页面#load_workbook是打开表格,加载打开页面self.wb=openpyxl.load_workbook(self.filename)#self.wb这个对象读取对应sheet页面self.sh=self.wb[self.sheet_name]  #根据页面名来读取def read_data(self):  #定义一个读取数据self.open() #先调用open打开表格datas=list(self.sh.rows) #把每一行的元数据放在list列表# print(datas)# for i  in datas[0]:#     print(i.value)title=[i.value  for  i   in  datas[0]]cases=[]for j  in   datas[1:]:values=[k.value  for  k  in  j]# print(values)case=dict(zip(title,values)) #把# print(case)cases.append(case) #把所有数据添加到列表return cases  #把所有的用例作为返回参数def write_excel(self,row,colum,value=None):self.open()self.sh.cell(row,colum,value)self.wb.save(self.filename)
if __name__ == '__main__':path=os.path.join(data_path,"apicase.xlsx"c=R_excel(path,'login')# c.read_data()c.write_excel(2,8,'通过')

在封装一个登录的公共方法

from utils.read_conf import *
from utils.api import Send_requests
class Cms_login():def login(self):request=Send_requests()url=c.get_value('env','url')+'/cms/manage/loginJump.do'data={'userAccount': 'admin', 'loginPwd': '123456'}headers={"Content-Type":"application/x-www-form-urlencoded"}response=request.send(method='post',url=url,data=data,headers=headers)print(response.json())return request
if __name__ == '__main__':DX=Cms_login()DX.login()

然后再开始在testcase模块中编写用例
定义:test_login

import  unittest
from  ddt  import   ddt,data,unpack,file_data
from utils.read_excel import *
from  conf.cms_path import *
from   utils.api import Send_requests
from   utils.read_conf import ccase_file = os.path.join(data_path,'apicase.xlsx')@ddt
class Test_Login(unittest.TestCase):excel = R_excel(case_file,'login')cases = excel.read_data()  #一个列表当中是5个字典,每个字典都是一个用例# print(cases)request = Send_requests()  #创建了一个发送接口请求的对象@data(*cases)def test_01_login(self,case):'''封装登录接口''' #数据要从Excel表格里面拿# 1.准备接口的入参url = c.get_value('env','url')+case['url']print(url)# eval()  函数是用来执行一个字符串表达式,并返回表达式的值headers = eval(c.get_value('env','headers'))method = case['method']data = eval(case['data'])excepted = eval(case['excepted'])case_id = case['case_id']case_id = case_id+1  #记录当前跑了几条用例# 2.发送接口请求response = self.request.send(method=method,url=url,data=data,headers=headers)result = response.json()# print(result)# 3.对接口的响应内容进行断言try:  #try尝试去执行代码self.assertEqual(excepted['msg'],result['msg'])  #断言期望结果和实际结果是否一直self.assertEqual(excepted['code'],result['code'])except Exception as e: #捕捉异常self.excel.write_excel(case_id,8,'未通过')print(e)else:self.excel.write_excel(case_id,8,'通过')if __name__ == '__main__':unittest.main()

封装好了用例模板以后就可以安装格式进行读取
在这里插入图片描述

写好用例以后,我们要在run包,将内容运行生成报告,发送邮件邮件
第一:将报告模板,邮件导入工具类中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower

vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower 第一次用vscode,然后遇到这个问题,在设置里搜索 terminal.integrated.defaultProfile.windows 将这里的null改成"Command Prompt" 重启就可以了

Spring Cloud学习(五)【Feign 远程调用】

文章目录 RestTemplate方式调用存在的问题Feign的介绍定义和使用Feign客户端Feign 的自定义配置Feign 性能优化Feign 的最佳实践 RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差&am…

jmeter接口自动化部署jenkins教程

首先,保证本地安装并部署了jenkins,jmeter,xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc ---注意:原理是,jmeter自生成的报告jtl文件,通过xslproc工具,再结合jmeter自带的模板修改&…

5 Paimon数据湖之表数据查询详解

更多Paimon数据湖内容请关注:https://edu.51cto.com/course/35051.html 虽然前面我们已经讲过如何查询Paimon表中的数据了,但是有一些细节的东西还需要详细分析一下。 首先是针对Paimon中系统表的查询,例如snapshots\schemas\options等等这些…

Spring Cloud之多级缓存

目录 传统缓存 多级缓存 JVM进程缓存 Caffeine 缓存驱逐策略 实现进程缓存 常用Lua语法 数据类型 变量声明 循环使用 定义函数 条件控制 安装OpenResty 实现Nginx业务逻辑编写 请求参数解析 实现lua访问tomcat JSON的序列化和反序列化 Tomcat的集群负载均衡 …

stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)

首先要说明一下原理:使用stm32无法准确产生1us的时间,但是超声波测距一定要依赖时间,时间不准,距离一定不准,这是要肯定的,但是在不准确的情况下,要测量一个比较准确的时间,那么只能…

python中的异常与模块

异常 为了能够让代码可以正常的运行下去,不会因为某个语句而让程序崩溃,所以我们就需要使用异常,异常的语法格式如下: try:可能出现异常的语句 except:出现异常之后的处理同时python也是支持捕获指定异常的 try:可能出现异常的…

说说对Fiber架构的理解?解决了什么问题?

一、问题 JavaScript引擎和页面渲染引擎两个线程是互斥的,当其中一个线程执行时,另一个线程只能挂起等待 如果 JavaScript 线程长时间地占用了主线程,那么渲染层面的更新就不得不长时间地等待,界面长时间不更新,会导…

NIO 笔记(二)Netty框架专题

【笔记来自:it白马】 Netty框架 前面我们学习了Java为我们提供的NIO框架,提供使用NIO提供的三大组件,我们就可以编写更加高性能的客户端/服务端网络程序了,甚至还可以自行规定一种通信协议进行通信。 NIO框架存在的问题 但是之…

Centos7安装PostgreSQL 14

环境: Centos7安装PostgreSQL_14版本数据库; 打开官方网站:PostgreSQL: Linux downloads (Red Hat family) 一、 版本选择 复制、粘贴并运行如下脚本: 二、安装步骤 这些命令是在 CentOS 7.x 系统上安装和配置 PostgreSQL 14 的步…

最新大麦订单生成器 大麦订单图一键生成

1、8.6全新版 本次更新了四种订单模板生成 多模板自由切换 2、在软件中输入生成的信息,这里输入的是商品信息,选择生成的商品图片,最后生成即可 新版大麦订单生成 四种模板图样式展示 这个样式图就是在大麦生成完的一个订单截图&#xff…

Hadoop架构、Hive相关知识点及Hive执行流程

Hadoop架构 Hadoop由三大部分组成:HDFS、MapReduce、yarn HDFS:负责数据的存储 其中包括: namenode:主节点,用来分配任务给从节点 secondarynamenode:副节点,辅助主节点 datanode:从节点&#x…

出口美国操作要点汇总│走美国海运拼箱的注意事项│箱讯科技

01服务标准 美国的货物需要细致的服务,货物到港后的服务也是非常重要的。如果在货物到港15天内,如果没有报关行进行(PROCEED),货物就会进入了G.O.仓库,G.O.仓库的收费标准是非常高的。 02代理资格审核 美国航线除了各家船公司&a…

阿里云付费用户破100万 用户规模亚洲最大

导读阿里巴巴集团公布2018财年第一季度财报,阿里云达到一个重要里程碑,云计算付费用户数量首次超过100万,成为亚洲首家达到百万级用户规模的云计算公司。同时,企业级市场被云计算人工智能等新技术全面激活,推动该季度营…

企业年会/年终活动如何邀请媒体记者报道?

​媒体邀约是企业或组织进行宣传的重要手段之一。通过邀请媒体参加活动,可以增加活动的曝光度和知名度,吸引更多的关注和参与。同时,媒体报道还可以提高企业或组织的权威性和可信度,从而让公众更容易接受其传达的信息。 企业年会或…

MFC-TCP网络编程服务端-Socket

目录 1、通过Socket建立服务端: 2、UI设计: 3、代码的实现: (1)、CListenSocket类 (2)、CConnectSocket类 (3)、CTcpServerDlg类 1、通过Socket建立服务端&#xff…

大数据治理——为业务提供持续的、可度量的价值(一)

目录 大数据治理——为业务提供持续的、可度量的价值... 1 概述... 2 大数据治理系列... 2 第一部分:大数据治理统一流程模型概述和明确元数据管理策略... 2 第二部分:元数据集成体系结构... 15 第三部分:实施元数据管理... 25 第四部…

顺序图——画法详解

百度百科的定义: 顺序图是将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时&…

AI机器人小奥,学习不再填鸭

在这个充满科技魅力的时代,一款专为孩子学习量身打造的AI机器人“小奥”正式与大家见面! 它是一款集全球领先的人工智能、语音识别、语义理解、情感陪伴为一体的高科技教育产品,旨在帮助孩子提高学习兴趣、拓宽知识面,以科技创新助…

人工智能基础——Python:Pillow与图像处理

人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…