python接口自动化框架实战


Posted in Python onDecember 23, 2020

     python接口测试的原理,就不解释了,百度一大堆。

    先看目录,可能这个框架比较简单,但是麻雀虽小五脏俱全。

python接口自动化框架实战

各个文件夹下的文件如下:

python接口自动化框架实战

一.理清思路

    我这个自动化框架要实现什么

    1.从excel里面提取测试用例

    2.测试报告的输出,并且测试报告得包括执行的测试用例的数量、成功的数量、失败的数量以及哪条成功了,失败的是哪一个,失败的原因是什么;测试结果的总体情况通过图表来表示。

    3.测试报告用什么形式输出,excel,还是html,还是其他的,这里我选择了excel

    4.配置文件需要配置什么东西

    5.哪些东西可以放入公共函数直接调用。

好的这些思路理清楚之后就可以动手了。

二.首先是配置文件和excel测试用例的设计

    数据与代码分离,也就是数据性的需要作为配置文件可以随时修改。如:接口url,网站登录权限验证信息,数据库信息。全部存入config文件夹下

下面是具体的配置文件信息:

API_url.txt

inserthouse=http://IP:port/scp-mdmapp/house/insertHouse
deletehouse=http://IP:port/scp-mdmapp/house/deleteHouse
batchdeletehouse=http://IP:port/scp-mdmapp/house/batchdeleteHouse
gethouse=http://IP:port/scp-mdmapp/house/getHouse
updatehouse=http://IP:port/scp-mdmapp/house/updateHouse

Authorization.txt

joxNTIxMTg3MTA3fQ.JyeCMMsM0tOr7exORUNpkZ-FtprjpNBhMtFjUAdnYDnhRfaR6qi3fqVkybyb245zONiTxLOw8jBR60oNUVEbKx9_cut6uDIZMUFYOx6hyyBkY9IXJlutYdo4sSMAKF_MjKsZY7bZNXLHzN0juiezn6iN0hbnbhS-Kv2LYLLZLTs

我的测试用例的设计如下:

notes是测试用例摘要。

python接口自动化框架实战

三.公共函数存在common文件夹下

get_authorization.py

#从配置文件获取访问权限信息
def get_Authorization():
	fp = open('D:\person\learn\py\HDapi\config\Authorization.txt')
	info = fp.read()
	fp.close()
	return info

public.py

import os,xlrd,xlwt,time
 
#通过配置文件里的接口名称来获取接口url的函数
def get_url(api_name):
	fp = open('D:\person\learn\py\HDapi\config\API_url.txt')
#按行读取接口url配置文件
	api_infos = fp.readlines()
	fp.close()
#通过for循环来遍历配置文件里的每一个url,并且返回传入的接口名称相应的url
	for api in api_infos:
#去除因为读取产生的换行空格等
		api_f = api.strip(' \r\n\t')
		api_c = api_f.split('=')
		if api_name == api_c[0]:
			return api_c[1]
 
#通过传入用例名称的文件和excel页面来读取测试用例
def get_case(filename,sheetnum):
	case_dir='D:\\person\\learn\\py\\HDapi\\testcase_excel' + '\\' + filename + '.xlsx'
 
	datas = xlrd.open_workbook(case_dir)
	table = datas.sheets()[sheetnum]
	nor = table.nrows
	nol = table.ncols
	return nor,table
 
#通过xlwt库来设计测试报告并写入excel里面
def write_report():
	workbook = xlwt.Workbook(encoding='utf-8')
#在excel测试报告表格中创建名叫housemanage的页面
	worksheet = workbook.add_sheet('housemanage')
#设置字体格式为居中对齐
	alignment = xlwt.Alignment()
	alignment.horz = alignment.HORZ_CENTER
	alignment.vert = alignment.VERT_CENTER
	style = xlwt.XFStyle()
	style.alignment = alignment
	
