如何在Selenium Python中编写功能/集成测试

4

我是新手测试人员,希望能够:

1)测试登录功能

2)创建一个文件夹

3)将内容(一个页面)添加到文件夹中

我已经编写了每个测试案例并且它们都能够正常运行,但是显然我想要在此基础上继续完善,例如为了完成第3步,需要先完成第1和第2步。为了完成第2步,需要先完成第1步。这是我的基本测试结构:

class TestSelenium(unittest.TestCase):
    def setUp(self):
        # Create a new instance of the Firefox driver
        self.driver = webdriver.Firefox()

    def testLogin(self):
        print '1'
        ...

    def testFolderCreation(self):
        print '2'
        ...

    def testContentCreation(self):
        print '3'
        ...

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

起初,我以为测试会按顺序运行,第二个函数将从第一个函数离开的地方继续执行。但是我发现情况并非如此,每次测试似乎都会重新开始。我还意识到它们的执行顺序是相反的。在终端上我得到了3,2,1的输出结果。我该如何实现我的想法呢?如果在运行所需的函数之前调用之前的函数,我感觉它在不断地重复测试同样的内容(例如,在testContentCreation中,我将调用'testLogin'然后调用testFolderCreation,并在testFolderCreation中调用testLogin。如果我做更多次,testLogin就会被调用很多次!)。所以,我应该把之前的步骤转换为常规的非测试函数,并在最后一个(测试函数)中按顺序调用先前的函数吗?如果我这样做,那么我猜,如果任何一个步骤失败,最后一个也会失败,就会有一个大的测试函数。

你有关于如何编写这种类型测试的建议吗?另外,为什么测试会以相反的顺序运行呢?

谢谢!


字母排序? C < F < L - oers
@delnan 这不是单元测试吗?我做错了什么? - S.Muse
1
他指的是实际上并没有测试代码单元,而是编写功能/集成测试。我认为你只是被这些工具利用了 Python 的单元测试框架所困惑了。 - Silas Ray
1个回答

3
你看到的结果可能是因为你对`unittest`的假设有误导致的。每个测试用例都被视为一个独立的实体,没有运行顺序的限制。此外,`SetUp()`和`TearDown()`在每个测试用例之前和之后执行。如果你需要全局设置/拆卸,请创建名为`SetUpClass()`和`TearDownClass()`的类方法。你也可以查看`TestSuite`类。更多信息请参见:http://docs.python.org/library/unittest.html 请记住,当`unittest`库进行测试发现(反射您的测试用例类以查找要运行的测试用例)时,它基本上只能查看对象的`.__dict__`和`dir()`值,这些值本质上是无序的。

我最终将这3个测试转化为测试类,以便我可以编写更多与该类相关的测试。同时感谢您提供的setUpClass()tearDownClass(),我也使用了它们。 - S.Muse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接