解决双击运行: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
二、解决下述各类报错问题
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
问题的原因:使用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报错无可执行的测试用例 如图:
问题的原因:使用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’;。。。。。。
问原因:未把依赖文件打包到可执行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
问题原因:部分包没有进行打包需要手动导入
解决方案:先删除现有的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’;
问题原因:windows读取文件格式是反斜杠:
解决方案:把test_login.py中打开文件代码改为:
with open(BASE_DIR + r"\data\login_data.json", encoding=“utf-8”) as f:
上述所有问题。然后在文件夹F:\web_AutoTest\dist\run_suite中双击run_suite.exe,就能看到执行自动化测试用例的过程了
下方供上执行过程视频及allure报告
**执行过程中**
**执行完之后**
上述解决方案仅供大家参考,谢谢捧场