#具体的合并哪些单元格并且写入相应的信息
	worksheet.write_merge(0,0,0,7,'测试报告(housemanage)',style)
	worksheet.write_merge(1,10,0,0,'house_manage',style)
	worksheet.write_merge(1,2,1,1,'insethouse',style)
	worksheet.write_merge(3,4,1,1,'updatehouse',style)
	worksheet.write_merge(5,6,1,1,'deletehouse',style)
	worksheet.write_merge(7,8,1,1,'gethouse',style)
	worksheet.write_merge(9,10,1,1,'updatehouse',style)
	worksheet.write_merge(1,2,11,11,'total_result',style)
	worksheet.write(1,2,'notes')
	worksheet.write(2,2,'detail')
	worksheet.write(3,2,'notes')
	worksheet.write(4,2,'detail')
	worksheet.write(5,2,'notes')
	worksheet.write(6,2,'detail')
	worksheet.write(7,2,'notes')
	worksheet.write(8,2,'detail')
	worksheet.write(9,2,'notes')
	worksheet.write(10,2,'detail')
	worksheet.write(1,12,'pass')
	worksheet.write(1,13,'faild')
#最后返回worksheet,workbook两个参数,因为在测试测试用例和运行文件中需要用到的两个参数
	return worksheet,workbook

四.测试用例的编写

test_inserthouse.py

import requests,unittest,os,time,json
from common import public,get_authorization
 
 
#房屋添加用例,通过传入public里wirte_sheet函数返回的参数wooksheet,将用例的执行结果写入到测试报告中
def test_inserthouses(worksheet,workbook):
	url = public.get_url('inserthouse')
	nor,table = public.get_case('house',0)
	Authorization = get_authorization.get_Authorization()
	a = 2
	xu = 0
	yu = 0
#用for循环来实现遍历一个excel页面的所有测试用例
	for i in range(1,nor):
#获取excel表格里面需要给接口传入的参数
		houseNum = table.cell_value(i,0)
		orgUuid = table.cell_value(i,1)
		floor = table.cell_value(i,2)
		houseUseFor = table.cell_value(i,3)
		residentNum = table.cell_value(i,4)
		emergencyPhone = table.cell_value(i,5)
		expect_code = table.cell_value(i,6)
		expect_message = table.cell_value(i,7)
		notes = table.cell_value(i,8)
		payment = table.cell_value(i,11)
#接口body需要传入的参数
		data = {
		'houseNum':houseNum,
		'houseUseFor':houseUseFor,
		'orgUuid':orgUuid,
		'residentNum':residentNum,
		'floor':floor,
		'emergencyPhone':emergencyPhone,
		'payment':payment
		}
 
#请求头,网站加了登陆验证之后需要在请求头传入Authorization参数
		headers={
		'Accept':'application/json',
		'Content-Type':'application/json',
		'Authorization':Authorization
		}
		a+=1
		worksheet.write(1,a,notes)
 
		data = json.dumps(data)
 
		r = requests.post(url,data=data,headers=headers)
#将字符串格式转换为字典
		b = eval(r.text)
		m = b.get('code')
		n = b.get('message')
		k = b.get('data')
#判断接口测试通过与否
		if m==expect_code and n==expect_message:
			worksheet.write(2,a,'pass')
			xu += 1
		else:
			worksheet.write(2,a,'faild:%s'%k)
			yu += 1
#测试用例执行完后,返回用例成功与失败的数量
	return xu,yu

test_updatehouse.py

import requests,unittest,os,time,json
from common import public,get_authorization
 
#房屋编辑测试用例
def test_updatehouses(worksheet,workbook):
	nor,table = public.get_case('house',4)
	Authorization = get_authorization.get_Authorization()
	url = public.get_url('updatehouse')
	a = 2
	x = 0
	y = 0
	for i in range(1,nor):
		houseNum = table.cell_value(i,0)
		orgUuid = table.cell_value(i,1)
		uuid = table.cell_value(i,2)
		houseUseFor = table.cell_value(i,3)
		residentNum = table.cell_value(i,4)
		emergencyPhone = table.cell_value(i,5)
		expect_code = table.cell_value(i,6)
		expect_message = table.cell_value(i,7)
		notes = table.cell_value(i,8)
		floor = table.cell_value(i,9)
		payment = table.cell_value(i,11)
 
		data = {
		'houseNum':houseNum,
		'houseUseFor':houseUseFor,
		'orgUuid':orgUuid,
		'floor':floor,
		'residentNum':residentNum,
		'uuid':uuid,
		'emergencyPhone':emergencyPhone,
		'payment':payment
		}
 
		headers={
		'Accept':'application/json',
		'Content-Type':'application/json',
		'Authorization':Authorization
		}
 
		a+=1
		worksheet.write(3,a,notes)
 
		data = json.dumps(data)
 
		r = requests.post(url,data=data,headers=headers)
		b = eval(r.text)
		m = b.get('code')
		n = b.get('message')
		k = b.get('data')
		if m==expect_code and n==expect_message:
			worksheet.write(4,a,'pass')
			x += 1
		else:
			worksheet.write(4,a,'faild:%s'%k)
			y += 1
	return x,y

