正确的POST文件上传(使用Locust进行负载测试)

时间:2016-03-22 19:23:16

标签: python django 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'),
        })

一切似乎都没问题,但在服务器的上传文件夹中没有文件!

我做错了什么?

2 个答案:

答案 0 :(得分:3)

好吧,我找到了解决方案,我希望它对某人有用:

这里描述了Django如何处理文件: How to send a "multipart/form-data" with requests in python?

配方是在post函数中定义'files'参数:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="navigation">
  <dt>test</dt>
  <dd class="close">sample</dd>
</div>

答案 1 :(得分:0)

处理多部分文件

 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")