首页 > 解决方案 > Pytest conftest.py 在重复测试执行期间被调用的次数越来越多

问题描述

这是我的conftest.py

class ValueStorage:
    ime_rute = None
    web_driver = None


@pytest.fixture(params=["chrome"], scope="class")
def init_driver(request):
    start = datetime.now()
    tester = os.environ["USERNAME"]
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger(__name__)
    logger.addHandler(logging.FileHandler(filename=f'.\\Reports\\{date.today()}_duration.log'))
    if request.param == "chrome":
        options = ChromeOptions()
        options.add_argument("--start-maximized")
        options.add_argument("--no-sandbox")
        if Options.HEADLESS == 1:
            options.add_argument('--headless')
        options.add_experimental_option("excludeSwitches", ["enable-logging"])
        ValueStorage.web_driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
    if request.param == "firefox":
        ValueStorage.web_driver = webdriver.Firefox(GeckoDriverManager().install())
    request.cls.driver = ValueStorage.web_driver
    yield
    end = datetime.now()
    logger.info(
        f"{end}: --- DURATION: {end - start} --- ROUTE NAME: {ValueStorage.ime_rute} --- HEADLESS: {Options.HEADLESS} --- RUN BY: {tester}")
    ValueStorage.web_driver.close()

我正在使用命令行运行测试

pytest -k example -vv

(其中“example”是测试名称)。

我希望多次重复测试,所以我使用@pytest.mark.repeat(100)装饰器:

    @pytest.mark.repeat(100)
    @pytest.mark.develop
    def test_example(self):
        # test code

duration.log 文件中的输出将类似于

2021-04-29 12:10:57.245345: --- DURATION: 0:00:24.612506 --- ROUTE NAME: 210429-3843-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:11:21.726882: --- DURATION: 0:00:24.364809 --- ROUTE NAME: 210429-3844-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:11:21.726882: --- DURATION: 0:00:24.364809 --- ROUTE NAME: 210429-3844-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:11:57.758704: --- DURATION: 0:00:35.897821 --- ROUTE NAME: 210429-3845-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:11:57.758704: --- DURATION: 0:00:35.897821 --- ROUTE NAME: 210429-3845-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:11:57.758704: --- DURATION: 0:00:35.897821 --- ROUTE NAME: 210429-3845-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:12:28.073752: --- DURATION: 0:00:30.255046 --- ROUTE NAME: 210429-3846-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:12:28.073752: --- DURATION: 0:00:30.255046 --- ROUTE NAME: 210429-3846-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:12:28.073752: --- DURATION: 0:00:30.255046 --- ROUTE NAME: 210429-3846-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1
2021-04-29 12:12:28.073752: --- DURATION: 0:00:30.255046 --- ROUTE NAME: 210429-3846-RT-JDoe --- HEADLESS: 1 --- RUN BY: tester1

所以,正在发生的事情是,该logger.info()行在第一次测试运行时写入一次,第二次写入两次,第三次写入三次,依此类推。

我尝试将 pytest 夹具的范围更改为“类”,但只有在测试运行 100 次后才记录该行。

我想logger.info()在每次测试执行后写入日志。我需要做什么?

标签: pythonseleniumautomated-testspytest

解决方案


推荐阅读