如何用pyinstaller打包locust文件

How to package locust file with pyinstaller

在虚拟环境中我安装了locust。 我想创建可分发的包,以便任何用户都可以 运行 加载测试。 我用的是pyinstaller。 exe 文件已创建,但当我 运行 它没有任何反应。

from locust import HttpUser, TaskSet, task
import orjson as json
 
 
def create_post(self):
    paramsDict = {}
    paramsDict = json.loads('{ ...myjson.. }')
    params = json.dumps(paramsDict) #for orjson
    headers = {'content-type': 'application/json','Accept-Encoding':'gzip'}
    
    response = self.client.post("/",data= params, headers=headers, name = "Post query")
    print(f'response -> {response}')
 
 
class WebsiteUser(HttpUser):
    tasks = [create_post]

正如 Axel 指出的那样,我使用 locust 作为库。 我用 pyinstaller 构建并测试 运行s 只是网页没有显示

I build with pyinstaller but web did not appear `response -> <Response [200]>
Traceback (most recent call last):
  File "gevent\pywsgi.py", line 999, in handle_one_response
  File "gevent\pywsgi.py", line 945, in run_application
  File "flask\app.py", line 2464, in __call__
  File "flask\app.py", line 2450, in wsgi_app
  File "flask\app.py", line 1867, in handle_exception
  File "flask\_compat.py", line 39, in reraise
  File "flask\app.py", line 2447, in wsgi_app
  File "flask\app.py", line 1952, in full_dispatch_request
  File "flask\app.py", line 1821, in handle_user_exception
  File "flask\_compat.py", line 39, in reraise
  File "flask\app.py", line 1950, in full_dispatch_request
  File "flask\app.py", line 1936, in dispatch_request
  File "locust\web.py", line 419, in wrapper
  File "locust\web.py", line 132, in index
  File "flask\templating.py", line 138, in render_template
  File "jinja2\environment.py", line 930, in get_or_select_template
  File "jinja2\environment.py", line 883, in get_template
  File "jinja2\environment.py", line 857, in _load_template
  File "jinja2\loaders.py", line 115, in load
  File "flask\templating.py", line 60, in get_source
  File "flask\templating.py", line 89, in _get_source_fast
jinja2.exceptions.TemplateNotFound: index.html
2021-01-11T11:29:52Z {'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': '61083', 'HTTP_HOST': 'localhost:8089', (hidden keys: 31)} failed with TemplateNot

模板需要包含在构建中。 我在 spec 文件中添加了数据部分以及静态 java 脚本和 css

datas=[('<path>\Lib\site-packages\locust\templates', 'locust\templates'),('<path>\Lib\site-packages\locust\static', 'locust\static')],

通过 Inno Setup,我还将那些添加到文件夹中,使其与可执行文件位于同一文件夹中。 并显示网页。

一切都取决于您期望如何执行测试以及您真正打包的是什么。 Locust 有不同的使用方法。假设您想将测试文件打包为可执行文件,您可能需要在文件中包含一个使用 locust 作为 library

的主入口点

如果您正在打包 locust 本身和包含测试文件的 virtualenv,您可能需要指定如何 运行 locust 作为命令并将测试文件作为命令行参数传递