我正在创建一个独立的程序包以在Windows上运行,因此我的客户端不需要安装任何IDE或Python或Selenium等。
我的自动化测试脚本是使用以下内容开发的: Python 3.x单元测试框架 硒(Chrome驱动程序) Openpyxl读取/写入Excel文件
此外,脚本正在使用settings.ini文件中的某些路径。
此外,我的脚本位于以下不同的Python目录/软件包中:
主文件夹
------------测试用例(Python软件包)
--------------------------- test_main_driver.py
------------页面对象(Python软件包)
--------------------------- ** home.py
--------------------------- ** dashboard.py
------------实用工具(Python软件包)
--------------------------- ** string_util.py
test_main_driver.py调用chrome驱动程序并导入其他软件包,还具有测试类,设置和测试方法 **包含代码
我正在使用Pyinstaller使用spec文件创建独立的软件包,但是每当我在创建软件包后执行exe文件时,就会显示空cmd并关闭它。
要调试该问题,我尝试了简单的自动化脚本,而没有使用unittest框架(甚至没有定义类或方法)。解决路径问题并创建exe后,它工作正常。在相同的脚本中,我使用了openpyxl,但这也不起作用。
在我看来,主要问题是“ Python的unittest框架”。之后,第二个问题是更正我在主测试驱动程序文件中使用的软件包的路径。但是,下面是创建exe后我用来解决与unittest相关问题的代码。
在使用Pyinstaller制作程序包后,使用以下代码(没有类/方法/程序包/单元测试)调用Chrome:
current_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))
chromedriver = os.path.join(current_folder, "..\\..\\chromedriver.exe")
driver = webdriver.Chrome(executable_path=chromedriver)
driver.get('http://stackoverflow.com')
在使用Pyinstaller制作软件包后,不使用以下代码(带有类/方法/单元测试)来调用Chrome:
class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
current_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0]))
chromedriver = os.path.join(current_folder, "..\\..\\chromedriver.exe")
print(chromedriver)
time.sleep(5)
cls.driver = webdriver.Chrome(executable_path=chromedriver)
def test_method(self):
self.driver.get('http://stackoverflow.com')
规范文件:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['start.py'],
pathex=['.....\\TestCases'],
binaries=[(".....\\chromedriver.exe", ".")],
datas=[(".....\\TTestData", ".")],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='start',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
[('chromedriver.exe', 'chromedriver.exe', 'DATA')],
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='start')