杂谈 python脚本调用接口进行性能和稳定性测试(套路)

综合近来相关接口和性能相关的测试工作,今天突发“奇想”,总结出一套自己适用的性能测试套路。草草记录想法如下:

性能测试=接口+多线程+服务器监控 +java熟悉(问题定位)

当然以上目前已python脚本为主要工具。
所需要的辅助技术如下:

接口测试: 接口调用  python 、postman、jmeter、 接口分析:fiddler,chrome 
多线程: 并发  锁  
服务监控:linux资源 top命令 dstat命令  jmeter。 内存、磁盘、网络、cpu、gpu
java:gc 服务进程分析

接口模拟配合并发 完成压测环境的模拟和结果的获取分析。资源监控的了解可对服务是否正常是否存在异常瓶颈进行参看。因为目前大部分web项目使用java,所以了解gc和服务异常分析等对于定位问题很关键。
从目前个人使用来看还比较顺手。当然服务器监控和java方面还未进行过多的尝试。尤其java放下很久了…

这里python使用requests包进行接口模拟,需要对http请求相关header参数和尤其是Content-type类型进行了解。多线程threading中的锁和阻塞。接下来给个简单的接口模拟和多线程调用
脚本如下:
接口模拟:

#coding=utf-8
import requests
import time
import struct
import json


cookie ="JSESSIONID=6B2CECAE8A6182A2496E1C23C630FC35"
##上传单个文档进行翻译
def upfile_trans():
    header = {
        # "Content-type":"multipart/form-data; boundary=----WebKitFormBoundaryDiCQum0CmBUJMRZk",
        "Cookie": cookie
    }
    ####初始化一个任务  获取任务id 和批id
    init_host="http://ip/zy/transTask/initTask"
    init_body ={
        "type":1
    }
    init_req= requests.get(url=init_host,data=init_body,headers=header)
    print (init_req.text)
    j_init_req_res = json.loads(init_req.text)
    print (j_init_req_res)
    task_id = j_init_req_res["data"]["taskId"]
    batch_id = j_init_req_res["data"]["batchId"]
    task_name = j_init_req_res["data"]["taskName"]
    print (task_id,batch_id)

    ####上传文件
    host = "http://ip/zy//transFile/uploadTransFile"
    fbin = open("D:\英文文章.docx","rb")
    files={"file":('英文文章.docx',fbin,'application/vnd.openxmlformats-officedocument.wordprocessingml.document,{}')}
    body ={
        "taskId":task_id,
        "batchId":batch_id,
    }
    upfile_req_res = requests.post(url=host,data=body,headers=header,files=files)
    print (upfile_req_res.text)
    ids = json.loads(upfile_req_res.text)["data"]
    time.sleep(5)

    #####任务保存提交
    sub_host="http://ip/zy/transTask/submitTransTask"
    sub_body={
        "language":"",
        "taskId":task_id,
        "batchId":batch_id,
        "ids":ids,
        "taskName":task_name,
        "toLanguage":"cn",
        "type":1
    }

    submit_req= requests.post(url=sub_host,data=sub_body,headers=header)

    print (submit_req.text)

    ####获取任务翻译状态
    task_status_host = "http://ip/zy/transFile/getTransFileList"
    status_body ={
        "fileName":"",
        "pageNum":1,
        "pageSize":10,
        "taskId":task_id,
        "language":"",
        "fileStatus":""
    }
    status_req= requests.get(url=task_status_host,headers=header,params=status_body)
    print (status_req.text)





####方法 在已经创建好的任务中 继续上传文件 并提交任务
def task_add_file(task_id,batch_id,task_name):
    header = {
        # "Content-type":"multipart/form-data; boundary=----WebKitFormBoundaryDiCQum0CmBUJMRZk",
        "Cookie": cookie
    }
    ##上传文件
    host = "http://ip/zy//transFile/uploadTransFile"
    fbin_1 = open("D:\\China Int\'l big data expo opens.docx", "rb")
    files_2 = {"file": ('China Int\'l big data expo opens.docx', fbin_1,'application/vnd.openxmlformats-officedocument.wordprocessingml.document,{}')}
    body = {
        "taskId": task_id,
        "batchId": batch_id,
    }
    upfile_req_res_1 = requests.post(url=host, data=body, headers=header, files=files_2)
    print("上传文件结果",upfile_req_res_1.text)
    ids_1 = json.loads(upfile_req_res_1.text)["data"]
    ###追加任务保存
    add_host = "http://ip/zy/transTask/addTaskFile"
    add_body_1 = {
        "language": "",
        "taskId": task_id,
        "batchId": batch_id,
        "ids": ids_1,
        "taskName": task_name,
        "toLanguage": "cn",
    }
    submit_req_1 = requests.post(url=add_host, data=add_body_1, headers=header)
    print("追加文档任务提交结果", submit_req_1.text)

    ####获取任务翻译状态
    task_status_host = "http://ip/zy/transFile/getTransFileList"
    status_body = {
        "fileName":" ",
        "pageNum":1,
        "pageSize":10,
        "taskId":task_id,
        "language":" ",
        "fileStatus":" "
    }
    print ("消息为",status_body)
    status_req = requests.get(url=task_status_host,params=status_body,headers=header)
    print ("任务状态为",status_req.text)
# for i in range(10):
#     upfile_trans()
#upfile_trans()
# for i in range(1):
#     task_add_file("540e56d288254aac8462ee96dff54318","694930276698030080","文本翻译 14:30:59")
#upfile_trans()

线程调用如下:

#coding=utf-8
import threading
import  time
import json
from ztxt import req_file_trans


class myThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        req_file_trans.upfile_trans()
thread_list =[]
#启动10个线程进行调用
for i in range(10):
    thread_real = myThread()
    thread_list.append(thread_real)
    thread_list[i].start()


#print (len(thread_list))


这里还不涉及线程锁这块的内容(后续补充)。

你可能感兴趣的:(python,多线程,压力测试)