Package pytest_auto :: Module yp_auto |
[hide private]
[frames] | no frames]

# Source Code for Module pytest_auto.yp_auto

      1  """
      2  Pytest plugin with commonly used fixtures
      3  """
      4  import os
      5  import pytest
      6  from ConfigParser import ConfigParser, NoSectionError
      7  from tlib.base import LogHelper
      8  from tlib.base import TLibHelper
      9
     10
     11  # noinspection PyShadowingNames
     12  @pytest.fixture(scope='class')
     13 -def tlib_logger(request):
     14      """
     15      Returns logger with name tlib.\n
     16      This logger should only be used by TLib modules. To log from a test or test module use test_logger\n
     17      Logger will get flushed at the end to ensure data is not lost if tests exit abnormally
     18      """
     19      return LogHelper.get_tlib_logger(request)
     20
     21
     22  # noinspection PyShadowingNames
     23  @pytest.fixture(scope='class')
     24 -def adb_logger(request):
     25      """
     26      Returns logger with name adb\n
     27      This logger should only be used by TLib modules interacting with ADB.\n
     28      To log from a test or test module use test_logger\n
     29      Logger will get flushed at the end to ensure data is not lost if tests exit abnormally
     30      """
     31      return LogHelper.get_adb_logger(request)
     32
     33
     34  # noinspection PyShadowingNames
     35  @pytest.fixture(scope='class')
     36 -def test_logger(request):
     37      """
     38      Returns logger that can be used to log test information\n
     39      Logger will get flushed at the end to ensure data is not lost if tests exit abnormally
     40      """
     41      return LogHelper.get_test_logger(request)
     42
     43
     44 -def pytest_addoption(parser):
     45      """
     46      Options supported by pytest selenium plug-in
     47      """
     48      group = parser.getgroup("tlib", "General command line options provided by TLib")
     49
     50      group.addoption(
     51          "--environment",
     52          action="store",
     53          dest="environment",
     54          help="environment used to run tests")
     55
     56      group.addoption(
     57          "--base_url",
     58          action="store",
     59          dest="base_url",
     60          help="base url of the server used for testing. This can be used for web services as well as web sites")
     61
     62      group.addoption(
     63          "--apk_path",
     64          action="store",
     65          dest="apk_path",
     66          default=None,
     67          help="mobile app path of the mobile native app used for testing")
     68
     69
     70  #noinspection PyUnresolvedReferences
     71  #noinspection PyShadowingNames
     72  @pytest.fixture(scope="class")
     73 -def base_url(request, tlib_logger):
     74      """
     75      Returns value of --base_url command line parameter
     76      """
     77      return TLibHelper.get_base_url(request, tlib_logger)
     78
     79
     80  #noinspection PyUnresolvedReferences
     81  #noinspection PyShadowingNames
     82  @pytest.fixture(scope="class")
     83 -def environment_config(request, tlib_logger):
     84      """
     85      Returns configuration for the environment specified in the --environment command line parameter
     86      This function will try to find a file config\config.ini on the current folder or on the parents,
     87      up to two levels up.
     88
     89      This fixture returns a dict like this:
     90      {
     91          'mysql_host': 'db.ci.qa.ypg.com',
     92          'mysql_user': 'ci',
     93          'mysql_passwd': '21345'
     94      }
     95
     96      @rtype dict
     97      """
     98      environment = request.config.getoption("environment")
     99
    100      if environment is None:
    101          #noinspection PyUnresolvedReferences
    102          tlib_logger.error("Parameter --environment was not specified, test can't run")
    103          raise RuntimeError("Parameter --environment was not specified, test can't run")
    104          return None
    105      else:
    106          #Go up to three levels to find config folder. Search starts in current directory
    107          curr_folder = os.path.dirname(request.fspath.strpath)
    108          config_file = None
    109          for i in range(1, 4):
    110              #Go up one level
    111              curr_folder = os.path.abspath(os.path.join(curr_folder, os.pardir))
    112
    113              #Check if there is a 'config/config.ini' file
    114              f = os.path.join(curr_folder, 'config', 'config.ini')
    115              if os.path.exists(f):
    116                  config_file = f
    117                  break
    118
    119          if config_file is None:
    120              raise IOError("Couldn't find folder 'logs'. Create it under your project folder and try again")
    121
    122          prj_config = ConfigParser()
    123          prj_config.read(config_file)
    124
    125          try:
    126              cfg = prj_config.items("env_" + environment)
    127              return dict(cfg)
    128          except NoSectionError:
    129              tlib_logger.error("There is no section 'env_%s' in config file" % environment)
    130              raise RuntimeError("There is no section 'env_%s' in config file" % environment)
    131