gpt4 book ai didi

python - Selenium3.4.0-Python3.6.1 : In Selenium-Python binding using unittest how do I decide when to use self. assertIn or assert

转载 作者:太空狗 更新时间:2023-10-29 21:52:01 27 4
gpt4 key购买 nike

我正在使用 Selenium 3.4.0 和 Python 3.6.1。我通过 unittest 模块编写了一个遵循 Python 文档的脚本,该模块是基于 Java 的 JUnit 的内置 Python,在 Windows 8 Pro 上使用 geckodriver 0.16.1 和 Mozilla Firefox 57.0机器,64 位操作系统,x-64 处理器。在我的测试方法 test_search_in_python_org() 中,我有以下几行效果很好:

    def test_search_in_python_org(self):
driver = self.driver
driver.get("http://www.python.org")
self.assertIn("Python", driver.title)
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source

当我断言我使用的“页面标题”时:self.assertIn("Python", driver.title)

但是,当我断言一个字符串(我的假设)时,在我使用的页面源代码中:断言“未找到结果”。不在 driver.page_source

我的问题是决定我应该使用 self.assertIn 还是简单地使用 assert 的因素/条件是什么?

任何建议或指示都会有所帮助。

最佳答案

查看 Python unittest documentation还回顾了我曾经不得不在这里做的一堆 Django 单元测试,这是我的发现。

用例:

首先是最简单的事情,在我看来两者之间最大的区别是您可以使用每个命令的情况。它们在测试类的情况下可以互换使用,但是,为了使用 assertIn 命令,您需要导入 unittest 库。所以,假设我想知道 h 是否在 hello 中。通过 assertIn 命令执行此操作的一种简单方法是:

class MyTestCase(unittest.TestCase):
def is_h_in_hello(self):
self.assertIn("h", "hello")

然后我需要运行测试,即通过本例中的 unittest.main(),以获得我的答案。但是使用 assert 命令,可以更容易地查看 h 是否在 hello 中。这样做非常简单:

assert "h" in "hello"

但本质上,两者都会给我相同的答案。然而,这两种方法的区别在于第二种方法的使用简单。

结果:

我发现的第二个区别是 Python Shell 结果的可读性。 unittest 库的设计使得命令非常具体。因此,如果测试失败,您将收到一条非常明确的消息,说明出了什么问题。假设现在您想查看 b 是否在 hello 中。通过类方法(只需将 "h" 更改为 "b"),运行测试后我们得到的消息是:

AssertionError: 'b' not found in 'hello'

----------------------------------------------------------------------
Ran 1 test in 0.038s

FAILED (failures=1)

所以它非常清楚地告诉你:'b' not found in 'hello',这让你很容易看出到底是什么问题。但是假设您通过 assert 命令执行相同的过程。生成的错误消息类似于:

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
assert "b" in "hello"
AssertionError

虽然它会告诉您错误类型 (AssertionError) 和回溯,但它不会具体告诉您 "b"不在 "hello" 中。在这个简单的例子中,很容易看到回溯并说哦,hello 中没有 b!但是,在更复杂的情况下,可能很难弄清楚为什么会生成此错误消息。

总的来说,这两种方法非常相似,都会得到您想要的结果,但本质上,它归结为各处的细微差别,代码行数更少,Shell 消息非常直接。

关于python - Selenium3.4.0-Python3.6.1 : In Selenium-Python binding using unittest how do I decide when to use self. assertIn or assert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354698/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com