一、在搭建接口自动化测试框架前,我觉得先需要想明白以下几点:

  ① 目前情况下,绝大部分接口协议是http,所以需要对http协议有个基本的了解,如:http协议请求、响应由哪些部分组成,常用的method,对应的请求传参方式等等

  ② 需要对接口发送请求,所以要对可以发送http请求的模块比较熟悉,如python 的requests、urllib 等

  ③ 使用的数据承载工具,如使用excel、mysql、oracle 等

  ④ 实现哪些需求,如 在用例层面控制是否执行用例,响应信息、执行结果、失败原因等等写入数据载体,可变参数分离的配置化,测试结束后邮件发送结果给相关人员等等

  ⑤ 发送请求前需要解决哪些问题,如 上下接口间的关联(包含请求参数与关联参数的映射关系)、url的拼接等等;请求后的断言等等

  ⑥ 其他的,如涉及到接口加密、调用其他语言的方法等等

二、下面是实现的思路:

先遍历接口列表》查找出需要测试的接口》根据接口找到对应的用例》

遍历该接口的用例》找出需要执行的用例》判断用例是否与其他接口有关联》

处理关联关系》拼接请求url及参数》发送请求》断言用例是否通过》写入结果内容》发送邮件

三、框架模块基本结构(数据载体使用excel)

关联示例:

参数配置示例:

日志示例:

四、主函数详细代码(即第二步的思路实现)

from utils.ParseExcel import *
from config.PbulicConfigData import *
from action.GetRely import GetRely
from utils.HttpRequest import HttpRequest
from action.AssertResult import AsserResult
from utils.GetDateOrTime import GetDateOrTime
from utils.SendEmail import Carry_files_EmailSender
import time def main():
parseE=ParseExcel(ExcelPathAndName)
#遍历接口列表
wb=parseE.GetWorkBook()
for idx,cell in enumerate(parseE.GetColumns("API",API_active)[1:],2):
#print(idx,cell.value)
if cell.value=="y":
#print(ord(API_apiName)-64,API_apiName)
#ApiName=parseE.GetValueOfCell("API",columnNo=ord(API_apiName)-64,rowNo=idx)
RequestUrl=parseE.GetValueOfCell("API",columnNo=ord(API_requestUrl)-64,rowNo=idx)
RequestMothod=parseE.GetValueOfCell("API",columnNo=ord(API_requestMothod)-64,rowNo=idx)
ParamsType=parseE.GetValueOfCell("API",columnNo=ord(API_paramsType)-64,rowNo=idx)
ApiCaseSheet=parseE.GetValueOfCell("API",columnNo=ord(API_apiTestCaseFileName)-64,rowNo=idx)
#print(ApiName,RequestUrl,RequestMothod,ParamsType,ApiCaseSheet)
for i,c in enumerate(parseE.GetColumns(ApiCaseSheet,CASE_active)[1:],2):
#print(i,c.value)
if c.value=="y":
RequestData=parseE.GetValueOfCell(ApiCaseSheet,columnNo=ord(CASE_requestData)-64,rowNo=i)
RelyData=parseE.GetValueOfCell(ApiCaseSheet,columnNo=ord(CASE_relyData)-64,rowNo=i)
CheckPoint=parseE.GetValueOfCell(ApiCaseSheet,columnNo=ord(CASE_checkPoint)-64,rowNo=i)
            #依赖关系处理
RequestData=GetRely(parseE,RequestData,RelyData)
print("-----------处理依赖关系后的请求参数---------:",RequestData)
print("-----------依赖关系---------:",RelyData)
print( "-----------检查点参数---------:",CheckPoint)
Response=HttpRequest.request(RequestUrl,RequestMothod,ParamsType,spacer,requestData=RequestData)
print("-------------------接口响应-----------------:",Response.text)
Assertresult=AsserResult.CheckResult(Response.text,CheckPoint)
print(Assertresult)
testTime=GetDateOrTime.GetDates("-")
            #写入结果
parseE.WriteValueInCell(ApiCaseSheet,Response.status_code,rowNo=i,columnNo=ord(CASE_responseCode)-64)
parseE.WriteValueInCell(ApiCaseSheet,Response.text,rowNo=i,columnNo=ord(CASE_responseData)-64)
print("-----------",Assertresult[1])
if Assertresult[0]=="ture":
parseE.WriteValueInCell(ApiCaseSheet, Assertresult[0], rowNo=i, columnNo=ord(CASE_status) - 64,colour="green")
else:
parseE.WriteValueInCell(ApiCaseSheet,str(Assertresult[1]), rowNo=i, columnNo=ord(CASE_failedReason)-64,colour="red")
parseE.WriteValueInCell(ApiCaseSheet, Assertresult[0], rowNo=i, columnNo=ord(CASE_status) - 64,colour="red")
parseE.WriteValueInCell(ApiCaseSheet, testTime, rowNo=i, columnNo=ord(CASE_testTime) - 64)
wb.save(ResultPathAndName)
time.sleep(10)
  #发送邮件
