python-----实现接口自动化测试(实例4)
1、读取case---从测试用例Excel表格中读取接口请求数据
2、调用接口---发送请求获取实际结果
3、校验结果---实际结果与预期结果对比
4、结果写入表格---将实际结果与测试状态填入Excel表格
5、生成报告---发送邮件
import requests
from config.setting import my_log def post(url,data,header=None,cookie=None,is_json=False):
try:
if is_json:
res = requests.post(url=url, json=data, headers=header, cookies=cookie).text
else:
res = requests.post(url=url, data=data, headers=header, cookies=cookie).text
except Exception as e:
my_log.error('接口请求出错%s '% e)
res = str(e)
return res def get(url,data,header=None,cookie=None):
try:
res = requests.get(url=url, params=data, headers=header, cookies=cookie).text
except Exception as e:
my_log.error('接口请求出错%s '% e)
res = str(e)
return res
#####################tools.py文件#####################
import xlrd
from xlutils import copy
from config.setting import my_log,MAIL_INFO,TO,CC
from lib import my_request
import yagmail
import time def readExcel(filepath):
try:
book = xlrd.open_workbook(filepath)
except Exception as e:
my_log.error('打开用例出错,文件名是%s' % filepath)
return []
finally:
allcase = []
sheet = book.sheet_by_index(0)
rownum = sheet.nrows
for i in range(1, rownum):
allcase.append(sheet.row_values(i)[4:8])
return allcase def write_res(file_name,res_list):
book = xlrd.open_workbook(file_name)
new_book = copy(book)
sheet = new_book.get_sheet(0)
# res_list ['str','']
for row,data in enumerate(res_list,1):
res,status=data
sheet.write(row,8,res) # 写入返回结果
sheet.write(row,9,status) # 写入运行状态
new_book.save(file_name) #对测试用例中请求数据参数处理后返回dict形式
def str_to_dict(s:str,seq='&'):
d={}
if s.strip():
for i in s.split(seq):
k,v=i.split("=")
d[k] = v
return d #核对请求返回值与列表预期值
def check_res(res:str,check:str):
new_res = res.replace('": "', '=').replace('": ', '=')
for c in check.strip(','):
if c not in new_res:
return '失败'
return '通过' #发送请求后结果校验,将请求结果与校验结果存在list中返回
def run_case(all_case):
all_res = []
for case in all_case:
url,method,data,check = case
data=str_to_dict(data) #把请求参数转成字典
if str(method).upper()=='POST':
res=my_request.post(url,data)
else:
res=my_request.get(url,data)
status=check_res(res,check)
all_res.append([res,check])
return all_res def send_mail(content,files):
mail=yagmail.SMTP(**MAIL_INFO)
subject="%s 接口测试报告" %time.strptime('%Y-%m-%d %H:%M:%S')
mail.send(to=TO,cc=CC,subject=subject,content=content,attachments=files) #####################setting.py文件#####################
import nnlog
import os
BASE_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_FILE_NAME='atp.log'
ABS_FILE_PATH=os.path.join(BASE_PATH,'log')
print(ABS_FILE_PATH)
my_log=nnlog.Logger(ABS_FILE_PATH) CASE_PATH = os.path.join(BASE_PATH,'cases') #存放用例的目录
MAIL_INFO={
'user':'uitestp4p@163.com', #邮箱账号
'password':'houyafan123', #邮箱密码
'host':'smtp.163.com' #邮箱的服务器地址
} #邮箱信息
TO = ['***@qq.com',] #发送给谁
CC = ['***@163.com'] #抄送给谁
#####################start.py文件#####################
import os,sys
BASE_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.index(0,BASE_PATH)
from lib import tools
import glob
from config.setting import CASE_PATH
def main():
all_count = 0 # 存的所有文件里面用例的个数
all_pass_count = 0 # 存的所有文件里面用例通过的个数
files = [] # 存放的是运行过所有的用例文件
for file in glob.glob(CASE_PATH,'**xls'): #获取用例文件夹下的所有xls文件
all_case=tools.readExcel(file)
all_res=tools.run_case(all_case)
tools.write_res(file,all_res)
case_count = len(all_res) # 所有用例的个数
pass_count = str(all_res).count('通过') # 通过的个数
all_count += case_count # 累加每个文件里面的用例
all_pass_count += pass_count # 累加通过的用例数
files.append(file)
msg='''
本次运行的测试用例数量%s,通过%s,失败%s
'''%(all_count,all_pass_count,all_count-all_pass_count)
tools.send_mail(msg,files)
main()
python-----实现接口自动化测试(实例4)的更多相关文章
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
- python+requests接口自动化测试
转自https://my.oschina.net/u/3041656/blog/820023 原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测 ...
- python版接口自动化测试框架源码完整版(requests + unittest)
python版接口自动化测试框架:https://gitee.com/UncleYong/my_rf [框架目录结构介绍] bin: 可执行文件,程序入口 conf: 配置文件 core: 核心文件 ...
- Postman接口自动化测试实例二
在<Postman接口自动化测试实例>一文中,我是在获取随机因子的接口的Tests中对用户的密码进行加密处理的.其实正常做法应该是在请求验证接口前,即在Pre-request Script ...
- python之接口自动化测试框架
梳理python+unittest接口自动化测试框架的思路: 1.确定目录: cases:存放测试用例的py文件:config:存放一些数据库,环境地址等固定不变的信息: core:核心的文件, ca ...
- python 做接口自动化测试框架设计
1,明确什么叫自动化测试,什么叫接口自动化测试,如何设计接口测试用例,已登录为例 自动化测试:解放人力来自动完成规定的测试. 自动化测试分层模型:UI层,不论WEB端还是移动端,都是基于页面元素的识别 ...
- Python Api接口自动化测试框架 excel篇
工作原理: 测试用例在excel上编辑,使用第三方库xlrd,读取表格sheet和内容,sheetName对应模块名,Jenkins集成服务发现服务moduleName查找对应表单,运用第三方库req ...
- 【接口自动化】Python+Requests接口自动化测试框架搭建【一】
公司项目启用新框架,前后端分离,所以接口测试成为测试工作中不可缺失的一个环节,现在将从0开始搭建接口自动化测试框架的路程,一步步记录下来. 开发语言我们采用Python+第三方库Requests,测试 ...
- 使用python进行接口自动化测试,批量执行测试用例
工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...
- 巧用python进行接口自动化测试
一.接口自动化测试的流程 1.需求分析 1.1请求(url,方法.数据) 2.挑选需要做自动化测试的接口 3.设计自动化测试用例 4.搭建自动化测试环境 5.设计自动化执行框架(报告.参数化. 用例执 ...
随机推荐
- Gradle环境变量的配置
配置GRADLE_HOME: 找到Android Studio中gradle的位置 E:\Android_Studio\gradle\gradle-2.10 配置GRADLE_USER_HOME: 找 ...
- 用.NET CORE做项目,VS里编译碰到‘。。。。包降级。。。。’错误
用.NET CORE做项目,VS里编译碰到‘....包降级....’错误 本地开发机:WIN10+VS2017 15.7.3 ,用CORE2.1版本的建立一个项目,做好了,传到gitee上 今天有新同 ...
- [svc]mysql备份恢复及常用命令
如何实现mysql读写分离 1.通过程序实现读写分类(性能 效率最佳) php和java都可以通过设置多个连接文件轻松实现对db的读写分离,即当select时,就去连读库的连接文件,当update,i ...
- Smack类库详细介绍
原文地址:http://blog.csdn.net/xunshu/archive/2008/03/27/2223817.aspx Smack是一个为使用XMPP服务器聊天和发送即时消息交流而提供的库. ...
- java中的数据加密5 数字证书
数字证书 A用私钥加密了,那么B接受到消息后,用A提供的公钥解密:那么现在有个讨厌的C,他把消息拦截了,然后用自己的私钥加密,同时把自己的公钥发给B,并告诉B,那是A的公钥,结果....,这时候就需要 ...
- android 自定义无限循环播放的viewPager。轮播ViewPager。实现循环播放 广告,主题内容,活动,新闻内容时。
前言 实际项目需要一个 播放广告的控件,可能有多个广告图片.每个一段时间更换该图片.简单来说,就是一个 “循环播放图片”的控件. 间隔时间更换图片 一般来说,图片切换时需要有动画效果 需要支持手势,用 ...
- Java知多少(14)数组
如果希望保存一组有相同类型的数据,可以使用数组. 数组的定义和内存分配 Java 中定义数组的语法有两种: type arrayName[]; type[] arrayName; type 为Java ...
- Java知多少(66)输入输出(IO)和流的概述
输入输出(I/O)是指程序与外部设备或其他计算机进行交互的操作.几乎所有的程序都具有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等.通过输入和输出操作可以从外界接收信息, ...
- C++ 智能指针五
/* 代码分析: 这是标准库的源码,我们看到在enable_shared_from_this内部保存了一个weak_ptr.shared_from_this函数就是通过这个weak_ptr得到了. 但 ...
- DWZ使用中遇到的坑
DWZ官方文档中关于文件上传表单的提交: 因为Ajax不支持enctype="multipart/form-data" 所以用隐藏iframe来处理无刷新表单提交. <for ...