300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 杂谈 python脚本调用接口进行性能和稳定性测试(套路)

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

时间:2023-02-26 10:40:59

相关推荐

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

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

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

当然以上目前已python脚本为主要工具。

所需要的辅助技术如下:

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

接口模拟配合并发 完成压测环境的模拟和结果的获取分析。资源监控的了解可对服务是否正常是否存在异常瓶颈进行参看。因为目前大部分web项目使用java,所以了解gc和服务异常分析等对于定位问题很关键。

从目前个人使用来看还比较顺手。当然服务器监控和java方面还未进行过多的尝试。尤其java放下很久了…

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

脚本如下:

接口模拟:

#coding=utf-8import requestsimport timeimport structimport jsoncookie ="JSESSIONID=6B2CECAE8A6182A2496E1C23C630FC35"##上传单个文档进行翻译def upfile_trans():header = {# "Content-type":"multipart/form-data; boundary=----WebKitFormBoundaryDiCQum0CmBUJMRZk","Cookie": cookie}####初始化一个任务 获取任务id 和批idinit_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-8import threadingimport timeimport jsonfrom ztxt import req_file_transclass 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))

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。