Skip to content

Commit 5f7275d

Browse files
authored
Merge pull request #90 from Integration-Automation/dev
Dev
2 parents 5a9dc50 + 6a5771b commit 5f7275d

File tree

13 files changed

+228
-5
lines changed

13 files changed

+228
-5
lines changed

.idea/LoadDensity.iml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dev.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
66

77
[project]
88
name = "je_load_density_dev"
9-
version = "0.0.68"
9+
version = "0.0.71"
1010
authors = [
1111
{ name = "JE-Chen", email = "[email protected]" },
1212
]
@@ -34,6 +34,8 @@ Code = "https://github.com/Intergration-Automation-Testing/LoadDensity"
3434
file = "README.md"
3535
content-type = "text/markdown"
3636

37-
3837
[tool.setuptools.packages]
3938
find = { namespaces = false }
39+
40+
[project.optional-dependencies]
41+
gui = ["PySide6==6.9.1", "qt-material"]

je_load_density/gui/__init__.py

Whitespace-only changes.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from PySide6.QtCore import QThread
2+
from je_load_density.wrapper.start_wrapper.start_test import start_test
3+
4+
5+
class LoadDensityThread(QThread):
6+
7+
def __init__(self):
8+
super().__init__()
9+
self.url = None
10+
self.test_time = None
11+
self.user_count = None
12+
self.spawn_rate = None
13+
self.method = None
14+
15+
def run(self):
16+
start_test(
17+
{
18+
"user": "fast_http_user",
19+
},
20+
self.user_count, self.spawn_rate, self.test_time,
21+
**{
22+
"tasks": {
23+
self.method: {"request_url": self.url},
24+
}
25+
}
26+
)

je_load_density/gui/language_wrapper/__init__.py

