目标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
基本上我需要一个单例类,其中所有进程都可以运行...