使用soapui-pro-maven-plugin

时间:2016-05-05 16:16:14

标签: java maven automated-tests soapui

可以在SOAP UI中为测试用例指定标记,如下所示:

SOAP UI Specify a Tag

我正在使用SOAP UI Maven插件在不同的环境中执行功能测试套件,通过在调用中指定标记来排除某些测试用例会很有用。

看起来Maven插件没有配置参数来指定标签(因此只能执行跨越不同测试套件的测试的子集):

https://www.soapui.org/test-automation/maven/maven-2-x.html

但是,可以通过GUI或命令行运行时指定标记:

http://readyapi.smartbear.com/features/automation/testrunner/cli

从上面的链接可以看出,可以指定使用-T开关标记的测试。

这只是Maven插件的限制吗?

是否可以通过在Groovy启动脚本执行期间读取环境变量并禁用没有指定标记的测试用例来模拟指定标记?

Maven调用如下:

mvn test -Dmyenv="dev" com.smartbear.soapui:soapui-pro-maven-plugin:5.2.1:test

pom.xml如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>testing</groupId>
<artifactId>testing</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<prerequisites>
    <maven>3.0.5</maven>
</prerequisites>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<pluginRepositories>
    <pluginRepository>
        <id>SmartBearPluginRepository</id>
        <url>http://www.soapui.org/repository/maven2/</url>
    </pluginRepository>
    <pluginRepository>
        <id>mvnPluginRepository</id>
        <url>http://mirrors.ibiblio.org/pub/mirrors/maven/mule/dependencies/maven2/</url>
    </pluginRepository>
    <pluginRepository>
        <id>codehausPluginRepository</id>
        <url>https://nexus.codehaus.org/content/groups/snapshots-group/org/codehaus/mojo/</url>
    </pluginRepository>
</pluginRepositories>
<build>
    <plugins>
        <plugin>
            <groupId>com.smartbear.soapui</groupId>
            <artifactId>soapui-pro-maven-plugin</artifactId>
            <version>5.2.1</version>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.6</version>
                </dependency>
                <dependency>
                    <groupId>postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>9.1-901-1.jdbc4</version>
                </dependency>
                <dependency>
                    <groupId>org.reflections</groupId>
                    <artifactId>reflections-maven</artifactId>
                    <version>0.9.9-RC1</version>
                </dependency>
            </dependencies>
            <configuration>
                <projectFile>${basedir}/my-project</projectFile>
                <outputFolder>${basedir}/surefire-reports</outputFolder>
                <printReport>true</printReport>
                <junitReport>true</junitReport>
                <exportAll>true</exportAll>
                <reportFormat>HTML</reportFormat>
                <testFailIgnore>true</testFailIgnore>
                <coverage>true</coverage>
                <environment>${myenv}</environment>
            </configuration>
            <executions>
                <execution>
                    <phase>test</phase>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.10</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

2 个答案:

答案 0 :(得分:1)

如果我对此有任何错误,或者有更好的方法,请更正我,因为我对使用SOAP UI不熟悉。如果你给出一个明显更好的答案,我会接受你的。我真的希望Smartbear支持在Maven插件中指定标签的方法。

我已经确定它是not possible to specify a tag via the Maven plugin并且SOAP UI的服务器版本花费了large amount of money,因此在我的情况下使用指定a的命令行方法是不可能的标签

我想通过将我想要包含/排除环境的所有测试移动到多个测试套件来模拟测试标签/类别。不幸的是,似乎只能运行一个测试套件(通过指定一个&#34; testSuite&#34;参数)或所有测试套件(通过离开&#34; testSuite&#34;空白)。

我认为我可以使用Groovy脚本为测试用例或套件提取标签并使用它来确定是否应该运行,但据我所知,它是无法获取测试用例或testSuite的标记信息(object model API documentation)。

我决定用自定义属性(testingOnly)标记要排除的测试套件,并在项目级别禁用特定环境(Dev)&#34;安装脚本&#34;:

// Reenable all test suites after all tests have run

for (testSuite in project.testSuiteList) {
    log.info "[Project TearDown Script] Reenabling Test Suite: ${testSuite.name}";
    testSuite.setDisabled(false);
}

套件在项目级别重新启用&#34; TearDown脚本&#34;:

{{1}}

答案 1 :(得分:0)

您是否要为Surefire插件指定环境变量?如果是这样,这应该有效:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine>-Dmyenv=dev</argLine>
    </configuration>
</plugin>