python接口自动化接口依赖,Python接口自动化概述,简单,总结

一、接口自动化的实现总流程图

逻辑流程

1ead6afc70956aed65cbc09cb91c7fd4.png

代码模块流程:

be16b9ecfc41b34c4a4dc30b093b1cac.png

二、各个环节概述

2.1 case的管理

推荐方式

:数据库、excel

示例

c29711d591c4fe177a6474ea752094b5.png

2.2 主要模块简介

util---operation_excel:操作excel

#-*-encoding:utf-8-*-

import xlrd

from xlutils.copy import copy

import os

dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

class OperationExcel():

'''

操作excel,获取testcase

'''

def __init__(self,filename=None,sheet_id=None):

if filename:

self.filename=filename

self.sheet_id=sheet_id

else:

self.filename = dir+"\\dataconfig\\interface.xlsx"

self.sheet_id = 0

self.data = self.get_data()

#获取sheet的内容

def get_data(self):

data=xlrd.open_workbook(self.filename)

table = data.sheets()[self.sheet_id]

return table

#获取sheet的行数

def get_lines(self):

self.lines=self.data.nrows

return self.lines

#获取某一个单元格的内容

def get_cell_value(self,row,column):

self.cell_value=self.data.cell_value(row,column)

return self.cell_value

#写入单元格内容

def write_cell_value(self,row,column,value):

read_data = xlrd.open_workbook(self.filename)

write_data = copy(read_data)

sheet_data = write_data.get_sheet(self.sheet_id)

sheet_data.write(row,column,value)

write_data.save(self.filename)

#根据caseid,找到对应用例所在行的内容

def get_row_data(self,case_id):

row_num = self.get_row_num(case_id)

row_data=self.get_row_values(row_num)

return row_data

#根据case_id找到对应用例的行的行所在的索引号(行号)

def get_row_num(self,case_id):

row_num=0

cols_data = self.get_col_data()

for col_data in cols_data:

if case_id in col_data:

return row_num

row_num = row_num+1

#根据行号row,找到该行的内容

def get_row_values(self,row):

row_data = self.data.row_values(row)

return row_data

#根据列column获取某一列的内容

def get_col_data(self,column=None):

if column != None:

col_data=self.data.col_values(column)

else:

col_data = self.data.col_values(0)

return col_data

util-operation_json:操作json

# -*- encoding:utf-8 -*-

import json

class OperationJson():

'''

操作json文件

'''

def __init__(self,surce_path=None):

if surce_path == None:

self.surce_path ="../dataconfig/test_request_data.json"

else:

self.surce_path=surce_path

self.data = self.read_data()

#读取json文件

def read_data(self):

with open(self.surce_path) as fp:

data=json.load(fp)

return data

#根据关键字获取数据

def get_data(self,key):

return self.data[key]

#写json:cookie时用

def write_data(self,data):

with open("../dataconfig/cookie.json",'w') as fp:

fp.write(json.dumps(data))

runmethod:

基于requests封装的函数

#-*-encoding:utf-8-*-

import requests,json,urllib3

from urllib3.exceptions import InsecureRequestWarning

#避免添加verify参数后,安全请求警告

urllib3.disable_warnings(InsecureRequestWarning)

class RunMethod():

def post_main(self,url,data,header=None):

'''

备注这里header主要是cookies;如果之后接口不仅是cookies,需要重新添加header、cookies

:param url:

:param data:

:param header:

:return:

'''

res=None

if header !=None:

res=requests.post(url=url,data=data,cookies=header,verify=False)

try:

res=res.json()

return json.dumps(res, ensure_ascii=False, indent=2, sort_keys=True)

except:

return res.text

else:

res=requests.post(url=url,data=data,verify=False)

try:

res=res.json()

return json.dumps(res, ensure_ascii=False, indent=2, sort_keys=True)

except:

return res.text

def get_main(self,url,data=None,header=None):

'''

备注这里header主要是cookies;如果之后接口不仅是cookies,需要重新添加header、cookies

:param url:

:param data:

:param header:

:return:

'''

res=None

if header !=None:

res=requests.get(url=url,data=data,cookies=header,verify=False)

try:

res=res.json()

return json.dumps(res, ensure_ascii=False, indent=2, sort_keys=True)

except:

return json.dumps(res.text)

else:

res=requests.get(url=url,data=data,verify=False)

try:

res=res.json()

return json.dumps(res, ensure_ascii=False, indent=2, sort_keys=True)

except:

return json.dumps(res.text)

def run_main(self,method,url,data,header=None):

res=None

if method =="post":

res=self.post_main(url,data,header)

else:

res=self.get_main(url,data,header)

return res

main--run_main

:

#-*-encoding:utf-8-*-

import os,sys

#备注在jenkins构建项目时,有可能找不到项目地址、python项目的环境地址;所以需要加入

#加入项目地址

dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.append(dir)

#加入环境的三方包地址

sys.path.append("D:\\environment\\pyhon\\Lib\\site-packages")

from base.runmethod import RunMethod

from util import operation_excel,common_util

from data.get_data import GetData

from data.dependent_data import DependentData

from util.send_email import SendEmial

from util.operation_header import OperatonHeader

from util.operation_json import OperationJson

class RunTest:

def __init__(self):

self.run_method = RunMethod()

self.data = GetData()

self.com_util = common_util.CommonUtil()

def go_on_run(self):

res=None

pass_row=[]#excel中通过用例的行号

fail_row=[]#excel中失败用例的行号

rows_count=self.data.get_case_lines()

print(str(rows_count)+"-----------------------------------------------")

for i in range(1,rows_count):

print(i)

is_run = self.data.is_run(i)

if is_run:

url = self.data.get_request_url(i)

method = self.data.get_request_method(i)

header = self.data.is_header(i)

data = self.data.get_request_data_for_json(i)

expect = self.data.get_expect_data(i)

depend_fied = self.data.is_depend(i)

if depend_fied !=None:

self.depend_data = DependentData()

#获取的依赖用例响应的数据的那个字段的值

depend_response_data = self.depend_data.get_depend_data_for_key(i)

#获取依赖的所属字段

depend_key = self.data.is_depend(i)

data[depend_key] = depend_response_data

#header有无判断,进行不同操作

if header == 'write':

operaheader=OperatonHeader()

res = operaheader.write_cookie_in_json(url,data)

elif header !=None and header != 'write':

res = self.run_method.run_main(method, url, data, header)

else:

res = self.run_method.run_main(method, url, data)

print(res)

if self.com_util.is_contain(expect,res):

pass_row.append(i)

self.data.write_result(i,"测试通过")

print("测试通过——————————————————————————————》")

else:

fail_row.append(i)

self.data.write_result(i, res)

print("测试失败————————————————————————————————》")

send_email = SendEmial()

send_email.send_main(pass_row,fail_row)

if __name__ == '__main__':

run = RunTest()

res=run.go_on_run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值