在并行命令行执行中管理@ pytest.fixture(scope =“ session”)

时间:2019-11-27 05:13:59

标签: python linux command-line pytest parallel-execution

目标1: 在py模块中执行后端服务器而无需在命令行中并行化

Pytest结构:

src
   - conftest.py
   - tests
       - fixtures.py
       - test_method.py

代码: test_method.py

@pytest.fixture(scope="session")
def start_java_server_backend_for_htmlunit_webdriver():
    # imports os, selenium, webdriver and related modules
    # This method uses os module to start a java server in the back end
    # wherein java server is in my local directory
    # Once java is initiated, I do as below ...
    driver = webdriver.Remote(desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT)
    yield driver
    # Then tears down

class TestClass:
    @pytest.fixture(autouse=True)
    def setup(self, start_java_server_backend_for_htmlunit_webdriver):
        self.driver = start_java_server_backend_for_htmlunit_webdriver

    def test_case(self, environments): 
        # here the test case being environment specific 
        # like 'https://someurl.environment1.com', 
        # 'https://someurl.environment2.com', 
        # 'https://someurl.environment3.com'
        self.driver.get("a common URL which opens with different environments")  

命令行: 与新的命令行提示符单独运行时,以下执行效果很好

$ pytest -v -s test_method.py --env environment1 
$ pytest -v -s test_method.py --env environment2
$ pytest -v -s test_method.py --env environment3

目标2: 在py模块中通过命令行并行化执行后端服务器

命令行: 下面的命令非常失败

$ pytest -v -s test_method.py --env environment1 | pytest -v -s test_method.py --env environment2 | 
    pytest -v -s test_method.py --env environment3

这里发生的是...

当我与“ |”并行执行时在命令行提示符下;它显然是从“ src”软件包的开头选择了所有内容的,其中显然包括针对不同环境的新会话,其中包括新的conftest,新的夹具和新的“ start_java_server_backend_for_htmlunit_webdriver”。当我执行并行操作时,针对环境的测试用例完成后,它会中断正在运行的Java服务器,因此没有空间让env 2或3正常运行。

因此,我删除了拆解并进行了检查;但是还有另一个问题!它在后端启动一个新的Java服务器,在后端填充更多的PID,这又是一个问题!

我想为所有环境在同一Java服务器上运行,这没有发生。我尝试了几种逻辑方法,例如为

放入while循环
# while 'wc -l' < 2 java server pid's 

基本上我需要一个单例类,其中所有进程都可以运行...

0 个答案:

没有答案