当前位置: 首页 > 知识库问答 >
问题:

PACT-JVM 测试多层授权

周志文
2023-03-14

我想通过 pact-jvm 测试我的授权服务。在我的请求中,我通过帖子发送了一个 html 正文,包括一些用于验证用户的元数据 - 包括他的用户名,并且也在我使用 Http Basic Auth 的标头中发送。从配置文件中读取用户名密码后,我将标头添加到我的测试类中,并在 JUnit-Test 中@TargetRequestFilter。这是因为应用程序在不同的层上运行。每个层都有另一个用户名密码组合。该协议应该适用于每一层。此外,当用户更改时,我只想在我的配置中进行少量更改文件。它包含用户名,密码,主机名,端口和协议。

问题是:我需要根据配置文件的内容操作请求的 html 正文,以匹配我在 testclass 中设置的标头,而无需每次都创建新的 pact 文件。

所以我的问题是:有没有办法从 JUnit 类中操纵我期望(通过协议)的 html 正文的选择性部分?

也许还有另一种方法可以解决我的问题,我还没有看到。

提前感谢!

为清楚起见,请求示例:

<body>
    <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:body>
            <ns2:authevalrequest1
                xmlns:ns2="http://authgroup/authBRS/specification/ServiceView/AuthProvider/authBRS/">
                <inputmetadata> <version>V_1_0_0</version> <metadataentry>
                <key>US</key> <value>some_username</value> </metadataentry> <metadataentry>
                <key>MA</key> <value>some_user_id</value> </metadataentry> </inputmetadata>
                <request> <attrs> <type>String</type> <values>
                <value>some_user_id</value> </values> <xacml>urn:oasis:names:tc:xacml:1.0:subject:subject-id</xacml>
                </attrs> <attrs> <type>String</type> <values> <value>00</value>
                </values> <xacml>http://thisisaservice.com/resource/dataRES</xacml>
                </attrs> <attrs> <type>String</type> <values> <value>abc</value>
                </values> <xacml>http://thisisaservice.com/subject/authprofilename</xacml>
                </attrs> <attrs> <type>String</type> <values> <value>importData</value>
                </values> <xacml>http://thisisaservice.com/resource/CompanyfunctionRES</xacml> </attrs>
                </request>
            </ns2:authevalrequest1>
        </soap:body>
    </soap:envelope>
</body>

我无法更改提供者或使用者。我只是来让验证工作。

编辑:也许我忘了说...我想让响应机构匹配(实际和预期),什么没有问题。但是我需要根据我的配置文件修改请求的 html 正文。

共有1个答案

巫培
2023-03-14

这里的问题是你正在尝试对XML进行验证,而Pact目前不支持开箱即用,因为我们使用JSON进行所有验证。您可以做的只是使用字符串验证器或正则表达式验证器,但是,如果字符串中的任何内容发生更改(例如空格),则测试可能无法验证。

此时,您可以自己创建一种方法,将输出模板化为字符串以验证您的交互。我们已经研究了支持 XML,但兴趣不大。

 类似资料:
  • 我是新来的。我的项目是Java项目。我通读了pact文档,找到了github项目https://github.com/dius/pact-jvm/tree/master/pact-jvm-consumer-junit,我将其导入到eclipse IDE中。我被困在这里了。1.首先运行哪个测试。ExampleJavaConsumerPactRuleTest还是ExampleJavaConsumerP

  • 注:本节未经校验,如有问题欢迎提issue 同时在多个 Jvm 中运行应用程序 (main方法的对象) 和 ScalaTest 测试的支持。对于需要多个系统相互沟通的集成测试很有用。 安装程序 多JVM测试是 sbt 插件,你可以在 http://github.com/typesafehub/sbt-multi-jvm 找到。 你可以作为一个插件添加它,在 project/plugins.sbt

  • 我在pact-jvm-consumer中的closeArray有问题。 给定这样的Json,如何构造“dslPart imeiResults=new PactDslJsonBody()”-语句。 我试过这样: 但这不起作用,例如.closearray()不返回PactDslJsonBody,而是返回DslPart,所以在.closearray()之后永远不能有任何东西?我不明白,有人能给我们演示一

  • 我使用的是PACT JVM https://github.com/dius/pact-jvm/tree/master/provider/pact-jvm-provider-junit我不知道为什么我的联系人中的匹配规则被忽略了。我的HTTP测试 还有我的合同档案 并在运行后显示错误 请帮忙把我的观点说错。 谢谢,

  • 尝试编写我的第一个pact测试,但我无法找到基本问题的答案。使用者测试和提供者测试是仅针对模拟服务器运行,还是我们应该在本地(或在CI/CD期间的特定环境中)构建应用程序,然后针对实际运行的应用程序运行测试?另外,我是否可以对模拟服务器运行使用者测试,而对实际httpsendpoint运行提供者测试?

  • 当交互中有多个头时,pact-jvm-provider-maven2.12版本3.5.25会在运行以验证提供者端的契约时引发异常 我的互动是 如果我从请求头中删除“content-type”:“application/json”,这个错误就会消失。这是插件中的一个bug吗?

  • 我是一个新的编写PACT测试用例的人。我有一个非常简单的场景,一个微服务运行在dev服务器上,它根据路径变量返回true或false(这是一个GET调用)。如何编写生成协议测试用例?如何建立一个代理服务器来发布协议?现在我只关心消费者端。 首先,我编写了以下代码? OrdermsConsumerTest 这里我有点困惑@PactTestFor(providerName=“orderms-provi