title: Setting dynamic folder and report name in pytest
body: <p>I have a problem with setting report name and folder with it dynamically in Python's pytest.
  For example: I've run all pytest's tests @ 2020-03-06 21:50 so I'd like to have my report stored in folder <code>20200306</code> with name <code>report_2150.html</code>. I want it to be automated and triggered right after the tests are finished.</p>
  
  <p>I'm working in VS Code and I'm aiming to share my work with colleagues with no automation experience so I'm aiming to use it as "click test to start".</p>
  
  <p>My project structure:</p>
  
  <pre><code>webtools/
  |── .vscode/
  |──── settings.json
  |── drivers/
  |── pages/
  |── reports/
  |── tests/
  |──── __init__.py
  |──── config.json
  |──── conftest.py
  |──── test_1.py
  |──── test_2.py
  |── setup.py
  </code></pre>
  
  <p>Code samples:</p>
  
  <p><code>settings.json</code></p>
  
  <pre class="lang-json prettyprint-override"><code>{
      "python.linting.pylintEnabled": false,
      "python.linting.flake8Enabled": true,
      "python.linting.enabled": true,
      "python.pythonPath": "C:\\Users\\user\\envs\\webtools\\Scripts\\python.exe",
      "python.testing.pytestArgs": [
          "tests",
          "--self-contained-html",
          "--html=./reports/tmp_report.html" 
      ],
      "python.testing.unittestEnabled": false,
      "python.testing.nosetestsEnabled": false,
      "python.testing.pytestEnabled": true,
      "python.testing.unittestArgs": [
          "-v",
          "-s",
          "./tests",
          "-p",
          "test_*.py"
      ]
  }
  </code></pre>
  
  <p><code>config.json</code></p>
  
  <pre class="lang-json prettyprint-override"><code>{
      "browser": "chrome",
      "wait_time": 10
  }
  </code></pre>
  
  <p><code>conftest.py</code></p>
  
  <pre><code>import json
  import pytest
  from datetime import datetime
  import time
  import shutil
  import os
  
  
  from selenium import webdriver
  from selenium.webdriver import Chrome
  
  CONFIG_PATH = 'tests/config.json'
  DEFAULT_WAIT_TIME = 10
  SUPPORTED_BROWSERS = ['chrome', 'explorer']
  
  
  @pytest.fixture(scope='session')
  def config():
      # Read the JSON config file and returns it as a parsed dict
      with open(CONFIG_PATH) as config_file:
          data = json.load(config_file)
      return data
  
  
  @pytest.fixture(scope='session')
  def config_browser(config):
      # Validate and return the browser choice from the config data
      if 'browser' not in config:
          raise Exception('The config file does not contain "browser"')
      elif config['browser'] not in SUPPORTED_BROWSERS:
          raise Exception(f'"{config["browser"]}" is not a supported browser')
      return config['browser']
  
  
  @pytest.fixture(scope='session')
  def config_wait_time(config):
      # Validate and return the wait time from the config data
      return config['wait_time'] if 'wait_time' in config else DEFAULT_WAIT_TIME
  
  
  @pytest.fixture
  def browser(config_browser, config_wait_time):
      # Initialize WebDriver
      if config_browser == 'chrome':
          driver = webdriver.Chrome(r"./drivers/chromedriver.exe")
      elif config_browser == 'explorer':
          driver = webdriver.Ie(r"./drivers/IEDriverServer.exe")
      else:
          raise Exception(f'"{config_browser}" is not a supported browser')
  
      # Wait implicitly for elements to be ready before attempting interactions
      driver.implicitly_wait(config_wait_time)
  
      # Maximize window for test
      driver.maximize_window()
  
      # Return the driver object at the end of setup
      yield driver
  
      # For cleanup, quit the driver
      driver.quit()
  
  
  @pytest.fixture(scope='session')
  def cleanup_report():
      timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
      os.chdir("./reports")
      os.mkdir(timestamp)
  
      yield
  
      shutil.move("./tmp_report.html", "./%s/test_report.html" % timestamp)
  </code></pre>
  
  <p>In current situation the report is created as <code>tmp_report.html</code> in the reports folder, but I don't know how I can force running <code>cleanup_report()</code> after all tests are completed and <code>tmp_report.html</code> is present and complete in folder. For checking if complete I assume I'd have to verify if all html tags have their closing (or at least <code>&lt;html&gt;</code> one).</p>
  
  <p>Can somebody help me with that? If you need some further code portions I'll provide them as soon as possible.</p>
  
  <p>Thank you in advance!</p>