부하 테스트로 파일 업로드하고 싶습니다.
14586 단어 파이썬ASP.NET_Corelocust
Locust는 Python에서 테스트 케이스가 걸려 자유롭고 사용하기 쉬운 부하 테스트 도구입니다.
환경
· macOS High Sierra
· Locust 0.8
· 파이썬 2.7.10
· VisualStudio for Mac Community 7.3.3
· .NetCore 2.1.4
테스트 사이트 만들기
1) .NetCore 명령으로 템플릿 프로젝트를 만듭니다.
mkdir Dummy
cd Dummy/
dotnet new mvc
2) 업로드 처리를 작성합니다.
우선 About 파일을 다시 씁니다.
Views/Home/About.cshtml@{
ViewData["Title"] = "Upload";
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>
<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadFile">
<div class="form-group">
<div class="col-md-10">
<p>ファイル名:
<input type="text" name="fileName" id="fileName" />
</p>
</div>
<div class="col-md-10">
<p>アップロードするファイルを選択してください。</p>
<input type="file" name="files" id="name" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="ファイルアップする" />
</div>
</div>
</form>
3) 컨트롤러에는 이하의 처리를 추가합니다
/Controllers/HomeController.cs・・・・ コード省略 ・・・・
private readonly IHostingEnvironment _hostingEnvironment;
// コンストラクタ追加
public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
・・・・ コード省略 ・・・・
[HttpPost]
public async Task<IActionResult> UploadFile(List<IFormFile> files, string fileName)
{
// Webrootパスを取得する
var webRootPath = _hostingEnvironment.WebRootPath;
foreach (var file in files)
{
var filePath = $"{webRootPath}/uploads/{fileName}";
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
return Redirect("About");
}
4) 그리고는 wwwroot 아래에 uploads 폴더를 작성해 줍니다.
이 폴더에 파일이 올라갑니다.
locust 코드
locust측의 업로드하는 폴더 구성은 이런 느낌으로 했습니다.
코드는 다음과 같이 하면 파일을 올려줍니다.
/Home/UploadFile이라는 경로는 파일 업로드 Submit에서 호출되는 경로입니다.
locustfile.py# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
from locust import HttpLocust, TaskSet, task
import os.path
import random
import datetime
# アップロード元パス
upload_file_path = os.path.dirname(os.path.abspath(__file__)) + "/UploadFiles/Illust/"
upload_files = ["texture.png", "unitychan.jpg", "wankoro.png"]
class UserTaskSet(TaskSet):
def on_start(self):
"""
タスクセットの開始時に1回のみ呼ばれます。
"""
@task
def upload_task(self):
# 複数のファイルをランダムでアップロード
self.upload(upload_file_path, upload_files[random.randrange(3)])
def upload(self, file_path, file_name):
# アップロードページへ移動
self.client.get("/Home/Upload")
# Content-Type識別
file, ext = os.path.splitext(file_name)
content_type = ""
if(ext == ".jpg" or ext == ".jpeg"):
content_type = "image/jpg"
elif(ext == ".png"):
content_type = "image/png"
# 日付を取得
dt_now = datetime.datetime.now()
timestamp = dt_now.strftime('%Y%m%d%H%M%S')
with open(file_path + file_name, 'rb') as upload_file:
self.client.post("/Home/UploadFile", \
data = { \
'fileName': timestamp + ext, \
}, \
files = { \
'files': (upload_file.name, upload_file, content_type), \
}, \
)
class WebsiteUser(HttpLocust):
task_set = UserTaskSet
# task実行の最短待ち時間
min_wait = 1000
# task実行の最大待ち時間
max_wait = 1000
실행
이번에는 테스트 사이트를 실행하면 57786 포트에서 작동했습니다.
locustfile.py 파일이 있는 경로에서 다음 명령을 두드리십시오.
locust -H http://localhost:57786
나머지는 다음 사이트를 방문하면 부하 테스트를 시작합니다.
http://localhost:8089/
결과
이제 포코 포코와 파일 업로드 처리가 되었습니다!
Reference
이 문제에 관하여(부하 테스트로 파일 업로드하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naotaro0123/items/6a42024edb2ad2151b5e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1) .NetCore 명령으로 템플릿 프로젝트를 만듭니다.
mkdir Dummy
cd Dummy/
dotnet new mvc
2) 업로드 처리를 작성합니다.
우선 About 파일을 다시 씁니다.
Views/Home/About.cshtml
@{
ViewData["Title"] = "Upload";
}
<h2>@ViewData["Title"].</h2>
<h3>@ViewData["Message"]</h3>
<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadFile">
<div class="form-group">
<div class="col-md-10">
<p>ファイル名:
<input type="text" name="fileName" id="fileName" />
</p>
</div>
<div class="col-md-10">
<p>アップロードするファイルを選択してください。</p>
<input type="file" name="files" id="name" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<input type="submit" value="ファイルアップする" />
</div>
</div>
</form>
3) 컨트롤러에는 이하의 처리를 추가합니다
/Controllers/HomeController.cs
・・・・ コード省略 ・・・・
private readonly IHostingEnvironment _hostingEnvironment;
// コンストラクタ追加
public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
・・・・ コード省略 ・・・・
[HttpPost]
public async Task<IActionResult> UploadFile(List<IFormFile> files, string fileName)
{
// Webrootパスを取得する
var webRootPath = _hostingEnvironment.WebRootPath;
foreach (var file in files)
{
var filePath = $"{webRootPath}/uploads/{fileName}";
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
return Redirect("About");
}
4) 그리고는 wwwroot 아래에 uploads 폴더를 작성해 줍니다.
이 폴더에 파일이 올라갑니다.
locust 코드
locust측의 업로드하는 폴더 구성은 이런 느낌으로 했습니다.
코드는 다음과 같이 하면 파일을 올려줍니다.
/Home/UploadFile이라는 경로는 파일 업로드 Submit에서 호출되는 경로입니다.
locustfile.py# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
from locust import HttpLocust, TaskSet, task
import os.path
import random
import datetime
# アップロード元パス
upload_file_path = os.path.dirname(os.path.abspath(__file__)) + "/UploadFiles/Illust/"
upload_files = ["texture.png", "unitychan.jpg", "wankoro.png"]
class UserTaskSet(TaskSet):
def on_start(self):
"""
タスクセットの開始時に1回のみ呼ばれます。
"""
@task
def upload_task(self):
# 複数のファイルをランダムでアップロード
self.upload(upload_file_path, upload_files[random.randrange(3)])
def upload(self, file_path, file_name):
# アップロードページへ移動
self.client.get("/Home/Upload")
# Content-Type識別
file, ext = os.path.splitext(file_name)
content_type = ""
if(ext == ".jpg" or ext == ".jpeg"):
content_type = "image/jpg"
elif(ext == ".png"):
content_type = "image/png"
# 日付を取得
dt_now = datetime.datetime.now()
timestamp = dt_now.strftime('%Y%m%d%H%M%S')
with open(file_path + file_name, 'rb') as upload_file:
self.client.post("/Home/UploadFile", \
data = { \
'fileName': timestamp + ext, \
}, \
files = { \
'files': (upload_file.name, upload_file, content_type), \
}, \
)
class WebsiteUser(HttpLocust):
task_set = UserTaskSet
# task実行の最短待ち時間
min_wait = 1000
# task実行の最大待ち時間
max_wait = 1000
실행
이번에는 테스트 사이트를 실행하면 57786 포트에서 작동했습니다.
locustfile.py 파일이 있는 경로에서 다음 명령을 두드리십시오.
locust -H http://localhost:57786
나머지는 다음 사이트를 방문하면 부하 테스트를 시작합니다.
http://localhost:8089/
결과
이제 포코 포코와 파일 업로드 처리가 되었습니다!
Reference
이 문제에 관하여(부하 테스트로 파일 업로드하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naotaro0123/items/6a42024edb2ad2151b5e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import unicode_literals
from locust import HttpLocust, TaskSet, task
import os.path
import random
import datetime
# アップロード元パス
upload_file_path = os.path.dirname(os.path.abspath(__file__)) + "/UploadFiles/Illust/"
upload_files = ["texture.png", "unitychan.jpg", "wankoro.png"]
class UserTaskSet(TaskSet):
def on_start(self):
"""
タスクセットの開始時に1回のみ呼ばれます。
"""
@task
def upload_task(self):
# 複数のファイルをランダムでアップロード
self.upload(upload_file_path, upload_files[random.randrange(3)])
def upload(self, file_path, file_name):
# アップロードページへ移動
self.client.get("/Home/Upload")
# Content-Type識別
file, ext = os.path.splitext(file_name)
content_type = ""
if(ext == ".jpg" or ext == ".jpeg"):
content_type = "image/jpg"
elif(ext == ".png"):
content_type = "image/png"
# 日付を取得
dt_now = datetime.datetime.now()
timestamp = dt_now.strftime('%Y%m%d%H%M%S')
with open(file_path + file_name, 'rb') as upload_file:
self.client.post("/Home/UploadFile", \
data = { \
'fileName': timestamp + ext, \
}, \
files = { \
'files': (upload_file.name, upload_file, content_type), \
}, \
)
class WebsiteUser(HttpLocust):
task_set = UserTaskSet
# task実行の最短待ち時間
min_wait = 1000
# task実行の最大待ち時間
max_wait = 1000
이번에는 테스트 사이트를 실행하면 57786 포트에서 작동했습니다.
locustfile.py 파일이 있는 경로에서 다음 명령을 두드리십시오.
locust -H http://localhost:57786
나머지는 다음 사이트를 방문하면 부하 테스트를 시작합니다.
http://localhost:8089/
결과
이제 포코 포코와 파일 업로드 처리가 되었습니다!
Reference
이 문제에 관하여(부하 테스트로 파일 업로드하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naotaro0123/items/6a42024edb2ad2151b5e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(부하 테스트로 파일 업로드하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naotaro0123/items/6a42024edb2ad2151b5e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)