RF-接口自动化测试-「Body Data格式」

接口自动化测试首先需要安装RequestsLibrary库

pip install robotframework-requests

「Body Data格式」的实践中,使用了自定义的library,兼容了socket协议;关键字封装里面使用了python代码段,兼容了webservice协议;

RF-接口自动化测试-「Body Data格式」_第1张图片

 

这次就分享下library和封装的关键字,具体的case牵涉到业务层数据,就不展示了。


自定义library:除了有socket之外,还有其他3个关键字,也一起分享了


#!/usr/bin/python3
# -*- coding: utf-8 -*-
import socket
import json
import base64
import os
import sys
import cx_Oracle
 
class YCKJ_Library():
	def socket_api(self,ip,port,para):
	
		'''
		socket协议的接口测试
		ip:ip地址,port:端口,para:入参
		
		Examples:
 | ${res} | Socket Api | ip | port 	| ${para} |
 ''' 
		para_len = para.encode('utf-8')
		filesize_bytes = len(para_len)
		
		a =str(filesize_bytes).zfill(8)
		sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		port = int(port)
		para = '%s%s' % (a,para)
		print (para)
		server_address = (ip,port)
		print ('Connecting to %s:%s.'% server_address)
		sock.connect(server_address)
		message = para.encode("utf-8")
		sock.sendall(message)
		data = sock.recv(1024)
		sock.close()
		return (data.decode('utf-8'))
	
	def getAllImages(self,folder):
		imageList=[]#得到某个文件夹下jgp格式的文件
		assert os.path.exists(folder)
		assert os.path.isdir(folder)
		for files in os.listdir(folder):
			if files.endswith(".jpg"):
				imageList.append(files)
		return imageList
	def base_64(self):
		base_dir =os.path.dirname(__file__)#获取当前文件夹的绝对路径
		base_dir = os.path.abspath(os.path.join(base_dir,os.path.pardir))
		print(base_dir)
		a=Socket_Library().getAllImages(base_dir+'/res/image')
		print (a)
		imageLt=[]
		for ig in a:
			file_path = os.path.join(base_dir+'/res/image',ig) #获取base_dir+'/image'文件夹内的文件
			f=open(file_path,'rb') #二进制方式打开图文件
			lsReadImage_f=base64.b64encode(f.read())#读取文件内容,转换为base64编码
			f.close()#关闭文件
			if len(imageLt)< 1:#限制转换的图片最多为1张;
				imageLt.append(lsReadImage_f)
		return	imageLt
	
	def oracle_utf8(self):
		#python3 目前不用也可以 import importlib importlib.reload(sys)	
		#python2 使用import imp imp.reload(sys)
		#python2 使用 sys.setdefaultencoding('utf-8') 
		os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
	def dir(self):
		base_dir =os.path.dirname(__file__)#获取当前文件夹的绝对路径
		base_dir = os.path.abspath(os.path.join(base_dir,os.path.pardir))
		print(base_dir)
		a=base_dir+'/res'
		return	a

封装的关键字:


*** Setting ***
Library RequestsLibrary
Library ../ext/YCKJ_Library.py 
*** Variable ***
${SERVER} http://127.0.0.1
${hostname} 127.0.0.1
${hostport} 8080
*** Keyword ***
http_post_all_json
 [Documentation] 适用于http协议的post请求方式,且请求入参可以为xml和json格式;返回结果(all)是json格式
 ... Content-Type=application/json
 [Arguments] ${path} ${request} ${expect}
 ${dict} Create Dictionary Content-Type=application/json
 Create Session api ${SERVER} ${dict}
 ${total} Set Variable ${request}
 ${addr} Post Request api ${path} data=${total}
 log ${addr.status_code}
 log ${addr.content}
 Should Be Equal As Strings ${addr.status_code} 200
 ${responsedata} To Json ${addr.content}
 ${wq} evaluate json.dumps(${responsedata},ensure_ascii=False) modules=json
 Should Contain ${wq} ${expect}
 log ${wq}
 Delete All Sessions
http_post_req_url_res_json
 [Documentation] 适用于http协议的post请求方式,且请求(req)入参:url传递参数 返回结果(res)是json格式
 ... Content-Type=application/x-www-form-urlencoded
 [Arguments] ${path} ${request} ${expect}
 ${dict} Create Dictionary Content-Type=application/x-www-form-urlencoded
 Create Session api ${SERVER} ${dict}
 ${total} Set Variable ${request}
 ${addr} Post Request api ${path} data=${total}
 log ${addr.status_code}
 log ${addr.content}
 Should Be Equal As Strings ${addr.status_code} 200
 ${responsedata} To Json ${addr.content}
 ${wq} evaluate json.dumps(${responsedata},ensure_ascii=False) modules=json
 Should Contain ${wq} ${expect}
 log ${wq}
 Delete All Sessions
webservice
 [Documentation] 适用于webservice协议
 [Arguments] ${path} ${request} ${expect}
 ${total} Set Variable ${request}
 ${wq} Evaluate	urllib.request.urlopen(urllib.request.Request('${SERVER}${path}',data='${total}'.encode('utf-8'),headers={'Content-Type':'text/xml'})).read().decode('utf-8') modules=urllib 
 Should Contain ${wq} ${expect}
 Delete All Sessions
socket
 [Documentation] 适用于socket协议
 [Arguments] ${request} ${expect}
 ${para} Set Variable ${request} 
 ${wq} Socket Api ${hostname} ${hostport} ${para}
 Should Contain ${wq} ${expect}
 Delete All Sessions
base_6
	${base_64} Base 64
	Set Suite Variable ${base_64[0]} 

你可能感兴趣的:(Robotframework,Robotframework,自动化测试,接口测试,python)