Forum Discussion

krogold's avatar
krogold
Regular Contributor
6 years ago

Is it possible to overload default environment propgrammatically ?

Hello,

My project contain tests that can be executed in several environments. So far I've defined three environments pointing to different equipments that have different endpoints and credentials. These are the only difference between them.

I want to extend the use of my tests to other users that have their own equipment with a new endpoint and their own credentials. As I don't know how many of them will need to use my tests, I think of passing endpoint and credentials to the testRunner in order to configure the default environment via a groovy script before executing the tests.

Is it possible to do so ?

 

thanks for any help

 

Alexandre

  • Well,

    I did not manage to understand it enough to apply it to my case, so I ended up with a dynamic setting.

    I removed the use of Enviroment parameter in testRunner (now it uses default) and I provide as additional parameters the endpoint and credentials for my new environment.

    Then I parse my requests and when I hit the first one, if data is provided and the endpoint is different from the default one, I update values with the parameters provided.

    I noticed that changing it on one API impacts all the other APIs so I do it only once. As it is done with testRunner, modification is not persistent which perfectly suits my needs.

     

    Here's the procedure :

    in all my setup scripts I call configuration test case that I provide with the parameters and then I set the properties to the step

    def endpoint = context.expand( '${#TestCase#endpoint}' )
    def username = context.expand( '${#TestCase#username}' )
    def password = context.expand( '${#TestCase#password}' )
    
    ... <checking the completness of data>
    
    	endpoint = "http://"+endpoint
    	
    	// updating endpoint and credentials require to modify only once
    	found = false 
    	project.testSuites.find(){
    		ts ->
    		ts.getValue().getTestCaseList().find(){
    			tc ->
    			
    			tc.getTestStepList().find(){
    				step ->
    				//log.info step.config.type
    
    				if ((tc.name.contains("/m2m/fim/items"))&&( step.config.type == "restrequest"))
    				{
    					current_endpoint = step.getPropertyValue("endpoint")
    	
    					// update environment if it is not the one expected 
    					if (current_endpoint != endpoint)
    					{
    						step.setPropertyValue("endpoint", endpoint)
    	
    						if( (username == "")||(password == ""))
    						{
    							msg = "the current Username and/or Password have not been set for environment $endpoint"
    							testRunner.fail(msg)
    							log.error msg
    						}
    						else
    						{
    							step.setPropertyValue("Username", username)
    							step.setPropertyValue("Password", password)
    							log.info "updated environment to $endpoint"
    						}
    					}
    					found = true
    				}
    			}
    		}
    	}
    

    Thanks for the help nmrao

     

     

     

      • krogold's avatar
        krogold
        Regular Contributor

        Well,

        I did not manage to understand it enough to apply it to my case, so I ended up with a dynamic setting.

        I removed the use of Enviroment parameter in testRunner (now it uses default) and I provide as additional parameters the endpoint and credentials for my new environment.

        Then I parse my requests and when I hit the first one, if data is provided and the endpoint is different from the default one, I update values with the parameters provided.

        I noticed that changing it on one API impacts all the other APIs so I do it only once. As it is done with testRunner, modification is not persistent which perfectly suits my needs.

         

        Here's the procedure :

        in all my setup scripts I call configuration test case that I provide with the parameters and then I set the properties to the step

        def endpoint = context.expand( '${#TestCase#endpoint}' )
        def username = context.expand( '${#TestCase#username}' )
        def password = context.expand( '${#TestCase#password}' )
        
        ... <checking the completness of data>
        
        	endpoint = "http://"+endpoint
        	
        	// updating endpoint and credentials require to modify only once
        	found = false 
        	project.testSuites.find(){
        		ts ->
        		ts.getValue().getTestCaseList().find(){
        			tc ->
        			
        			tc.getTestStepList().find(){
        				step ->
        				//log.info step.config.type
        
        				if ((tc.name.contains("/m2m/fim/items"))&&( step.config.type == "restrequest"))
        				{
        					current_endpoint = step.getPropertyValue("endpoint")
        	
        					// update environment if it is not the one expected 
        					if (current_endpoint != endpoint)
        					{
        						step.setPropertyValue("endpoint", endpoint)
        	
        						if( (username == "")||(password == ""))
        						{
        							msg = "the current Username and/or Password have not been set for environment $endpoint"
        							testRunner.fail(msg)
        							log.error msg
        						}
        						else
        						{
        							step.setPropertyValue("Username", username)
        							step.setPropertyValue("Password", password)
        							log.info "updated environment to $endpoint"
        						}
        					}
        					found = true
        				}
        			}
        		}
        	}
        

        Thanks for the help nmrao