在SoapUI免费版中创建脚本库

时间:2016-02-11 05:56:14

标签: groovy soapui

我是SoapUI和groovy脚本的新手

我想创建一个可以在各种测试步骤中重用的groovy脚本的存储库

我正在使用SoapUI免费版,以下是我的SoapUI项目的结构

Project
|-TestSuite
| |-TestCase
|   |-TestSteps
|     |-LocalScript (Groovy TestStep to reuse library scripts)
|     |-OtherTestStep (Run TestCase TestStep)
|-ScriptLibrary
  |-TestCase
    |-TestSteps
      |-GroovyScriptStep1 (Contain a class for commonly used functions)
      |-GroovyScriptStep2 (Contain another class for other functions)

以下是我的能力:

我能够使用this post中提到的示例创建一个库。与帖子中的示例类似,我在库中的测试步骤(根据上述结构的GroovyScriptStep1)中的代码只是从外部文件读取一些值,并用于其他TestSuite的测试步骤(上述结构中的LocalScript步骤)。

问题在于:

现在我想创建一个新类并向其添加一个函数,它需要运行类的信息并简单地打印它。这里的不同之处在于,某些值是在测试运行中生成的,应该传递给库脚本以便处理/打印等。

为了使我的问题更清晰,以下是代码段

我将在这里使用一个简单的场景

示例目标:希望能够打印所有断言和状态(因为这将用于我想要创建库的所有测试用例)

不使用库时的代码相同(这可以作为groovy脚本步骤)

def obj = context.testCase.getTestStepByName("Request 1");
def assertions = obj.getAssertionList()

