You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

How to Develop Python Scripts for Test Execution

Pre Requisites

  1. Python 3.6 or above should be installed in the machine
  2. Jpype should be added as the dependency in Python
    1. Install JpyPe
      pip install jpype1

For creating a Test case in python the below criteria should be followed

  1. When creating the python test case multiple test cases can be written in a single python script under different functions with parameter as DUT.
  2. All these function should be annotated with "@TestCaseId('AUTOMATION_ID')" with automation id as the parameter.
  3. Python Wrapper scripts and other Automatics Python dependency scripts like Annotation Python scripts should be available.
  4. Automatics Utils and Core API's can be invoked from the Python test scripts as follows.
    1. Sample code for an Automatics Test Case Written in Python and which use Utils and Core APIs for different operations

      Sample Automatics Python Script
      from jpype.types import *
      
      # Adding BroadBandCommonUtils from RDKB Utils projects
      from com.automatics.rdkb.utils import BroadBandCommonUtils
      
      from src.annotation.PythonScriptAnnotation import TestCaseId
      from src.com.automatics import AutomaticsTapApi
      from src.logging import AutomaticsPyLogger
      
      logger = AutomaticsPyLogger.setup_logging(__name__)
      
      @TestCaseId('TC-RDKB-FS-LAYOUT-001')
      def nvramFileSystemLayout(dut):
          testCaseId = "TC-RDKB-FS-LAYOUT-001";
          tapEnv = AutomaticsTapApi.getInstance()
          stepNum = "s1";
          errorMessage = "nvram is not properly mounted after code download";
          status = JBoolean(False);
          logger.info("#######################################################################################");
          logger.info("STARTING TEST CASE: TC-RDKB-FS-LAYOUT-1001");
          logger.info("TEST DESCRIPTION: nvram file system layout validation");
      
          logger.info("TEST STEPS : ");
          logger.info("1. Check whether nvram is properly mounted and it has read- write permission after code download");
          logger.info("2. Verify the file access by creating a dummy file in nvram");
      
          logger.info("#######################################################################################");
      
          try:
              logger.info("**********************************************************************************");
      
              logger.info("**********************************************************************************");
              logger.info(
                  "STEP 1: DESCRIPTION : Check whether nvram is properly mounted and it has read- write permission after code download");
              logger.info(
                  "STEP 1: ACTION : \"check mounted status using mount command(mount | grep -w \"nvram\") and verify read-write permission in nvram\"");
              logger.info(
                  "STEP 1: EXPECTED : nvram should be properly mounted and should have read-write permission(mtd:data on /nvram type jffs2 (rw,relatime)");
              logger.info("**********************************************************************************");
      
              response = tapEnv.executeCommandUsingSsh(dut, JString("mount | grep -w nvram"));
              logger.info(response)
          except Exception as e:
              logger.info(str(e))
          finally:
              logger.info("################### STARTING POST-CONFIGURATIONS ###################");
              logger.info("POST-CONDITION STEPS");
              logger.info("POST-CONDITION : DESCRIPTION : Remove dummy file");
              logger.info("POST-CONDITION : ACTION : Remove the dummy file permanently (rm -rf  /nvram/dummytest.sh)");
              logger.info("POST-CONDITION : EXPECTED : Created dummy file should be removed");
      
              status = BroadBandCommonUtils.removeFileAndVerifyStatus(tapEnv, dut, JString("/nvram/dummytest.sh"));
      
              if status:
                  logger.info("POST-CONDITION : ACTUAL : Post condition executed successfully");
              else:
                  logger.info("POST-CONDITION : ACTUAL : Post condition failed");
      
              logger.info("POST-CONFIGURATIONS : FINAL STATUS - " + str(status));
              tapEnv.updateExecutionStatus(dut, testCaseId, stepNum, status, errorMessage, JBoolean(False));
              logger.info("################### COMPLETED POST-CONFIGURATIONS ###################");
      
      



For identifying a particular Test case is python a new field will be introduced in managed scripts. This new field will be used to mark particular test case as Python or not. The below are the stepwise information on how a particular test case will executed

  1. At first Python test case should be added in automatics, for that when adding a new test case the new test case identification field should be selected as Python and saved in Automatics.
  2. Once a Test case is triggered, Automatics will first check whether the test case is Python or not using the value in the new identification field.
  3. Once Jenkins job for Python script execution is triggered from automatics, it will pull the latest Python code from the configured repo along with the latest automatics core and it will invoke the corresponding Python script using JEP based on the Automation ID of the test case.



 Enable Python scripts to use Automatics Core, Test Utils & Props

For unlocking/enabling the access of Automatics Java API's to python scripts, JPype framework can be used. For accessing the Java API's from python test scripts, a new set of Python scripts which contains all the required API's should be developed which will make use of the JPype framework to instantiate and invoke the Java classes and method in Automatics Core and Test Utils. For example, A python script similar to AutomaticsTapApi class can be created to get the Automatics properties configuration and other API's of Automatics core. This python script will in-turn call the AutomaticsTapApi Java class present in the Automatics core project using JPype to enable all the required functions. The below python script will invoke AutomaticsTapApi java class inside automatics-core-2.9.0.jar to get the current execution mode if available
AutomaticsTapAPI.py

# Boiler plate stuff to start the module
import jpype
import jpype.imports
from jpype.types import *
 
# Launch the JVM
jpype.startJVM(classpath=['jars/automatics-core-2.9.0.jar'])
 
# import the Java modules
from com.automatics.tap import AutomaticsTapApi
 
tapApi = AutomaticsTapApi.getInstance()

  • No labels