我们一直是的粉丝pylint
。它的静态分析已成为我们所有python项目的重要组成部分,并节省了大量时间来寻找晦涩的bug。但是从1.3->
1.4升级后,几乎所有已编译的c扩展都会导致E1101(无成员)错误。
以前在pylint
1.3之前完美运行的项目现在抱怨E1101几乎每个C扩展成员。我们被迫禁用E1101错误,但是,这从实质上不利于的使用pylint
。
例如,对lxml
包的这种完全有效的使用
r"""valid.py: demonstrate pylint 1.4 error"""
from lxml import etree
print etree.Element('mydoc')
通过运行此命令pylint
,它将报告:
$ pylint -rn valid.py
No config file found, using default configuration
************* Module valid
E: 3, 6: Module 'lxml.etree' has no 'Element' member (no-member)
但这是完全有效的:
$ python valid.py
<Element mydoc at 7fddf67b1ba8>
这真的很奇怪。极少数C扩展似乎可以通过正常运行pylint
,例如:
r"""valid2.py: this one works fine"""
import sqlite3
print sqlite3.version
$ pylint -rn valid2.py
No config file found, using default configuration
我的问题是,还有其他人目睹过吗?如果是这样,您是否愿意分享您的解决方法/解决方案?
我们已经尝试过尝试创建插件来抑制这些警告(http://docs.pylint.org/plugins.html#enter-
plugin
),但是我们很难在文档的正面或反面-astroid
基类是超级复杂的,已经违背了我们的尝试。
对于真实的奖励积分(和我们永恒的感激之情),我们很乐意了解的变化pylint
。我们很乐意修复将满足的代码(或至少为C扩展作者发布最佳实践文档)pylint
。
平台详情
$ pylint --version
No config file found, using default configuration
pylint 1.4.0,
astroid 1.3.2, common 0.63.2
Python 2.7.5 (default, Jul 1 2013, 18:09:11)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]
发布问题后不久,我找到了答案。实际上,更改是出于安全措施的目的。Pylint导入模块以有效地识别有效的方法和属性。决定导入不属于python
stdlib的c扩展会带来安全风险,并且可能会引入恶意代码。
这是在Astroid 1.3.1版本 https://mail.python.org/pipermail/code-
quality/2014-November/000394.html中完成的
只有来自受信任来源(标准库)的C扩展被加载到正在检查的Python流程中,才能根据实时模块构建AST。
如果要在导入非stdlib c扩展名的项目上使用pylint,则有四种解决方案。
1)使用--unsafe-load-any- extension=y
命令行选项禁用安全性。该功能未记录,被归类为隐藏选项(https://mail.python.org/pipermail/code-
quality/2014-November/000439.html)。
2)使用pylint.rc
设置禁用安全性unsafe-load-any- extensions=yes
。建议在选项1上使用它,并在默认的pylint.rc文件(使用创建--generate-rcfile
)中包含完整的文档。
3)pylint.rc
使用extension-pkg-whitelist=
选项在文件中具体列出您相信由pylint加载的程序包或模块名称。
4)创建一个插件来操纵AST(我不知道如何实现此功能-但在pylint邮件列表中定期进行讨论)。
我们选择了选项3。我们在项目pylint.rc
文件中添加了以下行:
extension-pkg-whitelist=lxml
我目前正在使用Cucumber框架和Selenium Java。我希望将我的正常cucumber报告升级为扩展报告。尝试使用扩展报告3.0.2。我能够生成范围报告,但我不能将失败测试用例的截图嵌入到范围报告中。 请大家帮忙了解一下,是否有可能将失败案例的截图嵌入到Cucumber Selenium Java框架中。如果是,请帮助我在转发与此或代码相关的任何链接。
当类与 TestNG 并行运行时,我们不会获得范围报告,但 TestNG 报告会更新。请找到我正在使用的示例代码和版本。如果我们只运行一个类(TestClass1.java),则将生成范围报告。 硒版本3.4.0 范围报告版本:3.0.6 扩展报告库.java 测试类1.java TestClass2.java testng.xml
我在我的一个报告中使用多种字体,我导出为PDF,我正在使用IREPORT来设计我的报告。 和根包中字体文件夹中的字体文件。
我正在尝试使用extent report构建selenium,但无法使用save screenshot函数,因为我无法引用ITestListener类中的WebDriver对象。下面是我的示例代码: 测试转轮。java: TestListener.java公共类TestListener实现ITestListener{ 问题: > 如何将WebDriver对象从TestRunner.java传递给T
我在visual studio C #中使用selenium处理ExtentReports,我运行了案例测试,但是报告文件。我在解决方案资源管理器中创建的报表文件夹中没有生成html。不知道问题出在哪里,我改了报告文件的路径去查,还是不生成。以下是我的代码: 和extent-config.xml:
上面的代码用于生成allure报告并运行测试,它运行并生成reports-allure-results中的一个文件夹,其中包含JSON文件。见下方截图