接口测试中常用python脚本记录

在使用接口测试平台测试接口的过程中,有时需要额外使用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

接口测试用例编写过程中,你还遇到哪些难点呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值