五.通过对公共函数、测试用例的设计联合的思考应该在执行文件里面做什么,实现什么。

本来我想将执行文件单独放置于HDapi-auto-test的根文件下的,可是将测试通过与不通过的数量写入到测试报告里面,就必须要调用公共函数的方法,由于放置在根文件夹下与公共函数隔了一个文件夹无法调用( 本鸟不会调用),所以不得不将执行文件放置于测试用例文件夹下了,好在文件名还是比较好区分也比较好寻找,另外我还想加上自动发送邮件的功能,这里不写了,其实发送邮件很简单随便找几个例子就OK了,ps:代码比较low,都没有封装,直接暴力简单执行。代码如下:

from common import public
import test_inserthouse,test_updatehouse
import time
from pychartdir import *
#从公共函数调用excel的写入方法
worksheet,workbook = public.write_report()
 
#测试用例的执行,并且返回x:成功的数量,y:失败的数量
xu,yu = test_inserthouse.test_inserthouses(worksheet,workbook)
x,y = test_updatehouse.test_updatehouses(worksheet,workbook)
#得到成功与失败的总数量
xr = x+xu
yr = y+yu
#将成功与失败的数量写入的excel的固定表格中
worksheet.write(2,12,xr)
worksheet.write(2,13,yr)
#获取当前的时间并以制定的格式返回
now = time.strftime('%Y-%m-%d %H_%M_%S')
#测试报告输出的地址
report_dir = 'D:\\person\\learn\\py\\HDapi\\report\\'
#拼接出测试报告名
filename =report_dir + now + 'apiresult.xlsx'
workbook.save(filename)
 
#通过pychart库实现图形处理,生成测试报告总览图----具体的参数设计可以参考pychart库的文档
data = [yr, xr]
labels = ["faild", "pass"]
c = PieChart(280, 240)
c.setPieSize(140, 130, 80)
c.addTitle("api_result")
c.set3D()
c.setData(data, labels)
c.setExplode(0)
c.makeChart(report_dir+now+"apiresult.png")

六.奉上测试报告输出

本来想将生成的图片放进excel测试报告里面的,奈何能力有限,没办法将图片放进去,智能单独存为一个png文件了

图表总览:

python接口自动化框架实战

excel测试报告情况:

python接口自动化框架实战

到此这篇关于python接口自动化框架实战 的文章就介绍到这了,更多相关python接口自动化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python正则表达式匹配中文用法示例
Jan 17 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
python学生信息管理系统
Mar 13 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
详解Python 切片语法
Jun 10 Python
如何使用Python实现自动化水军评论
Jun 26 Python
django-csrf使用和禁用方式
Mar 13 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python多线程正确用法实例解析
May 30 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 #Python
python实现发送QQ邮件(可加附件)
Dec 23 #Python
如何通过安装HomeBrew来安装Python3
Dec 23 #Python
python实现定时发送邮件到指定邮箱
Dec 23 #Python
python实现定时发送邮件
Dec 23 #Python
python脚本定时发送邮件
Dec 22 #Python
如何用python批量调整视频声音
Dec 22 #Python
You might like
substr()函数中文版
2006/10/09 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
PHP合并静态文件详解
2014/11/14 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Vue响应式原理详解
2017/04/18 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
大学毕业通用个人的求职信
2013/12/08 职场文书
出生公证书样本
2014/04/04 职场文书
python实现Thrift服务端的方法
2021/04/20 Python
Python爬虫之爬取某文库文档数据
2021/04/21 Python
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis