【问题标题】:SoapUI: 5.6.0 java.lang.ClassNotFoundException: PostgreSQL/org.postgresql.Driver when running tests using mavenSoapUI:5.6.0 java.lang.ClassNotFoundException:使用 maven 运行测试时出现 PostgreSQL/org.postgresql.Driver
【发布时间】:2021-05-31 12:30:54
【问题描述】:

我正在尝试使用 mvn 命令运行 SoapUI 测试,但在每个 JDBC 请求中我都会看到此异常,尽管测试通过并且数据库已被访问。”

maven中添加了PostgreSQL的依赖。

日志:

5:20:54,484 INFO  [SoapUITestCaseRunner] running step [Check db to make sure it was removed]
java.lang.ClassNotFoundException: PostgreSQL/org.postgresql.Driver
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at com.eviware.soapui.support.GroovyUtils.registerJdbcDriver(GroovyUtils.java:103)
        at com.eviware.soapui.support.jdbc.JdbcUtils.initConnection(JdbcUtils.java:50)
        at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.getDatabaseConnection(JdbcSubmit.java:190)
        at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.prepare(JdbcSubmit.java:222)
        at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.runQuery(JdbcSubmit.java:173)
        at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.run(JdbcSubmit.java:147)
        at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.<init>(JdbcSubmit.java:79)
        at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcRequest.submit(JdbcRequest.java:122)
        at com.eviware.soapui.impl.wsdl.teststeps.JdbcRequestTestStep.run(JdbcRequestTestStep.java:194)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:211)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentTestStep(WsdlTestCaseRunner.java:47)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:138)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:46)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:128)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.start(AbstractTestRunner.java:76)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase.run(WsdlTestCase.java:594)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase.run(WsdlTestCase.java:78)
        at com.eviware.soapui.model.testsuite.TestCase$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:136)
        at Script1.run(Script1.groovy:7)
        at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:90)
        at com.eviware.soapui.impl.wsdl.WsdlTestSuite.runTearDownScript(WsdlTestSuite.java:495)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestSuiteRunner.internalFinally(WsdlTestSuiteRunner.java:163)
        at com.eviware.soapui.impl.wsdl.testcase.WsdlTestSuiteRunner.internalFinally(WsdlTestSuiteRunner.java:46)
        at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:149)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
15:20:54,589 INFO  [SoapUITestCaseRunner] Assertion [JDBC Status] has status VALID
15:20:54,589 INFO  [SoapUITestCaseRunner] Assertion [JDBC Timeout] has status VALID
15:20:54,592 INFO  [SoapUITestCaseRunner] Assertion [XPath Match] has status VALID
15:20:54,595 INFO  [log] Teardown script finished.

pom.xml:

<properties>
        <soapui-maven-plugin.version>5.6.0</soapui-maven-plugin.version>
        <postgreSql.version>42.2.20</postgreSql.version>
    </properties>

    <pluginRepositories>
        <pluginRepository>
            <id>SmartBearPluginRepository</id>
            <url>https://rapi.tools.ops.smartbear.io/nexus/content/groups/public/</url>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <plugins>
            <!-- Plugin to read external properties file -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
                <version>1.0.0</version><!-- afaik it's final, no need for parameter -->
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>read-project-properties</goal>
                        </goals>
                        <configuration>
                            <files>
                                <file>project.properties</file>
                            </files>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- SoapUI plugin -->
            <plugin>
                <groupId>com.smartbear.soapui</groupId>
                <artifactId>soapui-maven-plugin</artifactId>
                <version>${soapui-maven-plugin.version}</version>
                
                <configuration>
                    <printReport>true</printReport>
                    <junitReport>true</junitReport>
                    <outputFolder>${baseDir}/target/surefire-reports</outputFolder>
                </configuration>

                <dependencies>
                    <dependency>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>${postgreSql.version}</version>
                    </dependency>
                </dependencies>

注意:离开 groupid 和执行。

知道什么会导致异常,或者如何抑制它?对我来说奇怪的是,JDBC 请求运行没有问题。

【问题讨论】:

  • bin/ext 中似乎缺少 JDBC 连接器,如 documentation 中所述。
  • 如果连接成功,说明不是使用GroovyUtils初始化步骤使用的JDBC Smartbear连接。
  • @ConstantinKonstantinidis 不是这样,因为我使用 mvn 命令运行它,它独立于本地安装的 SoapUI。另外,我尝试将存储库中的 ext 文件夹与驱动程序一起使用,但它不起作用。
  • 在 SoapUI 中根本没有抛出这样的异常。仅在使用 Maven 运行测试时。
  • 如果 SmartBear 无头运行,并且在 maven 命令中添加了 --Djava.awt.headless=true 之类的参数,则注册驱动程序可能无用。

标签: postgresql maven soapui


【解决方案1】:

I Java 一个 JDBC 驱动程序可以从类路径自动加载,这就是它仍然有效的原因。

我认为您的 Groovy 拆解脚本中有一行如下所示:

def driver = 'PostgreSQL/org.postgresql.Driver'

如果你把它替换为

def driver = 'org.postgresql.Driver'

它应该可以正常工作。


更新:提问者通过在脚本中添加这一行来解决它:

com.eviware.soapui.support.GroovyUtils.registerJdbcDriver(driver)

这是一种 hack,但它使异常消失了。

【讨论】:

  • 没有这行,我什至尝试在设置脚本中添加,仍然抛出异常。
  • 问题是PostgreSQL/org.postgresql.Driver不是一个有效的类名,必须替换成org.postgresql.Driver。请同时查找您的 JDBC 请求测试步骤,也许它被配置为 Driver 选项? (来自:support.smartbear.com/readyapi/docs/functional/steps/…
  • 我使用的是开源版本。我没有配置选项卡。我正在寻找是否有解决方法。
  • @AdrianPop 开源版本的 UI 有点受限,但您仍然可以配置 JDBC 请求测试步骤。双击或右键+“打开编辑器”,会在“配置”部分找到“驱动”字段。
  • 您的第一个答案主要是我想要的。我还必须注册驱动程序才能摆脱异常。我也添加了这一行,并且它起作用了。 com.eviware.soapui.support.GroovyUtils.registerJdbcDriver(驱动程序)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2015-06-23
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多