Whitespace-only changes.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
english_word_dict = {
2+
# Main
3+
"application_name": "LoadDensity",
4+
# Widget
5+
"url": "URL",
6+
"test_time": "Test Time: ",
7+
"user_count": "User Count: ",
8+
"spawn_rate": "Spawn Rate: ",
9+
"test_method": "Test Method: ",
10+
"start_button": "Start: ",
11+
"log": "Log: ",
12+
# Test method
13+
"get": "GET",
14+
"post": "POST",
15+
"put": "PUT",
16+
"patch": "PATCH",
17+
"delete": "DELETE",
18+
"head": "HEAD",
19+
"options": "OPTIONS",
20+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from je_load_density.gui.language_wrapper.english import english_word_dict
2+
from je_load_density.gui.language_wrapper.traditional_chinese import traditional_chinese_word_dict
3+
from je_load_density.utils.logging.loggin_instance import load_density_logger
4+
5+
6+
7+
class LanguageWrapper(object):
8+
9+
def __init__(
10+
self
11+
):
12+
load_density_logger.info("Init LanguageWrapper")
13+
self.language: str = "English"
14+
self.choose_language_dict = {
15+
"English": english_word_dict,
16+
"Traditional_Chinese": traditional_chinese_word_dict
17+
}
18+
self.language_word_dict: dict = self.choose_language_dict.get(self.language)
19+
20+
def reset_language(self, language) -> None:
21+
load_density_logger.info(f"LanguageWrapper reset_language language: {language}")
22+
if language in [
23+
"English",
24+
"Traditional_Chinese"
25+
]:
26+
self.language = language
27+
self.language_word_dict = self.choose_language_dict.get(self.language)
28+
29+
30+
language_wrapper = LanguageWrapper()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
traditional_chinese_word_dict = {
2+
# Main
3+
"application_name": "LoadDensity",
4+
# Widget
5+
"url": "連結: ",
6+
"test_time": "測試時間: ",
7+
"user_count": "測試使用者總數: ",
8+
"spawn_rate": "產生速率: ",
9+
"test_method": "測試 HTTP 方法: ",
10+
"start_button": "開始: ",
11+
"log": "日誌: ",
12+
# Test method
13+
"get": "GET",
14+
"post": "POST",
15+
"put": "PUT",
16+
"patch": "PATCH",
17+
"delete": "DELETE",
18+
"head": "HEAD",
19+
"options": "OPTIONS",
20+
}

je_load_density/gui/main_widget.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import logging
2+
3+
from PySide6.QtCore import QTimer
4+
from PySide6.QtGui import QIntValidator
5+
from PySide6.QtWidgets import QWidget, QFormLayout, QLineEdit, QComboBox, QPushButton, QTextEdit, QVBoxLayout, QLabel
6+
7+
from je_load_density.gui.execute_thread import LoadDensityThread
8+
from je_load_density.gui.language_wrapper.multi_language_wrapper import language_wrapper
9+
from je_load_density.log_to_ui_filter import InterceptAllFilter, locust_log_queue
10+
11+
12+
class LoadDensityWidget(QWidget):
13+
14+
def __init__(self, parent=None):
15+
super().__init__(parent)
16+
# from
17+
form_layout = QFormLayout()
18+
self.url_input = QLineEdit()
19+
self.test_time_input = QLineEdit()
20+
self.test_time_input.setValidator(QIntValidator())
21+
self.user_count_input = QLineEdit()
22+
self.user_count_input.setValidator(QIntValidator())
23+
self.spawn_rate_input = QLineEdit()
24+
self.spawn_rate_input.setValidator(QIntValidator())
25+
self.method_combobox = QComboBox()
26+
self.method_combobox.addItems([
27+
language_wrapper.language_word_dict.get("get"),
28+
language_wrapper.language_word_dict.get("post"),
29+
language_wrapper.language_word_dict.get("put"),
30+
language_wrapper.language_word_dict.get("patch"),
31+
language_wrapper.language_word_dict.get("delete"),
32+
language_wrapper.language_word_dict.get("head"),
33+
language_wrapper.language_word_dict.get("options"),
34+
])
35+
form_layout.addRow(language_wrapper.language_word_dict.get("url"), self.url_input)
36+
form_layout.addRow(language_wrapper.language_word_dict.get("test_time"), self.test_time_input)
37+
form_layout.addRow(language_wrapper.language_word_dict.get("user_count"), self.user_count_input)
38+
form_layout.addRow(language_wrapper.language_word_dict.get("spawn_rate"), self.spawn_rate_input)
39+
form_layout.addRow(language_wrapper.language_word_dict.get("test_method"), self.method_combobox)
40+
41+
self.start_button = QPushButton(language_wrapper.language_word_dict.get("start_button"))
42+
self.start_button.clicked.connect(self.run_load_density)
43+
44+
# Log panel
45+
self.log_panel = QTextEdit()
46+
self.log_panel.setReadOnly(True)
47+
48+
# Add widget to vertical layout
49+
main_layout = QVBoxLayout()
50+
main_layout.addLayout(form_layout)
51+
main_layout.addWidget(self.start_button)
52+
main_layout.addWidget(QLabel(language_wrapper.language_word_dict.get("log")))
53+
main_layout.addWidget(self.log_panel)
54+
55+
# Param
56+
self.run_load_density_thread = None
57+
self.pull_log_timer = QTimer()
58+
self.pull_log_timer.setInterval(20)
59+
self.pull_log_timer.timeout.connect(self.add_text_to_log)
60+
61+
self.setLayout(main_layout)
62+
63+
def run_load_density(self):
64+
self.run_load_density_thread = LoadDensityThread()
65+
self.run_load_density_thread.url = self.url_input.text()
66+
self.run_load_density_thread.test_time = int(self.test_time_input.text())
67+
self.run_load_density_thread.user_count = int(self.user_count_input.text())
68+
self.run_load_density_thread.spawn_rate = int(self.spawn_rate_input.text())
69+
self.run_load_density_thread.method = self.method_combobox.currentText().lower()
70+
log_handler_list = [handler for handler in logging.getLogger("root").handlers if handler.name == "log_reader"]
71+
if log_handler_list:
72+
log_handler = log_handler_list[0]
73+
log_handler.addFilter(InterceptAllFilter())
74+
self.run_load_density_thread.start()
75+
self.pull_log_timer.stop()
76+
self.pull_log_timer.start()
77+
self.log_panel.clear()
78+
79+
def add_text_to_log(self):
80+
if not locust_log_queue.empty():
81+
self.log_panel.append(locust_log_queue.get_nowait())

0 commit comments

Comments
 (0)