如何将soapUI与Jenkins集成?

Posted

技术标签:

【中文标题】如何将soapUI与Jenkins集成?【英文标题】:How to integrate soapUI with Jenkins? 【发布时间】:2011-10-02 15:47:32 【问题描述】:

有人知道将soapUI 测试添加到我的CI 构建的好方法吗?

【问题讨论】:

【参考方案1】:

soapUI 通过 Maven 或 Ant 提供测试自动化。 Maven 集成描述为HERE。

我在一个月前尝试过,但 eviware 存储库出现了一些奇怪的问题......因此我现在通过 Ant 运行我的测试。你要做的就是调用soapUI bin目录下的testrunner.bat(或testrunner.sh)脚本。您可以找到可用的参数HERE。

您必须在 Hudson 构建服务器上安装soapUI。然后,您只需创建一个通过 Ant 构建的新作业。

样本build.xml:

<project name="IntegrationTest" default="soapui-tests" basedir=".">
    <description>Runs the soapUI integration tests</description>
    <property file="build.properties"/>

    <target name="checkos">
        <condition property="testrunner.cmd" value="$soapUI.home/bin/testrunner.bat">
                <os family="windows" />
        </condition>
        <condition property="testrunner.cmd" value="$soapUI.home/bin/testrunner.sh">
                <os family="unix" />
        </condition>
    </target>

    <target name="soapui-tests" depends="checkos">
        <exec executable="$testrunner.cmd"
              failonerror="yes"
              failifexecutionfails="yes"
        >    
            <arg value="-e $service.endpoint"/>
            <arg value="-P dbUrl=$db.Url"/>
            <arg value="-rajf"/>
            <arg path="$report.dir"/>
            <arg path="$soapui.project.folder"/>
        </exec>
    </target>
</project>

【讨论】:

我猜应该是github.com/djangofan/soapui-maven-template Jenkins如何将值注入到build.xml中的变量$endpoint?谢谢。【参考方案2】:

其实很简单……

使用以下(示例)创建一个 git 存储库:

├── pom.xml
├── RestAPI-negativeTestSuite.xml
└── RestAPI-positiveTestSuite.xml

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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <name>Test soapui</name>
    <groupId>tdrury</groupId>
    <artifactId>com.example.soapuitests</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <description>blah blah</description>
    <build>
        <plugins>
            <plugin>
                <groupId>com.smartbear.soapui</groupId>
                <artifactId>soapui-maven-plugin</artifactId>
                <version>5.0.0</version>

                <executions>
                    <execution>
                        <id>RestAPI-positiveTestSuite</id>
                        <configuration>
                            <projectFile>RestAPI-positiveTestSuite.xml</projectFile>
                            <outputFolder>target/surefire-reports</outputFolder>
                            <testSuite>Positive cases</testSuite>
                            <junitReport>true</junitReport>
                            <exportwAll>true</exportwAll>
                            <printReport>true</printReport>
                            <testFailIgnore>true</testFailIgnore>
                        </configuration>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>test</phase>
                    </execution>

                    <execution>
                        <id>RestAPI-negativeTestSuite</id>
                        <configuration>
                            <projectFile>RestAPI-negativeTestSuite.xml</projectFile>
                            <outputFolder>target/surefire-reports</outputFolder>
                            <testSuite>Negative tests</testSuite>
                            <junitReport>true</junitReport>
                            <exportwAll>true</exportwAll>
                            <printReport>true</printReport>
                            <testFailIgnore>true</testFailIgnore>
                        </configuration>

                        <goals>
                            <goal>test</goal>
                        </goals>

                        <phase>test</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

在 Jenkins 中创建一个新的 Maven 作业并将其指向 git repo 和 pom.xml,作为目标填写 test

就是这样

【讨论】:

pom.xml 示例末尾缺少 标记【参考方案3】:

以下脚本在 hudson 中作为自定义构建脚本的一部分被调用,并传递目标主机的名称来调用测试。

#!/bin/bash -x

#
#   Regression Test Script for performing regression testing
#   
#   Note: Caution should be exercised where more than one set
#   of test suites exist in the same soapui project
#
#   Script invokes SOAPUI testrunner to perform tests
#
#   Script arguments:
#       target host
#

if [ $# -ne 1 ];
then
    echo "Usage: $0 target_host"
    exit 1
fi
TargetHost=$1
curdir=`pwd`
ProjectFile=$curdir/testing/SoapUI/YourProject.xml
SOAPUI_HOME=/soapuipath/soapui
TEST_RUNNER=testrunner.sh

if [ ! -f "$ProjectFile" ];
then
    echo "Project File does not exist"
    exit 1
fi
###############################################################################################
## Check the status of the last shell operation and if failed exit
###############################################################################################

## --------------------------------------------------------------------------------
##  Return the operating system pathname for the datafiles for the specified database
##
##  Arguments:
##      The return value to check.  zero indicates all is good.  Non-zero indicates error
##      The error message to display when exiting
##      
##  Exits if error detected
check_status()

    if [ $# -ne 2 ];
    then
        echo "$0: Programming error: Report to sysadmin@yourdomain.com"
        exit -1
    fi
    exit_code=$1
    err_msg=$2
    if [ $exit_code -ne 0 ];
    then
        echo $err_msg
        exit $exit_code
    fi



cd $SOAPUI_HOME/bin
bash -x ./$TEST_RUNNER -s"TestSuite 1" -c"TestCase 1 - Sanity Tests" -ehttps://$TargetHost:port/testurl "$ProjectFile"
check_status $? "Failed to pass regression testing "

cd "$curdir"

【讨论】:

【参考方案4】:

为什么不使用 JUnit 集成? http://www.soapui.org/Test-Automation/integrating-with-junit.html

编辑:我们使用这种方法得到了一些奇怪的性能数字(秒而不是毫秒),原来是因为使用了 SoapUI Runner。在 SoapUI 中运行相同的负载测试给出了正确的结果。也许我们没有正确使用 API(虽然看起来很简单)。我们切换到使用 ContiPerf2 并使用客户端代码(无论如何我们都必须生成)来运行测试并获得正常结果。

【讨论】:

所以我将 SOAPUI 测试作为单元测试运行?如果这可行,我只能假设它还会生成 Jenkins/hudson 可以可视化的报告? 是的,这就是我们所做的。就像普通的单元测试一样。但是没有生成特殊报告,只是失败或成功。我们确实编写了一些代码来从soap runner 中提取日志以显示测试失败的原因,但这只是几行代码。【参考方案5】:

我使用soapui-extension maven plugin - 它比官方的 Maven 插件好得多。只需将其配置为生成 JUnit 样式的结果,以便 jenkins 可以获取它们。

【讨论】:

以上是关于如何将soapUI与Jenkins集成?的主要内容,如果未能解决你的问题,请参考以下文章

接口自动化测试持续集成--Soapui接口测试

jenkins 集成 pytest + allure

Jenkins

Jenkins

jenkins构建时间变量

Jenkins 配置邮件通知