如何在https中运行geb功能测试?

问题描述 投票:0回答:1

我的应用程序要求应用程序以 https 运行,因为浏览器通过 JavaScript 库将支付数据发送到支付网关。

如果应用程序在 http 中运行,则支付网关会抛出此错误。

我创建了一个简单的 hello world 应用程序并编写了一个简单的 geb 规范。

我似乎没有找到以 https 模式运行服务器的方法。我在网络上也找不到任何有用的资源。

现在它在随机端口以http模式运行:

Grails application running at http://localhost:54461 in environment: test

我尝试在 build.gradle 中添加 https 端口

integrationTest {
    systemProperty "webdriver.chrome.driver", "C:\\webdrivers\\chromedriver.exe"

    jvmArgs(
            '-Dgrails.server.port.https=8443'
    )


}

但这似乎被忽略了。

我还尝试在 IntelliJ 运行配置中设置 https 端口,如下所示。

我已将应用程序代码发布在GitHub中以供参考。

https://github.com/learningcscience/gebhttps

更新

今天我觉得我又进步了一点。

我现在可以在固定端口中运行该应用程序。我在 8443 中运行了该应用程序,该应用程序适用于 https。

我使用 Spring Boot 测试注释做到了这一点

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)

现在在控制台中显示

Grails application running at http://localhost:8443 in environment: test
Starting ChromeDriver 100.0.4896.20 (f9d71f93d32a6487809d6f35a9670c879fe97dfe-refs/branch-heads/4896@{#203}) on port 31898
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.

https://docs.grails.org/latest/guide/testing.html

现在我只需要使用 https 而不是 http 来运行应用程序。

我已经更新了 GitHub 存储库中的代码。

grails functional-testing geb grails-4
1个回答
0
投票

好的。问题终于解决了。

最后的帮助来自 grails 社区 https://grails.slack.com/

感谢 Mattias Reichel 的帮助。

我现在将逐步说明过程,以便其他人可能不会陷入这个问题。

为了在 https 中运行功能性 geb 测试,您首先需要添加 SpringBootTest 注释,如上面更新:部分所述。

我又贴在这里了

@Integration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class EventCreationSpec extends GebSpec {

之后在 src/integration-test/resources/GebConfig.groovy 中设置 baseurl。

我把baseUrl =“https://localhost:8443/”

我的 GebConfig 看起来像这样

import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
import org.openqa.selenium.firefox.FirefoxDriver

environments {




    // run via “./gradlew -Dgeb.env=chrome iT”
    chrome {
        driver = {

            System.setProperty('webdriver.chrome.driver', 'C:\\webdrivers\\chromedriver.exe')
            new ChromeDriver()

        }
    }

    // run via “./gradlew -Dgeb.env=chromeHeadless iT”
    chromeHeadless {
        driver = {
            ChromeOptions o = new ChromeOptions()
            o.addArguments('headless')
            new ChromeDriver(o)
        }
    }

    // run via “./gradlew -Dgeb.env=firefox iT”
    firefox {
        driver = { new FirefoxDriver() }
    }
}

baseUrl = "https://localhost:8443/"

之后您需要在 src/integration-test/resources/ 中创建 application-test.yml 文件

application-test.yml 文件如下所示

server:
    port: 8443
    ssl:
        enabled: true
        keyStore: c:/Users/user/selfsigned.jks
        keyStorePassword: pepsicola
        keyAlias: tomcat

您需要创建自签名证书。

您可以通过此过程来创建证书

https://grails.org/blog/2017-06-28.html

在上面的配置中

我的证书位于路径 c:/Users/user/selfsigned.jks 中的 selfsigned.jks 密钥库中

之后功能测试将以 https 模式启动

以我为例

http://localhost:8443/roadrace

gebspec 应该是这样的

注意顶部的 SpringBootTest 注释。

@Integration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@Stepwise
class EventCreationSpec extends GebSpec {


    def grailsApplication
    def springSecurityService
    def timeService



    def setup() {

    }

    def cleanup() {
    }

    void "Create and publish event"() {
        when:"The home page is visited"
        go '/roadrace/'

        $("#details-button").click()
        $("#proceed-link").click()


          ... rest of gebspock test steps....



        then:"The title is correct"
            title == "Homepage"
    }


}

请注意,我必须转到 /roadrace/ 因为 roadrace 是应用程序上下文路径。

如果您没有上下文路径,您可以转到“/”

最后一个障碍可能是当浏览器以 https 启动时,它可能会显示

为此,使用 geb,您可以单击“高级”,然后单击“继续到本地主机(不安全)”链接

我只需点击这样的链接

去'/公路赛/'

$("#details-button").click()
$("#proceed-link").click()

仅此而已!现在geb功能测试在https中运行。由于它是 https,您现在还可以与测试支付网关进行通信。

© www.soinside.com 2019 - 2024. All rights reserved.