第十七節(jié) SCC消費驅(qū)動測試-消費端

spring cloud contract 使用

官方地址

消費端

spring cloud contract 使用 consumer

[https://docs.spring.io/spring-cloud-contract]

使用步驟

  1. pom
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
    <scope>test</scope>
</dependency>
  1. 執(zhí)行編輯

./mvnw clean install -DskipTests

  1. 測試類如下
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringcloudContractConsumerApplication.class,webEnvironment= SpringBootTest.WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = {"org.xzg:scc-pruducer:+:stubs:8800"},
    stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class LoanApplicationServiceTests {
    @Autowired
    private RestTemplate restTemplate;
        @Test
        public void shouldBeRejectedDueToAbnormalLoanAmount() throws IOException {
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.add("Content-Type", "application/json");
            ResponseEntity<String> response = restTemplate.exchange("http://localhost:8800/fraudcheck", HttpMethod.PUT,
                new HttpEntity<>("{\"client.id\":\"1234567890\",\"loanAmount\":99999}", httpHeaders),String.class);
            assertThat(response.getBody()).isEqualTo("{\"fraudCheckStatus\":\"FRAUD\",\"rejection.reason\":\"Amount too high\"}");
        }

}

4 .執(zhí)行查看結(jié)果

注意事項

  1. 如果報錯No stubs or contracts were found for [XXX]锁摔,可能是當(dāng)前maven環(huán)境變量找的倉庫不對侣签,需要指定正確地址 idea啟動配置環(huán)境變量org.apache.maven.user-settings=xxx\settings.xml
  2. 關(guān)于ids也需要指定正確:groupId:artifactId
  3. 端口為stub端口乍钻,客戶端調(diào)用要一致

kafka scc測試部分

需要 spring-kafka-test 依賴)

通過Kafka集成厘贼,為了輪詢單個消息当犯,我們需要在Spring上下文啟動時注冊consumer 赘方。這可能會導(dǎo)致一種情況绊茧,當(dāng)您在consumer 方面時,Stub Runner可以為相同的組ID和主題注冊其他使用者首懈。
這可能會導(dǎo)致這樣一種情況,即只有一個組件會實際輪詢該消息谨敛。由于在消費者方面究履,您同時具有Spring Cloud Contract Stub Runner和Spring Cloud Contract Verifier類路徑,因此我們需要能夠關(guān)閉此類行為脸狸。這是通過stubrunner.kafka.initializer自動完成的最仑。
enabled標(biāo)志,它禁用了Contact Verifier消費者注冊炊甲。如果您的應(yīng)用程序既是Kafka消息的使用者又是生產(chǎn)者盯仪,則可能需要在生成的測試的基類中將該屬性手動切換為false。

使用步驟

  1. 增加pom
<dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.awaitility</groupId>
            <artifactId>awaitility</artifactId>
            <version>4.0.3</version>
            <scope>test</scope>
        </dependency>
  1. 增加測試配置
server:
  port: 8880
logging.level.org.springframework.cloud.contract: debug
#stubrunner:
#  repository-root: stubs:classpath:/stubs/
#  ids: my:stubs
#  stubs-mode: remote
#kafka:
#  initializer:
#    enabled: true
spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
    consumer:
      value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
      properties:
        max:
          poll:
            interval:
              ms: 900000
  1. 編寫測試類
@SpringBootTest(classes = SpringcloudContractConsumerApplication.class,webEnvironment= SpringBootTest.WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = "org.xzg:scc-pruducer", stubsMode = StubRunnerProperties.StubsMode.LOCAL)
@EmbeddedKafka(partitions = 1,topics = {"kafka_topic"},ports = 9092)
@ActiveProfiles("test")
@Slf4j
public class ConsumerKafkaTest {

    @Autowired StubTrigger trigger;

    @Test
    public void consumerNoInput() {
        //        Trigger by Label
        this.trigger.trigger("some_label");
        //        Trigger by Group and Artifact IDs
        //        trigger.trigger('org.springframework.cloud.contract.verifier.stubs:streamService', 'return_book_1')
        //        Trigger by Artifact IDs
        //        trigger.trigger('streamService', 'return_book_1')
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        BDDAssertions.then(KafkaConsumer.msg).isNotNull();
        BDDAssertions.then(KafkaConsumer.msg.getPayload().getBookName()).contains("foo");
        BDDAssertions.then(KafkaConsumer.msg.getHeaders().get("BOOK-NAME"))
                .isEqualTo("foo");
    }
}
  1. 執(zhí)行測試觀察結(jié)果

[示例源碼地址](xiongzhenggang/spring-cloud-contract-example (github.com)
)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜜葱,一起剝皮案震驚了整個濱河市全景,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牵囤,老刑警劉巖爸黄,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揭鳞,居然都是意外死亡炕贵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門野崇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來称开,“玉大人,你說我怎么就攤上這事乓梨”詈洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵扶镀,是天一觀的道長蕴侣。 經(jīng)常有香客問我,道長臭觉,這世上最難降的妖魔是什么昆雀? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蝠筑,結(jié)果婚禮上狞膘,老公的妹妹穿的比我還像新娘。我一直安慰自己什乙,他們只是感情好挽封,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稳强,像睡著了一般场仲。 火紅的嫁衣襯著肌膚如雪和悦。 梳的紋絲不亂的頭發(fā)上退疫,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天渠缕,我揣著相機與錄音,去河邊找鬼褒繁。 笑死亦鳞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棒坏。 我是一名探鬼主播燕差,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坝冕!你這毒婦竟也來了徒探?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喂窟,失蹤者是張志新(化名)和其女友劉穎测暗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磨澡,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡碗啄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稳摄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稚字。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厦酬,靈堂內(nèi)的尸體忽然破棺而出胆描,到底是詐尸還是另有隱情,我是刑警寧澤仗阅,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布袄友,位于F島的核電站,受9級特大地震影響霹菊,放射性物質(zhì)發(fā)生泄漏剧蚣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一旋廷、第九天 我趴在偏房一處隱蔽的房頂上張望鸠按。 院中可真熱鬧,春花似錦饶碘、人聲如沸目尖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑟曲。三九已至饮戳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洞拨,已是汗流浹背扯罐。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烦衣,地道東北人歹河。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像花吟,于是被迫代替她去往敵國和親秸歧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容