使用pytest和unittest runner从两个终端运行测试套件,但仅显示unittest runner结果并执行一次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pytest和unittest runner从两个终端运行测试套件,但仅显示unittest runner结果并执行一次相关的知识,希望对你有一定的参考价值。

我正在尝试执行以下测试套件:

import unittest
from Login_Page import LoginPageAndLogout


def test_suite():
    # get all tests from classes
    login_test = unittest.TestLoader().loadTestsFromTestCase(LoginPageAndLogout)

    # create a test suite
    all_tests = unittest.TestSuite([
        login_test
    ])

    # run the suite
    unittest.TextTestRunner(verbosity=2).run(all_tests)

从Pycharm的终端使用命令:

sudo pytest selenium-tests/testSuite.py -vvv -s

输出的一部分如下:

============================================================================================================ test session starts ============================================================================================================
platform linux2 -- Python 2.7.14, pytest-3.1.3, py-1.4.34, pluggy-0.4.0 -- /usr/bin/python
cachedir: .cache
rootdir: /home/osboxes/PycharmProjects/WebTesting, inifile:
plugins: cov-2.5.1
collected 3 items 

selenium-tests/testSuite.py::LoginPageAndLogout::test_failed_login <- selenium-tests/Login_Page.py PASSED
selenium-tests/testSuite.py::LoginPageAndLogout::test_login <- selenium-tests/Login_Page.py FAILED
selenium-tests/testSuite.py::test_suite test_failed_login (Login_Page.LoginPageAndLogout) ... ok
test_login (Login_Page.LoginPageAndLogout) ... ok

----------------------------------------------------------------------
Ran 2 tests in 55.993s

我的Login_Page.py文件的结构是:

class LoginPageAndLogout(unittest.TestCase):

    def setUp(self):
        # ...

    # login with incorrect credentials to get error message
    def test_failed_login(self):
        # ...

    # login with correct credentials
    def test_login(self):
        # ...

    def tearDown(self):
        # ...

从输出中可以看出,我有2个测试,但终端收集了三个东西并运行了两次测试。有没有办法只执行PASSED/FAILED执行,而不是... ok

如果我评论unittest.TextTestRunner(verbosity=2).run(all_tests)我的测试只执行一次但我得到... ok结果而不是PASSED/FAILED这是我想要的;所以我看到pytest执行结果而不是unittests运行结果。

如何仅使用单元测试运行器从我的套件终端运行?

答案

对此的解决方案非常简单,因为我误解了我的单元测试是如何被执行的。

我唯一要做的就是从我的test_suite文件中注释掉整个testSuite.py类,然后在这个文件的顶部导入我想要执行的测试脚本中的类。

现在我的测试只运行一次,我仍然可以一次执行所有脚本,而无需使用完全相同的命令逐个输入我的命令:sudo pytest selenium-tests/testSuite.py -vvv -s

该命令的输出现在是:

osboxes@osboxes:~/PycharmProjects/WebTesting$ sudo pytest selenium-tests/testSuite.py -vvv -s
========================================================================================================================= test session starts ==========================================================================================================================
platform linux2 -- Python 2.7.14, pytest-3.1.3, py-1.4.34, pluggy-0.4.0 -- /usr/bin/python
cachedir: .cache
rootdir: /home/osboxes/PycharmProjects/WebTesting, inifile:
plugins: cov-2.5.1
collected 2 items 

selenium-tests/testSuite.py::LoginPageAndLogout::test_failed_login <- selenium-tests/Login_Page.py PASSED
selenium-tests/testSuite.py::LoginPageAndLogout::test_login <- selenium-tests/Login_Page.py PASSED

====================================================================================================================== 2 passed in 58.81 seconds =======================================================================================================================
osboxes@osboxes:~/PycharmProjects/WebTesting$ 

以上是关于使用pytest和unittest runner从两个终端运行测试套件,但仅显示unittest runner结果并执行一次的主要内容,如果未能解决你的问题,请参考以下文章

pytest 框架与 unittest 框架的对比

pytest学习和使用4-pytest和Unittest中setupteardown等方法详解和使用(最全)

pytest学习和使用5-Pytest和Unittest中的断言如何使用?

pytest学习和使用12-Unittest和Pytest参数化详解

pytest学习和使用12-Unittest和Pytest参数化详解

软件测试框架之unittest与pytest的对比-