目前,我们正在确定使用Java还是Python作为浏览器自动化测试的语言,并选择合适的单元测试框架。我们之前使用过Java、JUnit、TestNG和WebDriver,并设计过框架。虽然我之前从未使用过Python,但我知道Python的单元测试框架,如unittest、pyunit、nose等,但我怀疑它们是否能像TestNG或Java那样成功。我想逐点分析一下在Selenium WebDriver中使用这些框架的情况:
-
我听说Python是一种解释型语言,因此它的执行速度较慢。假设有1000个测试用例,在Java中运行需要6个小时,那么Python运行相同的测试用例会花费很长时间,比如8个小时吗?
-
Python的单元测试框架在测试分组、并行执行、跳过测试等方面是否和Java的单元测试框架一样灵活,如TestNG?
-
我认为Python和Selenium WebDriver的结合没有Java和WebDriver的结合那么大或那么受欢迎的社区。如果我遇到问题,与Python相比,我更有可能找到关于Java的答案。
-
有点与第3点相关,依赖工具、插件,甚至WebDriver的Python绑定作为持续维护和良好的语言是否安全?
-
我在使用Python的单元测试框架时看到的一个主要缺点是缺乏样板代码或库,无法生成漂亮的HTML报告,尤其是带有饼状图、条形图和时间线的历史报告,而Java中的Allure、TestNG的默认报告、ReportNG或JUnit报告则有ANT的帮助,如下所示:
- Allure报告:
- 历史的JUnit报告:
我还想强调一下,是否有一种方法可以用Java编写框架,并在WebDriver中根据我们的应用程序编写库或实用程序,以便可以轻松地调用或集成到Python代码或模块中?这实际上可以解决我们的问题,因为客户端可以使用我们在Java中编写的代码,并使用它或从他们的Python模块中调用它。
2、解决方案
1) 性能比较
性能差异不会太大。如果测试运行时间长(6-8小时),那么问题不在于语言,而在于测试本身。语言的选择不会神奇地使测试运行得更快或更慢(在这个规模上)。如果语言选择对性能有影响,我怀疑它可能是正负1分钟。
2) 框架灵活性
我无法回答这个问题。我不熟悉Python的测试框架。但答案的其余部分并不依赖于这一点。
3) 社区支持
关于WebDriver,你知道它是如何工作的吗?它是浏览器中的一个扩展。你在代码中通过JSON协议与它通信。你的测试代码只是一个客户端,生成JSON命令并将其发送到浏览器。WebDriver的核心不关心JSON是由Python还是Java生成的。唯一可能出现问题的是客户端代码,我怀疑两者都是稳定且常用的。
4) 工具和插件维护
见答案3。在这里你只切换了客户端部分,但在我看来它是维护良好的。
5) 报告生成
这不是容器(例如Jenkins / Hudson)的工作吗?所有测试框架通常只生成一个失败/通过测试的报告。很可能采用ANT / JUnit XML格式。有关详细信息,请参阅此问题。 हालांकि, এটি আপনার ডায়াগ্রাম জেনারেট করতে ব্যবহৃত প্লাগইনের উপর নির্ভর করতে পারে। তবে ফলাফল রিপোর্ট তৈরি করার জন্য পরীক্ষার কাঠামোর উপর নয়।
如果您对Java感到更满意,那就使用它。支持Python的是更短的语法。您可以用更少的样板代码编写更短的测试。但这不会让我仅仅为了更短(在源代码意义上)的测试而学习Python。