是否可以从Groovy Script测试步骤在其他测试用例中运行特定的测试步骤

时间:2014-02-26 16:30:19

标签: soapui

是否可以从Groovy Script测试步骤在其他测试用例中运行特定的测试步骤?

无法弄清楚如何做到这一点

谢谢

5 个答案:

答案 0 :(得分:18)

是的,这是可能的。从groovy步骤中,您可以访问testRunner,您可以使用它来访问soapUI中的所有其他内容,并在另一个测试用例中运行测试步骤。

所以,这段代码来自我的头脑......

def tCase = testRunner.testCase.testSuite.project.testSuites["Name of the other test suite"].testCases["name of test case you want to access"]

def tCase = testRunner.testCase.testSuite.testCases["Name of test cases"]

def tStep = tCase.testSteps["test step you want to run"]

tStep.run(testRunner, context)

查看此link可能会有所帮助......

答案 1 :(得分:5)

对于我们这些像我一样,正在为当前版本的Ready!API寻找代码的人

    def testStep = testRunner.testCase.testSuite.project.getTestSuiteByName("[OTHER_TEST_SUITE_NAME]").getTestCaseByName("[OTHER_TEST_CASE_NAME]").getTestStepByName("[OTHER_TEST_STEP_NAME]")

    testStep.run(testRunner, context)

答案 2 :(得分:2)

我意识到我在聚会上有点晚了,但我想我会通过发布解决类似问题的解决方案来扩展这个主题。希望这可以帮助将来的某个人。解决方案可以扩展到涵盖两个以上的测试步骤,测试用例和/或项目。这也是我在这里发表的第一篇文章,所以请原谅我任何noob错误。也不是最漂亮的解决方案。它可能有一些冗余变量。所有代码块都包含整个解决方案。

问题:我想从两个不同的测试用例中检索两个不同测试步骤的响应,在两个差异项目中但是在同一个工作区中。得到它了?太棒了!

<强> SOLUTION:

第一个项目的变量

String firstProjName = "Generic Project One" 
String firstProjTestSuiteName= "Generic Test Suite Name One"
String firstProjTestCaseName = "Generic Test Case Name One"
String firstProjTestStepName= "Generic Test Step Name One"

第二个项目的变量

String secondProjName= "Generic Project Two"
String secondProjTestSuiteName = "Generic Test Suite Name Two"
String secondProjTestCaseName= "Generic Test Case Name Two"
String secondProjTestStepName= "Generic Test Step Name Two"

访问通用测试步骤名称

def firstProj= null
def workspace = testRunner.testCase.testSuite.project.getWorkspace();

firstProj= workspace.getProjectByName(firstProjName)

def firstTestCase = firstProj.testSuites[firstProjTestSuiteName].testCases[firstProjTestCaseName ]

def firstTestStep = firstTestCase.getTestStepByName(firstProjTestStepName)

运行通用测试步骤名称一

def runner = null
runner = firstTestStep.run(testRunner, context)

def firstTestStepResp = runner.getResponseContent()
runner = null

打印对日志的回复

log.info(firstTestStepResp)

第二个测试步骤

def secondProj= null

secondProj= workspace.getProjectByName(secondProjName)

def secondTestCase = secondProj.testSuites[secondProjTestSuiteName ].testCases[secondProjTestCaseName]

def secondTestStep = secondTestCase.getTestStepByName(secondProjTestStepName)

runner = secondTestStep.run(testRunner, context)

def secondTestStepResp = runner.getResponseContent()
log.info(secondTestStepResp)

我们现在可以将两个响应作为字符串访问,我们可以随意使用它们。比较,标记等。还有

getResponseContentAsXml()

如果需要响应为xml而不是字符串。

答案 3 :(得分:0)

//更好的方式


  • //项目是一个测试套件
  • //如果您有用于生成数据的常规脚本,更好的方法是 将它们保存在测试用例的属性中
  • //请对此进行评论,并提供一些有关如何使其更完善的线索 简单,简单或复杂
  • //不知道跑步者的数组有多少容量-当我 尝试了至少100个测试步骤(常规步骤)的大量测试用例 通过错误标志通知我有关小型阵列的信息(如果它不在某些阵列中) groovy脚本日志的设置
// run Activation_TollContract Test Case
def testSuite = testRunner.testCase.testSuite.project.getTestSuiteByName("Write_name_of_test_suite_here");                  //get test suite by name
//log.info "testSuite " + context.getTestCase().getTestStepAt(n).name
def testCase = testSuite.getTestCaseByName("Write_name_of_test_case_here");                                                                       //get test case by name
//log.info "testCase: " + testCase  
def totalTestSteps = testCase.getTestSteps().size();                                                                                                    //get int total test steps for the given test case
//log.info "totalTestSteps " + totalTestSteps
def PROJECT = testRunner.testCase.testSuite.project.getTestSuiteByName("Write_name_of_test_suite_here")
for(n in (0..totalTestSteps - 1))
{    
    def testStepName = testCase.getTestStepAt(n).name;
    if(n>=5){
            if (PROJECT.getTestCaseByName("Write_name_of_test_case_here").getTestStepByName(testStepName).disabled != true){
           log.info "testStepName: " + n + ": " + testStepName;
           def testStep = testSuite.getTestCaseByName("Write_name_of_test_case_here").getTestStepByName(testStepName);              //get nameMap of step
        runner = testStep.run(testRunner, context);
        log.info ("testStep   >>> 1   " + runner.getStatus().toString());
            }
    }
}

答案 4 :(得分:0)

您可以使用以下代码:

def testStep = testRunner.testCase.testSuite.project.getTestSuiteByName("[OTHER_TEST_SUITE_NAME]").getTestCaseByName("[OTHER_TEST_CASE_NAME]").getTestStepByName("[OTHER_TEST_STEP_NAME]")

testStep.run(testRunner, context)

详细的演示请看: https://coderscamp.wixsite.com/codeit/post/how-to-run-a-test-step-from-groovy-script