在使用接口测试平台测试接口的过程中,有时需要额外使用python脚本处理。(2019-2020)
以下按照历史接口用例中构造的关键字,按引用次数倒序排列,记录如下:
注:部分字符串处理受限原平台,取用可自行修改简化。
【1】
功能描述:通过键找值,在返回值中根据参数名称获取参数值,对布尔类型值不可用
使用场景:校验返回参数值
import os
import random
def getvaluebykey(result,key):
result1=result
key1=key
d = result[0]
print(d)
b = d.get(key)
print(d.keys())
print(b)
return b
【2】
功能描述:获取当前时间毫秒级时间戳(字符串格式)
使用场景:构造随机生成的唯一的值,在校验具体值相等的前置构造数据可用
import time
import datetime
def getnowtimestampms():
t = time.time()
s=str(round(t * 1000))
print(s)
return s
【3】
功能描述:拼接两个字符串
使用场景:经常与时间戳搭配使用,构造部分字符固定部分字符唯一的值,用于标记测试数据
import os
import random
def ping(a,b):
a1=""
b1=""
a1=a
b1=b
c=a1+b1
return c
【4】
功能描述:获取md5加密后的值
使用场景:生成加密数据用,构造密码字符串时使用
import os
import random
import hashlib
def getmd5(s):
str = s
hl = hashlib.md5()
hl.update(str.encode(encoding='utf-8'))
str1 = hl.hexdigest()
print('MD5加密前为 :' + str)
print('MD5加密后为 :' + str1)
return str1
【5】
功能描述:取json返回中的某个键对应的值("${RESPONSE}$","") 如果内容值为none 返回异常
使用场景:获取json返回内容中指定值,校验前置可用
def jsondata(result,key):
if result is None:
b=""
else:
b = result.get(key)
if b is None:
b=""
return b
【6】
功能描述:len
使用场景:常用于校验返回值包含数据数量是否正确时用
import os
import random
def getResultSize(result):
size=len(result)
return size
【7】
功能描述:判断数字是否一样大小
使用场景:校验用
import os
import random
def getResultSize(result):
size=len(result)
return size
【8】
功能描述:自定义长度生成字符串a*n
使用场景:构造测试字符长度边界数值时使用
import os
import random
def createlongchar(length):
a="a"
b=a*length
print(b)
return b
【9】
功能描述:按照序号截取字符串 从0下标开始 getstringbyindex(s,0,6) 即取前6位
使用场景:截取字符串进行校验或构造数据时用
def getstringbyindex(s,a,b):
l=""
l=s
c=0
c=a
d=0
d=b
z=l[c:d]
print(z)
return z
【10】
功能描述:构造list数据 result可填有列数据的db查询结果 key填列名 可得【”a“,”b“,...】的list
使用场景:对于参数值是list类型数据的场景下,构造数据用
def getlist(result,key):
d = result
b=[]
print(len(d))
for i in range(len(d)):
b.append(d[i].get(key))
print(b)
return b
【11】
功能描述:获取当前时间的日期信息 格式为年-月-日
使用场景:涉及redis key、部分变量为日期数据时校验用
import time
def ymd():
print (time.strftime("%Y-%m-%d", time.localtime()))
return (time.strftime("%Y-%m-%d", time.localtime()))
# 格式化成2016-03-20形式
【12】
功能描述:获取list中的第n个元素 getdatainlist(list s,int n)
使用场景:需要校验list中具体元素值时可用
def getdatainlist(s,n):
ss=[]
ss=s
n=int(n)
num=n-1
print(s[num])
return s[num]
【13】
功能描述:获取当前时间毫秒级时间戳(int格式)
使用场景:对于时间精度要求高的场景下造数据可用
import time
import datetime
def getnowtimestampmsnum():
t = time.time()
s=int(round(t * 1000))
return s
【14】
功能描述:等待几秒
使用场景:在校验接口后置操作时遇到无法直接马上校验到的情况下,无奈可用
import time
def wait(seconds):
time.sleep(int(seconds))
print("wait")
【15】
功能描述:a减去b
使用场景:校验数据涉及过滤数据时可用
import os
import random
def jian(a,b):
a1=0
b1=0
a1=a
b1=b
c=a1-b1
return c
【16】
功能描述:生成有两个自定义参数的list listdata2("name1","name2","test",10) 意为长度为10的time开头拼接数字序号的list
使用场景:构造数据需要list且list值有要求的可用
def listdata2(s1,s2,s,num):
list = []
key1=str(s1)
key2=str(s2)
tou=str(s)
j=int(num)
for i in range(0,j):
l=tou+str(i)
dict = {key1: l,key2: l}
print(i)
list.append(dict)
print(list)
return list
【17】
功能描述:AES加密
使用场景:构造加密数据时用
import base64
import random
import binascii
from Crypto.Cipher import AES
def AES(text,key,iv):
# 刚好16字节的情况
aes_key = key
aes_iv=iv
source_en=text
encrypt_en = encrypt(aes_key, aes_iv,source_en)
print(encrypt_en)
# 解密
decrypt_en = decrypt(aes_key, aes_iv,encrypt_en)
print(decrypt_en)
print(source_en == decrypt_en)
return encrypt_en
"""
AES加密解密工具类
加密解密结果与 http://tool.chacuo.net/cryptaes 结果一致
AES加密模式 为cbc
填充 pkcs7padding-pkcs5padding类似
数据块128位
key 为16位
iv 为16位
输出为hex
字符集utf-8
"""
def pkcs7padding(text):
bs = AES.block_size # 16
length = len(text)
bytes_length = len(bytes(text, encoding='utf-8'))
padding_size = length if(bytes_length == length) else bytes_length
padding = bs - padding_size % bs
padding_text = chr(padding) * padding
return text + padding_text
def pkcs7unpadding(text):
length = len(text)
unpadding = ord(text[length-1])
return text[0:length-unpadding]
def encrypt(key,iv,content):
key_bytes = bytes(key, encoding='utf-8')
iv = bytes(iv, encoding='utf-8')
cipher = AES.new(key_bytes, AES.MODE_CBC, iv)
content_padding = pkcs7padding(content)
encrypt_bytes = cipher.encrypt(bytes(content_padding, encoding='utf-8'))
#输出为base64
# result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
# 输出为hex
result = str(binascii.b2a_hex(encrypt_bytes), encoding='utf-8')
return result
def decrypt(key,iv, content):
key_bytes = bytes(key, encoding='utf-8')
iv = bytes(iv, encoding='utf-8')
cipher = AES.new(key_bytes, AES.MODE_CBC, iv)
# base64解码
# encrypt_bytes = base64.b64decode(content)
# hex解码
encrypt_bytes = binascii.a2b_hex(content)
decrypt_bytes = cipher.decrypt(encrypt_bytes)
result = str(decrypt_bytes, encoding='utf-8')
result = pkcs7unpadding(result)
return result
【18】
功能描述:按逗号分割字符串并取其中第n个数splitandselect(“a,b,c”,2)——》b
使用场景:校验时返回字符串存在逗号分隔数据字符串时可用
def splitandselect(s,n):
s=str(s)
print (s)
u=s.split(',',-1)
result=u[n-1]
print (result)
return result
【19】
功能描述:根据a的元素范围,生成c个b位随机字符串,加入list
使用场景:构造对值有限制字符类型的list数据时可用
import random
import string
def creatlist(a,b,c):
seed=str(a)
num=int(b)
size=int(c)
sas=[]
for j in range(0,size):
sa=[]
for i in range(num):
sa.append(random.choice(seed))
salt=''.join(sa)
sas.append(str(salt))
print(sas)
return sas
【20】
功能描述:sscan 将元组值的1000个值组成list列表
使用场景:构造数据从redis中获取时可用
import redis
def redis_sscan(host,port,key):
list = []
r = redis.Redis(host=host,port = port,db = 0 )
#获取集合中所有的成员
for i in r.sscan_iter(name=key,match=None, count=1000):
list.append(i.decode())
print(list)
return list
【21】
功能描述:生成小写32位uuid
使用场景:构造uuid数据
import uuid
def getuuid1():
return "".join(str(uuid.uuid4()).split("-"))
【22】
功能描述:判断数字是否一样大小 第二个数从数据库里取
使用场景:需要校验接口返回数量与db查询数值是否一致时可用
import os
import random
def issamenumcount(a,b):
c = b[0]['count']
if a==c:
return True
else:
return False
【22】
功能描述:可自定义list,key为自定义两个变量,value为开头时间戳+固定结尾的值
使用场景:构造特定要求的list数据
import time
import datetime
def listdata2_z(s1,s2,s_z,s,num):
list = []
key1=str(s1)
key2=str(s2)
end=str(s_z)
j=int(num)
for i in range(0,j):
t = time.time()
print(t)
s_z=str(round(t * 10000000))
print(s_z)
l1=str(s_z)+end
l2=str(s)
dict = {key1: l1,key2: l2}
print(i)
list.append(dict)
print(list)
return list
【23】
功能描述:in传入数组变字符串 方便在sql中使用list
使用场景:需要将接口参数值数组变化为字符串在sql中使用时可用
def listcanindb(list):
a= []
a=list
instring =','.join(["'%s'" % item for item in a])
print(instring)
return instring
【24】
功能描述:生成指定头部字符串的指定长度的iist
使用场景:构造特定要求的list数据
def pinglist(s,num):
list = []
tou=str(s)
j=int(num)
for i in range(0,j):
l=tou+str(i)
print(i)
list.append(str(l))
print(list)
return list
【25】
功能描述:获取今天0点的毫秒时间戳字符
使用场景:测试时间相关场景时可用
import datetime
import time
def zeroToday():
# 获取当前时间
now = datetime.datetime.now()
# 获取今天零点
zeroToday = now - datetime.timedelta(hours=now.hour, minutes=now.minute, seconds=now.second,microseconds=now.microsecond)
# 获取23:59:59
lastToday = zeroToday + datetime.timedelta(hours=23, minutes=59, seconds=59)
# 获取前一天的当前时间
yesterdayNow = now - datetime.timedelta(hours=23, minutes=59, seconds=59)
# 获取明天的当前时间
tomorrowNow = now + datetime.timedelta(hours=23, minutes=59, seconds=59)
print('时间差',datetime.timedelta(hours=23, minutes=59, seconds=59))
print('当前时间',now)
print('今天零点',zeroToday)
print('获取23:59:59',lastToday)
print('昨天当前时间',yesterdayNow)
print('明天当前时间',tomorrowNow)
d = datetime.datetime.strptime(str(zeroToday), "%Y-%m-%d %H:%M:%S")
t = d.timetuple()
timeStamp = int(time.mktime(t))
timeStampms = str(timeStamp) +"000"
print(timeStampms)
return timeStampms
【26】
功能描述:rsa加密
使用场景:输入待加密内容及公钥可生成加密rsa数据
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.PublicKey import RSA
import base64
def rsaEncrypt(strs,pubkey):
message=strs
key = '-----BEGIN RSA PRIVATE KEY-----\n'+pubkey+'\n-----END RSA PRIVATE KEY-----'
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
cipher_text = base64.b64encode(cipher.encrypt(message.encode('utf-8')))
print(cipher_text.decode('utf-8'))
rsapwd="RSA-"+cipher_text.decode('utf-8')
print (rsapwd)
return rsapwd
【27】
功能描述:判断数据是否存在于列表里
使用场景:校验数据在返回中的存在性时可用
def assert_dataInList0(data, lista):
for i in lista:
if i == data:
print("True")
return True
print("False")
return False
【28】
功能描述:获取当天时间戳
使用场景:时间戳相关场景可用
import time
import datetime
def getdaytimestampms():
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
unix_today = time.mktime(today.timetuple())
todayems= int(unix_today * 1000)
unix_tomorrow = time.mktime(tomorrow.timetuple())
tomorrowms= int(unix_tomorrow * 1000)
print(todayems,tomorrowms)
return todayems
【29】
功能描述:获取明天0点的毫秒时间戳
使用场景:时间戳相关场景可用
import time
import datetime
def gettomorrowimestampms():
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
unix_today = time.mktime(today.timetuple())
todayems= int(unix_today * 1000)
unix_tomorrow = time.mktime(tomorrow.timetuple())
tomorrowms= int(unix_tomorrow * 1000)
print(todayems,tomorrowms)
return tomorrowms
【30】
功能描述:字符串反转
使用场景:构造数据用
def reverse1(a):
s=""
s=str(a)
return s[::-1]
【31】
功能描述:urlencode
import urllib.parse
def urlencode0(url):
print(url)
result= urllib.parse.quote(url)
print(result)
return result
接口测试用例编写过程中,你还遇到哪些难点呢?