如何从 Java 运行 soapUI 测试

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22908086/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 18:51:42  来源:igfitidea点击:

How to run soapUI tests from Java

javasoapui

提问by user3505967

I need to run SoapUI test by Java. Could you please advise me useful links? And I would be happy if you can show me how to load/run tests (code examples).

我需要通过 Java 运行 SoapUI 测试。你能告诉我有用的链接吗?如果您能告诉我如何加载/运行测试(代码示例),我会很高兴。

I also found only one link which can be applicable for my project - http://pritikaur23.wordpress.com/2013/06/16/saving-a-soapui-project-and-sending-requests-using-soapui-api/.

我还发现只有一个链接适用于我的项目 - http://pritikaur23.wordpress.com/2013/06/16/saving-a-soapui-project-and-sending-requests-using-soapui-api/.

But when I try to do the same I faced below errors -

但是当我尝试做同样的事情时,我遇到了以下错误-

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(Ljava/lang/ClassLoader;Ljava/lang/String;)Lorg/apache/xmlbeans/SchemaTypeSystem;

It's weird because i added all needed jar files. Also I even tried different versions of a xmlbeans.

这很奇怪,因为我添加了所有需要的 jar 文件。此外,我什至尝试了不同版本的 xmlbeans。

Thank in advance.

预先感谢。

采纳答案by user3505967

I found the way how to run soapUI test by code.

我找到了如何通过代码运行soapUI测试的方法。



The small explanation:

小解释:

Firstly - I created a maven project and added dependencies to pom.xml instead of a including .jar directly. For the SoapUI tests was needed to add following dependencies:

首先 - 我创建了一个 maven 项目并将依赖项添加到 pom.xml 而不是直接包含 .jar。对于 SoapUI 测试,需要添加以下依赖项:

    <dependency>
        <groupId>com.github.redfish4ktc.soapui</groupId>
        <artifactId>maven-soapui-extension-plugin</artifactId>
        <version>4.6.4.0</version>
    </dependency>

Secondly - I also added a few dependencies because I got an exceptions

其次 - 我还添加了一些依赖项,因为我有一个例外

java.lang.NoSuchMethodError

The needed dependencies:

所需的依赖项:

    <dependency>
        <groupId>net.java.dev.jgoodies</groupId>
        <artifactId>looks</artifactId>
        <version>2.1.4</version>
    </dependency>
    <dependency>
        <groupId>net.sf.squirrel-sql.thirdparty-non-maven</groupId>
        <artifactId>com-fifesoft-rsyntaxtextarea</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.karaf.eik.plugins</groupId>
        <artifactId>org.apache.commons.collections</artifactId>
        <version>3.2.1</version>
    </dependency>


After preparing of the environment I was able to write a code. I show you an example of a code what able to run all test suites and test cases in a specified soapUI project by Java.

准备好环境后,我就可以编写代码了。我向您展示了一个代码示例,该示例能够通过 Java 在指定的soapUI 项目中运行所有测试套件和测试用例。

    // method for running all Test Suites and test cases in the project
public static void getTestSuite() throws Exception {

    String suiteName = "";
    String reportStr = "";

    // variables for getting duration
    long startTime = 0;
    long duration = 0;

    TestRunner runner = null;

    List<TestSuite> suiteList = new ArrayList<TestSuite>();
    List<TestCase> caseList = new ArrayList<TestCase>();

    SoapUI.setSoapUICore(new StandaloneSoapUICore(true));

    // specified soapUI project
    WsdlProject project = new WsdlProject("your-soapui-project.xml");

    // get a list of all test suites on the project
    suiteList = project.getTestSuiteList();

    // you can use for each loop
    for(int i = 0; i < suiteList.size(); i++){

        // get name of the "i" element in the list of a test suites
        suiteName = suiteList.get(i).getName();
        reportStr = reportStr + "\nTest Suite: " + suiteName;

        // get a list of all test cases on the "i"-test suite
        caseList = suiteList.get(i).getTestCaseList();


        for(int k = 0; k < caseList.size(); k++){

            startTime = System.currentTimeMillis();

            // run "k"-test case in the "i"-test suite
            runner = project.getTestSuiteByName(suiteName).getTestCaseByName(caseList.get(k).getName()).run(new PropertiesMap(), false);

            duration = System.currentTimeMillis() - startTime;

            reportStr = reportStr + "\n\tTestCase: " + caseList.get(k).getName() + "\tStatus: " + runner.getStatus() + "\tReason: " + runner.getReason() + "\tDuration: " + duration;
        }

    }

    // string of the results
    System.out.println(reportStr);
}

Output:

输出:

Test Suite: TS_ONE
    TestCase: TC_ONE    Status: FAILED  Reason: Cancelling due to failed test step  Duration: 1549
    TestCase: TC_TWO    Status: FINISHED    Reason: {}  Duration: 1277
    ...
    TestCase: TC_N  Status: FAILED  Reason: Cancelling due to failed test step  Duration: 1282
Test Suite: TS_TWO
    TestCase: TC_BlaBla Status: FINSHED Reason: {}  Duration: 1280
    ...


I hope the information above will help someone.

我希望以上信息会对某人有所帮助。

回答by HeLL

Using a continuous integration server (eg Hudson is perfect for this) it is possible to run unit tests automatically JUnit format. Below is an example of integrating SoapUI project in a JUnit test.

使用持续集成服务器(例如 Hudson 非常适合),可以自动运行 JUnit 格式的单元测试。下面是在 JUnit 测试中集成 SoapUI 项目的示例。

public void testRunner() throws Exception 
{
    SoapUITestCaseRunner runner = new SoapUITestCaseRunner(); 
    runner.setProjectFile( "src/dist/sample-soapui-project.xml" );
    runner.run(); 
}

more information here.

更多信息在这里

回答by Bit-Man

Currentyl only SoapUI dependency is needed for @HeLL provided code

@HeLL 提供的代码只需要 Currentyl 的 SoapUI 依赖项

    <dependency>
        <groupId>com.smartbear.soapui</groupId>
        <artifactId>soapui</artifactId>
        <version>5.1.3</version>
        <scope>test</scope>
    </dependency>