SoapUI + Groovy 接口自动化

假设测试用例的实现是由  :  调用不相同的接口(service),组合形式不一样可以形成不同的测试场景

比如下列用例的设计:

需要测试的API 设计的用例有以下两个范围:

1. 需要在不同的前提条件下,调用相同的被测API并且参数设置一样命令而返回不同的结果,并且进行结果验证 (该范围重点是前提条件不一致)

2.在相同的前提下,调用相同的被测API并且参数设置不一样,返回结果不同进行结果验证(改范围重点是验证被测API的参数设置)

范围2是我们目前常用的API测试设计范围,在此不以讨论;我们着重在范围1.


假设设置不同测试场景的前提需要调用的接口(service)有: Service1 , Service2 , Service3

被验证的API: API 

如下图:

SoapUI + Groovy 接口自动化_第1张图片


TestSuite包含以下两个case:PublicCase, TestCase

把设置前提条件的接口放在PublicCase里面

把需要验证的API房子TestCase1里面


note:

1. 在PublicCase里面针对需要对不同service的不同操作进行用例编写,如上图例子:调用的操作为create/delete,并且有对应操作后的get操作(由于create和delete后需要对数据进行校验;因此例子中有两个get并且分别加上自己的校验信息)

2.在项目开始时可用提前把PublicCase的步骤包含校验全部写完


note:

这个TestCase的重点在于TestSenarios groovy的脚本编写,由于普通的soapUI case是顺序执行,我们在此利用groovy控制case的执行顺序

一下是Test Scenario里面的脚本编写:

/*
 * This below scenarios are for API test
 */
//use below to login public data
def testproject = testRunner.testCase.testSuite.project
def testcase = testproject.testSuites['TestSuite'].testCases['PublicCase']

testRunner.testCase.setPropertyValue( "count", "0")
def str_index  = testRunner.testCase.getPropertyValue("count")
index = Integer.parseInt(str_index)
testRunner.runTestStepByName("Login")	
testRunner.runTestStepByName("Property Transfer")
while( index < 4 ){
	log.info("this is the case: " + index + " running............")
	switch (index ){	
			
		case (0) :
			//call the tested scenario1
			testRunner.runTestStepByName("CreateAPI1-Scenario1")	
			break										
		case (1):
			//call public data
			testcase.testSteps["CreateService1"].run(testRunner, context)
			testcase.testSteps["GetService1"].run(testRunner, context)
			//call the tested scenario2
	        	testRunner.runTestStepByName("CreateAPI1-Scenario2")    	         		
	         break	
		case (2):
			//call public data
			testcase.testSteps["GetService2"].run(testRunner, context)
			testcase.testSteps["GetService2"].run(testRunner, context)  
			//call the tested scenario3
	       	testRunner.runTestStepByName("CreateAPI1-Scenario3") 		       	
	       	break	     	     	  
	     case (3):
	     	//call public data
			testcase.testSteps["GetService3"].run(testRunner, context)
			testcase.testSteps["GetService3"].run(testRunner, context)
      		//call the tested scenario4
	       	testRunner.runTestStepByName("CreateAPI1-Scenario4")    	       		
	       	break	             	
	      default: 
	      	println "now no case running............"
	}
	index = index +1
	//sleep(10000)
}

//use this below can be go to Logout directly
testRunner.runTestStepByName("DeleteAPI1")
testRunner.gotoStepByName("Logout")

//use below to clear public data
testcase.testSteps["DeleteService1"].run(testRunner, context)
testcase.testSteps["DeleteService2"].run(testRunner, context)
testcase.testSteps["DeleteService3"].run(testRunner, context)
testcase.testSteps["GetService1_twice"].run(testRunner, context)
testcase.testSteps["GetService2_twice"].run(testRunner, context)
testcase.testSteps["GetService3_twice"].run(testRunner, context)
testcase.testSteps["Logout"].run(testRunner, context)


脚本中主要设计的用例为:

case0: 在没有任何前提条件下直接调用被测API

case1:前提条件是数据库中已经有Service1的数据(数据的需求按照需求文档来)

case2:前提条件是数据库中已经有Service1和Service2的数据(数据的需求按照需求文档来)

case3:前提条件是数据库中已经有Service1和Service2 和S ervice3的数据(数据的需求按照需求文档来)


执行完之后对被测API的数据进行删除

testRunner.runTestStepByName("DeleteAPI1")
执行完之后对前提条件准备的所有数据进行删除
testcase.testSteps["DeleteService1"].run(testRunner, context)
testcase.testSteps["DeleteService2"].run(testRunner, context)
testcase.testSteps["DeleteService3"].run(testRunner, context)
testcase.testSteps["GetService1_twice"].run(testRunner, context)
testcase.testSteps["GetService2_twice"].run(testRunner, context)
testcase.testSteps["GetService3_twice"].run(testRunner, context)


note:以上例子是以前提很简单的组合,如果有更为复杂的组合可以自己根据需求增加PublicCase.
用例设计设计思想:
对于步骤话的测试用例设计,如果可以把每个步骤分解开来进行不同的组合可以形成不同的用例,把步骤全部放在公共case下可以提高代码复用度并且对于用例设计思想一目了然.
由于目前的项目中恰好有类似的需求,自己进行了小小研究,发现SoapUI也可以很动态构建自动化用例(如有不正确之处,望请指正,谢谢~)


调用另一个TestSuite中的teststep脚本如下:
def testproject = testRunner.testCase.testSuite.project
def testcase = testproject.testSuites['PublicCase'].testCases['TestCase1']
testcase.testSteps["CreateService1"].run(testRunner, context)


调用本TestSuite中的TestStep脚本如下:
testRunner.runTestStepByName("Login")
testRunner.runTestStepByName("CreateAPI1-Scenario2")

你可能感兴趣的:(脚本记录,groovy,soapUI)