正确的 POST 文件上传(使用 Locust 进行负载测试)
Proper POST file upload (load testing with Locust)
我正在尝试对基于 Django 的网站进行负载测试。
我使用 Locust 0.7.3 和 python 2.7.10
我在这里 POST - 填写表格并附加一些文件:
class WebsiteTasks(TaskSet):
def on_start(self):
self.client.get("/")
@task
def submit(self):
response = self.client.get("/submit/")
csrftoken = response.cookies['csrftoken']
attach = open('file.pdf', 'rb')
r = self.client.post("/submit/", {
'csrfmiddlewaretoken': csrftoken,
'password': smart_str(u'wkefjgui'),
'payload': smart_str(u'kjsdgfljdsh'),
'docfile': attach,
'commit': smart_str(u'Вкрапить / Embed'),
})
一切正常,但服务器的上传文件夹中没有文件!
我做错了什么?
好吧,我找到了解决方案,希望它对某人有用:
这里描述了 Django 如何处理文件:
How to send a "multipart/form-data" with requests in python?
配方是在post函数中定义'files'参数:
r = self.client.post("/submit/", data={
'csrfmiddlewaretoken': csrftoken,
'password': smart_str(u'wkefjgui'),
'payload': smart_str(u'kjsdgfljdsh'),
'commit': smart_str(u'Вкрапить / Embed'),
}, files={'docfile': attach})
处理多部分文件
def _get_image_part(self, file_path, file_content_type='image/jpeg'):
import os
file_name = os.path.basename(file_path)
file_content = open(file_path, 'rb')
return file_name, file_content, file_content_type
多部分测试用例
class OpenDeviceFrontApi(TaskSet):
@task(2)
def rec_log_upload(self):
payload = {
"device_key": device_key
}
files = {
"scene_img": self._get_image_part("data/face/rec1.jpg"),
"face_img": self._get_image_part("data/face/rec2.jpg")
}
r = self.client.post("/log/rec_log_upload", data=payload, files=files, verify=False)
assert r.status_code == 200
rData = json.loads(r.text, encoding="utf-8")
如何通过 Django 服务器测试 Locust 中的文件上传:
def post_img(self):
files = {'media': open('img.png', 'rb')}
response=self.client.post("/upload",files=files)
print('Response is -: ',response)
我正在尝试对基于 Django 的网站进行负载测试。
我使用 Locust 0.7.3 和 python 2.7.10
我在这里 POST - 填写表格并附加一些文件:
class WebsiteTasks(TaskSet):
def on_start(self):
self.client.get("/")
@task
def submit(self):
response = self.client.get("/submit/")
csrftoken = response.cookies['csrftoken']
attach = open('file.pdf', 'rb')
r = self.client.post("/submit/", {
'csrfmiddlewaretoken': csrftoken,
'password': smart_str(u'wkefjgui'),
'payload': smart_str(u'kjsdgfljdsh'),
'docfile': attach,
'commit': smart_str(u'Вкрапить / Embed'),
})
一切正常,但服务器的上传文件夹中没有文件!
我做错了什么?
好吧,我找到了解决方案,希望它对某人有用:
这里描述了 Django 如何处理文件: How to send a "multipart/form-data" with requests in python?
配方是在post函数中定义'files'参数:
r = self.client.post("/submit/", data={
'csrfmiddlewaretoken': csrftoken,
'password': smart_str(u'wkefjgui'),
'payload': smart_str(u'kjsdgfljdsh'),
'commit': smart_str(u'Вкрапить / Embed'),
}, files={'docfile': attach})
处理多部分文件
def _get_image_part(self, file_path, file_content_type='image/jpeg'):
import os
file_name = os.path.basename(file_path)
file_content = open(file_path, 'rb')
return file_name, file_content, file_content_type
多部分测试用例
class OpenDeviceFrontApi(TaskSet):
@task(2)
def rec_log_upload(self):
payload = {
"device_key": device_key
}
files = {
"scene_img": self._get_image_part("data/face/rec1.jpg"),
"face_img": self._get_image_part("data/face/rec2.jpg")
}
r = self.client.post("/log/rec_log_upload", data=payload, files=files, verify=False)
assert r.status_code == 200
rData = json.loads(r.text, encoding="utf-8")
如何通过 Django 服务器测试 Locust 中的文件上传:
def post_img(self):
files = {'media': open('img.png', 'rb')}
response=self.client.post("/upload",files=files)
print('Response is -: ',response)