空手道 api 测试:TestRunner.testParallel:15 线程 Thread[pool-1-thread-1,3] 请求的多线程访问,但语言 js 不允许

问题描述

使用空手道测试 api:模拟和队列实现:错误 TestRunner.testParallel:15 线程 Thread[pool-1-thread-1,3,main] 请求的多线程访问但不允许用于language(s) js。 在尝试使用具有多条消息的队列时产生。 流动: 调用一个 messageMock.feature :

Background:
* def QueueUtils = Java.type('mocks.QueueUtils')
* configure cors = true
* configure responseHeaders = { 'Content-Type': 'application/json' }

Scenario: pathMatches('/message') && methodis('post')
* def response = read('../../responses/message/message.json')
* def responseStatus = 200
* QueueUtils.send(response.data,JSON.stringify(read('test.json')),25)
* QueueUtils.send(response.data,JSON.stringify(read('test1.json')),JSON.stringify(read('test2.json')),25)

来自功能

Scenario: Send message
* def QueueConsumer = Java.type('mocks.QueueConsumer')
* def port = karate.start('messageMock.feature').port
* url baseUrl + port
Given path '/message';
And request read('req.json')
When method post
Then status 200
* def queue = new QueueConsumer(response.data)
* def handler = function(msg){ karate.signal(msg) }
* queue.listen(karate.toJava(handler))
* listen 2000
* json response = listenResult
* print '### received:',listenResult
And match response == read('test.json')
* listen 2000
* json response1 = listenResult
* print '### received1:',listenResult
And match response1 == read('test1.json')
* listen 2000
* json response2 = listenResult
* print '### received2:',listenResult
And match response2 == read('test2.json')

错误信息在线给出:

    * json response = listenResult

这是一个错误还是错误创建的测试? 我要测试的是一个队列,该队列在消费之前有几个排队的消息。这可能与空手道有关吗?

解决方法

对于使用新的 JS 引擎的多个线程,我们可能还有一些工作要做。

如果您能提供一个复制此问题的示例项目,将会非常有帮助。请遵循以下流程:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

此处提供了一些解决方法,但并不理想:https://github.com/intuit/karate/issues/1633#issuecomment-874854857

这就是为什么您帮助我们复制很重要 - 这样我们才能找到更好的解决方案。