解决双击运行:pyinsaller打包python+pytest+allure生成dist文件夹中可执行程序“run_suite.exe”报错相关问题

一、首先确保环境有python的pyinstaller第三方库

PyInstaller 是一个独立的第三方库,用于将Python应用程序打包成可执行文件。它可以将Python代码及其依赖项打包成独立的可执行文件,让用户能够在没有安装Python解释器的情况下运行应用程序

1、在解决报错之前,确保已经安装pyinstaller插件,安装方式:
第一种方法:直接在终端执行

pip install pyinstaller

第二种方法:是使用源下载

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

2、验证是否安装成功,在终端执行:
打开命令行终端(Windows:cmd,Mac/Linux:Terminal)。
在命令行中输入以下命令来验证PyInstaller是否成功安装:

pyinstaller --version

python代码如何快速双击执行_python代码如何快速双击执行

二、解决下述各类报错问题

1、打包运行 pyinstaller -D xxx.py 打包成功后 双击执行xxx.exe报错 如图:

报错信息:ERROR: usage: run suite.exe [options] [file or dir] [file or dir] l…run suite.exe: error:unrecognized arguments:-alluredir --cleanalluredirinifile: F:\web AutoTest\pytest.inirootdir:F:web AutoTest reportdoes not exist Report successfully generated to allure report

python代码如何快速双击执行_python_02


问题的原因:使用pyonstaller打包,未导入第三方库allure
解决方案:打包时加入测试用例文件夹,先删除现有的dist、build文件夹和run_suite.spec文件,后在终端 Terminal执行下方打包命令

pyinstaller --add-data "allure-report:allure-report" run_suite.py

2、打包运行 pyinstaller -D xxx.py 打包成功后 双击执行xxx.exe报错无可执行的测试用例 如图:

python代码如何快速双击执行_python代码如何快速双击执行_03

问题的原因:使用pyonstaller打包,未加入测试用例
解决方案:打包时加入测试用例文件夹,先删除现有的dist、build文件夹和run_suite.spec文件,后在终端 Terminal执行下方打包命令

pyinstaller --add-data "./testcases;testcases" run_suite.py

3、解决配置问题

1、pytest.ini文件增加addopts = --import-mode=append,实现所有import模块都能执行

[pytest]
log_cli = True
log_cli_level = DEBUG
log_file_level = DEBUG
log_file_date_format = %Y-%m-%d %H:%M:%S
log_file_format = %(asctime)s  %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s


addopts = --import-mode=append -sv --alluredir report --clean-alluredir
# addopts = -sv --alluredir report --clean-alluredir
testpaths = ./testcases
python_files = test*.py
python_classes = Test*
python_functions = test_*

2.、修改run_suite.py文件生成报告的代码方式

import os
import pytest
from allure_pytest import plugin as allure_plugin

if __name__ == "__main__":
    # pytest.main()
    # os.system("allure generate report --clean")
    """
    上述注释掉的是原来的代码,下方是经过修改的代码
    """
    args = ["-v", "-s", "--alluredir=report/allure", "--clean-alluredir"]
    pytest.main(args=args, plugins=[allure_plugin])
    # 生成 Allure 报告
    allure_report_dir = "report"
    os.system(f"allure generate {allure_report_dir} --clean")

4、解决E ModuleNotFountError: No module name ‘XXXXXX’

1、E ModuleNotFountError: No module name‘ page’;E ModuleNotFountError: No module name ‘config’;E ModuleNotFountError: No module name ‘utils’;。。。。。。

python代码如何快速双击执行_python_04

问原因:未把依赖文件打包到可执行exe文件相同目录
解决方案:把pytest执行的测试用例testcases文件夹,相关依赖文件夹base、common、page、中的py文件和run_suite.py文件相同目录的config.py也放在和使用pyinstaller打包的exe文件相同目录下,先删除现有的dist、build文件夹和run_suite.spec文件,后在终端 Terminal执行下方打包命令**

pyinstaller --add-data "./testcases;testcases" --add-data "./base/*.py;base" --add-data "./common/*.py;common" --add-data "./page/*.py;page" --add-data "./config.py;." run_suite.py

2、双击运行使用pyinstaller dist 文件夹中run_suite.exe报错:from selenium.webdriver.common.by import ByModuleNotFoundError :No module named 'selenium

python代码如何快速双击执行_pytest_05


问题原因:部分包没有进行打包需要手动导入
解决方案:先删除现有的dist、build文件夹和run_suite.spec文件,后在终端 Terminal执行下方打包命令
****

pyinstaller --add-data "./testcases;testcases" --add-data "./base/*.py;base" --add-data "./common/*.py;common" --add-data "./page/*.py;page" --add-data "./config.py;." --hidden-import "selenium" --hidden-import "selenium.webdriver" --hidden-import "selenium.webdriver.common" --hidden-import "selenium.webdriver.common.by" run_suite.py

5、解决读取文件异常问题

报错信息with open(BASE_DIR + “./data/login_data.json”, encoding=“utf-8”) as f: E FileNotFoundError: [Errno 2] No such file or directory: ‘F:\web_AutoTest\dist\run_suite\_internal./data/login_data.json’;

python代码如何快速双击执行_pytest_06


问题原因:windows读取文件格式是反斜杠:
解决方案:把test_login.py中打开文件代码改为:
with open(BASE_DIR + r"\data\login_data.json", encoding=“utf-8”) as f:

python代码如何快速双击执行_python_07


上述所有问题。然后在文件夹F:\web_AutoTest\dist\run_suite中双击run_suite.exe,就能看到执行自动化测试用例的过程了
下方供上执行过程视频及allure报告

**执行过程中**



**执行完之后**



python代码如何快速双击执行_解决方案_08

上述解决方案仅供大家参考,谢谢捧场