博客
关于我
Pytest 命令行报错: Hint: make sure your test modules/packages have valid Python names.
阅读量:799 次
发布时间:2023-03-05

本文共 1067 字,大约阅读时间需要 3 分钟。

今天在Jenkins中新建一个自动化测试用例的Job时,我遇到了一个报错问题。报错信息显示在运行测试脚本时,Python模块无法找到'base'模块。我打开本地的PyCharm环境,试着运行同样的脚本,结果却没有任何问题。这让我很困惑,为什么在PyCharm中没有问题,但在Jenkins中却会报这个错误呢?

首先,我仔细阅读了错误信息:ModuleNotFoundError: No module named 'base'。这意味着在运行测试脚本时,Python解释器无法找到名为'base'的模块。接下来,我检查了测试脚本的代码,发现它从'base.ssoLogin'导入了LoginE类。因此,'base'模块必须包含在项目的Python路径中,或者在运行环境中可用。

我回忆起之前在项目中设置过类似的环境变量,特别是PYTHONPATH。通常,当项目结构不是标准的库结构时,手动将项目根目录添加到PYTHONPATH中,可以让Python能够正确导入模块。我决定检查Jenkins的环境变量设置,尤其是PYTHONPATH是否包含了项目的根目录。

进入Jenkins的系统设置,查看了环境变量部分。发现PYTHONPATH中并没有包含项目的根目录。这可能就是问题的根源。为了验证这一点,我尝试在PyCharm中手动将项目根目录添加到PYTHONPATH中,运行脚本后发现没有问题。这表明,当PYTHONPATH包含项目根目录时,模块导入成功。

接下来,我需要将这个解决方法应用到Jenkins环境中。由于Jenkins运行的是Shell脚本,我需要在Jenkinsfile中添加相应的环境变量设置。具体来说,就是在Jenkinsfile的前置步骤中,设置PYTHONPATH环境变量,将项目根目录添加进去。

我还意识到,可能需要在不同的操作系统上测试这个解决方案。例如,在Linux和macOS上,路径分隔符是斜杠和斜杠,而在Windows上则是反斜杠。因此,在Jenkinsfile中,我需要根据不同的操作系统动态设置路径分隔符。

为了确保我的Jenkinsfile能够正确处理路径,我查阅了一些资料,了解如何在Shell脚本中处理不同操作系统的路径分隔符。决定使用$(expr '('/'')来获取正确的分隔符,以确保路径拼接正确无误。

最后,我将修改后的Jenkinsfile提交到代码仓库,并验证一下是否能够顺利通过测试。运行Jenkins Job后,发现报错信息消失,测试用例顺利执行,这验证了我的解决方案是正确的。

转载地址:http://yjafk.baihongyu.com/

你可能感兴趣的文章