if switch==1:
sender=Carry_files_EmailSender()
sender.send_email(to_email_list,subject,body,files_part=ResultPathAndName)
if __name__=="__main__":
main()

python接口自动化框架搭建的更多相关文章

  1. Jmeter+ant+Jenkins接口自动化框架搭建

    摘自:https://testerhome.com/topics/13389 一.背景  上一篇讲了Jmeter 接口自动化-脚本数据分离实例,我们知道怎么利用Jmeter去编写接口自动化脚本,但是接 ...

  2. 接口自动化框架搭建Unittes+HTMLTestRunner

    本次主要尝试搭建接口自动化框架,基于 unittest+HTMLTestRunner 框架主要模块: config: 存放配置文件 lib: 封装了一些接口前置函数:处理各种事物 log: 存放生成的 ...

  3. python接口自动化框架

    接口测框架 安装教程 需要3.5及以上版本的python pip install -r requirements.txt 使用说明 运行manage.py创建项目 创建的项目在projects目录下 ...

  4. python pytest接口自动化框架搭建(一)

    1.首先安装pytest pip install pytest 2.编写单测用例 在pytest框架中,有如下约束: 所有的单测文件名都需要满足test_*.py格式或*_test.py格式. 在单测 ...

  5. 【python接口自动化框架-unittest】【一】unittest单元测试框架概念

    一.unittst单元测试框架 概念参考:https://docs.python.org/2/library/unittest.html 使用方法:import unittest (引入unittes ...

  6. python+selenium自动化框架搭建

    环境及使用软件信息 python 3 selenium 3.13.0 xlrd 1.1.0 chromedriver HTMLTestRunner 说明: selenium/xlrd只需要再pytho ...

  7. 【python接口自动化框架-unittest】如何传参数到下一个case

    1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...

  8. Jenkins+ant+Jmeter接口自动化框架搭建

    工具准备 JDK: jdk1.8.0_111 Ant: apache-ant-1.9.9 Jmeter: apache-jmeter-3.1 Jenkins: jenkins-2.7.4 JDK安装 ...

  9. python+request接口自动化框架

    python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...

随机推荐

  1. 转PostgreSQL 用游标优化的一个例子

    一位PG社区的朋友提到的一个应用场景,目前遇到性能问题. 数据结构大概是这样的,包含一个主键,一个数组,一个时间,其他字段. 请求分析: 有检索需求,比较频繁.查找数组中包含某些元素的记录,并按时间排 ...

  2. BZOJ2144 跳跳棋[建模+LCA]

    思维题,思路比较神仙. 个人思路过程:个人只想到了只要中间棋子开始向外跳了,以后就不应该向内跳了,这样很蠢.所以应该要么先向内跳一会,要么直接开始中间的向外跳.不知道怎么处理,就卡住了. 20pts: ...

  3. ACID理解

    数据库事物的4个特性. A原子性:多次操作要么全部成功,要么全部失败.undo日志是在事务执行失败的时候撤销对数据库的操作,保证了事务的原子性(Atomicity) C一致性:一致性这个最不好理解.数 ...

  4. java程序连接Liunx服务器并且执行命令

    JSch 介绍 JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等.你可以将它的功能集成到你自己的 程序中.同时该项目也提供一个J2M ...

  5. Python3之文件读写操作详解

    文件操作的步骤: 打开文件 -> 操作文件 -> 关闭文件 切记:最后要关闭文件(否则可能会有意想不到的结果) 打开文件 文件句柄 = open('文件路径', '模式') 指定文件编码 ...

  6. 【Winform-自定义控件】自定义控件学习+一个笑脸控件例子

    1.CompositeControls组合控件:在原有控件的基础上根据需要进行组合 2.ExtendedControls 扩展控件:继承自原有控件,添加一些新的属性和方法,绘制一些新元素 当每个But ...

  7. jquery load() 方法 语法

    jquery load() 方法 语法 作用:当指定的元素(及子元素)已加载时,会发生 load() 事件.该事件适用于任何带有 URL 的元素(比如图像.脚本.框架.内联框架).根据不同的浏览器(F ...

  8. springboot错误1 Failed to execute goal org.springframework.boot:spring-boot-maven-plugin

    关于Springboot打包错误的问题 | Failed to execute goal org.springframework.boot:spring-boot-maven-plugin https ...

  9. docker命令集锦

    sudo docker image ls 查看有哪些image镜像sudo docker run hello 运行image 删除全部containerdocker rm $(docker conta ...

  10. JAVA中java.lang.OutOfMemoryError常见的解决方式

    在开发中我们很多人都遇到过内存溢出的情况,其实内存溢出分几种形式: 1.tomcat中java.lang.OutOfMemoryError: PermGen space异常处理(最常见的) 概念大家可 ...