//Loop on assertions
assertions.each{
    log.info(it.name +  ' --> ' + it.status)

在Library TestSuite的测试用例步骤

中编写类似的代码
context.setProperty("Assertions", new Assertions());

class Assertions{

    def printAssertion(def someArgumentToGetAssertionlistforTestStepinAnotherTestSuite){


        def obj = ????

        def assertions = obj.getAssertionList()

        //Loop on assertions
        assertions.each{
            log.info(it.name +  ' --> ' + it.status)
        }
    }

}

我想要调用此方法的代码(LocalScript按照上述项目结构)

scripts = testRunner.testCase.testSuite.project.testSuites["ScriptLibrary"]; 
scripts.testCases["Scripts"].testSteps["Assertions"].run(testRunner, context);

context.Assertions.printAssertion(ArgumentRequired);

这只是一个例子,我想创建一些更常见的脚本库,在本地使用时使用上下文变量

请帮助我,如果需要更多信息/说明,请告诉我

4 个答案:

答案 0 :(得分:7)

我从你的问题中得到的是你想在SoapUI中创建一个可以重用的代码库。 我认为最好的方法是创建jar文件并将其部署在SoapUI的ext文件夹中

  1. 使用类创建一个新的groovy脚本文件(在文件命名中遵循java标准,即类名和文件名应该相同)
  2. 编译groovy代码文件
  3. 创建jar文件
  4. 在SoapUI_Home / bin / ext文件夹
  5. 部署jar文件
  6. 如果已经打开,则重新启动SoapUI
  7. 创建类的对象并在SoapUI项目中的任何位置使用方法
  8. 注意:如果要将项目迁移到其他计算机,请确保在项目中使用它们时也要迁移这些库

    示例细节:

    步骤1:创建一个具有类结构的新groovy脚本文件

    我。考虑包含名为printTestDetails的方法的类ScriptLibrary,如下面的代码所示:

    class ScriptLibrary  {
    
        def context
        def testRunner
        def log
    
        def printTestDetails(def PrintThisToo) {
            log.info 'Name of the test case is :'+testRunner.testCase.name
            log.info 'Name of the test suite is : '+testRunner.testCase.testSuite.name
            log.info PrintThisToo
        }
    }
    

    II。使用类名称保存文件,在这种情况下为ScriptLibrary.groovy

    第2步:编译代码

    我。打开命令提示符并触发以下命令(从保存.groovy文件的文件夹)

    编译代码:

    groovyc -d classes SimplePrint.groovy
    

    第3步:创建jar文件

    我。编译完代码后,我们可以创建jar 创建jar文件:

    jar cvf SimplePrint.jar -C classes .
    

    第4步:SoapUI_Home/bin/ext文件夹

    部署jar文件

    步骤5:如果已经打开,重新启动SoapUI

    第6步:创建类的对象并在SoapUI项目中的任何位置使用方法

    我。创建对象

    def scripts = new ScriptLibrary(context:context, log:log, testRunner:testRunner)
    

    II。调用方法

    scripts.printTestDetails(“This is my argument”)
    

    我希望这可以解决您的问题,这种方法可以让您在SoapUI中的任何位置自由使用代码,最重要的是解决您获取contextlog和{{外部代码中的1}}

    您也可以使用您选择的任何IDE来创建代码库并在其上工作以编译和创建jar。

    如果您有任何疑问或需要更多澄清,请告诉我

答案 1 :(得分:0)

这应该这样做

 context.setProperty("Assertions", new Assertions());


class Assertions{

    def printAssertion( tStep){

        def assertions = tStep.getAssertionList()

        //Loop on assertions
        assertions.each{
            log.info(it.name +  ' --> ' + it.status)
        }
    }

}

并像这样称呼它

    TestStep=testRunner.testCase.testSuite.getTestCaseByName("yourTestCase").getTestStepByName("stepName")

    context.Assertions.printAssertion(TestStep)

答案 2 :(得分:0)

Forsertion:

将此脚本放入存储库

TestStep=testRunner.testCase.testSuite.getTestCaseByName("addTestCase").getTestStepByName("add")

    //context.Assertions.printAssertion(TestStep)

scripts = testRunner.testCase.testSuite.project.testSuites["ScriptLibrary"];
scripts.testCases["Demo"].testSteps["TestAssertion"].run(testRunner, context);

context.Assertions.printAssertion(TestStep).each{
     log.info(it.name +  ' --> ' + it.status)
    }

return null

在SoapUI中使用此脚本:

LinearLayout l = (LinearLayout) findViewById(R.id.contacts_container);
for (int i = 0; i < array.length(); i++) {
    JSONObject object = array.getJSONObject(i);
    String username = object.getString("username");

    // add linearLayout text wrapper to main wrapper
    LinearLayout textWrapper = new LinearLayout(getApplicationContext());
    textWrapper.setOrientation(LinearLayout.VERTICAL);
    textWrapper.setBackgroundResource(R.drawable.orangeborder);
    textWrapper.setPadding(0, 0, 0, 0);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    textWrapper.setLayoutParams(params);
    textWrapper.setId(userId);
    textWrapper.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            // when this linearlayout is clicked
            // get the value of this child textview with an id of R.id.contactUsername
            // start new intent and pass the username

            //TextView tv_id = (TextView) ((View) v.getParent()).findViewById(R.id.contact);
            Intent intent = new Intent(ContactsActivity.this, ProfileActivity.class);
            intent.putExtra("username", "this username");
            startActivity(intent);
        }
    });
    l.addView(textWrapper);

    // add username TextView to textWrapper
    TextView usernameText = new TextView(getApplicationContext());
    lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    usernameText.setLayoutParams(lp);
    usernameText.setId(R.id.contactUsername);
    usernameText.setText(fullName);
    usernameText.setTextColor(Color.parseColor("#FFFFFF"));
    usernameText.setTextSize(0, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, getResources().getDisplayMetrics()));
    textWrapper.addView(usernameText);
}

答案 3 :(得分:0)

在项目级别,您可以编写“加载脚本”,并且可以将实用程序类实例保存在项目级别的上下文中:

context.setProperty("ScriptLibrary", new ScriptLibrary())

在您的测试服中(例如,在“安装脚本”中),您可以获取它:

testSuite.project.context.getProperty('ScriptLibrary')

或在您的测试用例中:

testCase.testSuite.project.context.getProperty('ScriptLibrary')

或在您的Groovy测试步骤中:

testRunner.testCase.testSuite.project.context.getProperty('ScriptLibrary')