为什么这个测试需要这么长时间?

时间:2018-06-15 05:55:06

标签: c# .net-core xunit kafka-producer-api confluent-kafka

我有以下xUnit(版本2.3.1)测试,用于向Kafka发送100条消息

[Fact]
public void Test1()
{
    Stopwatch sw = new Stopwatch();

    sw.Start();

    var config = new Dictionary<string, object>
                    {
                        { "group.id", "gid" },
                        { "bootstrap.servers", "localhost" },
                        { "enable.auto.commit", true },
                        { "default.topic.config", new Dictionary<string, object>()
                            {
                                { "message.timeout.ms", 500 }
                            }
                        },
                    };

    var connection = new KafkaConnection(config, new ShreddingQueueCache());

    for (byte i = 0; i < 100; i++)
    {
        connection.Send(new Message(new Guid(1, 2, 3, new byte[] { 0, 1, 0, 1, 0, 1, i, 1 }), "content : content" + i), "imp");
    }

    Debug.WriteLine(sw.ElapsedMilliseconds);

    sw.Stop();
}

Send方法代码是

public async void  Send(MessagingBase.Message message, string topic)
{
    CacheMessage(message);

using(var producer = new Producer(Configuration,null,new StringSerializer(Encoding.UTF8)))         {             await producer.ProduceAsync(topic,null,message.Content).ContinueWith(antecedant =&gt; ProduceAsyncComplete(message));         }

    var producer = new Producer<Null, string>(Configuration, null, new StringSerializer(Encoding.UTF8));

    await producer.ProduceAsync(topic, null,message.Content).ContinueWith(antecedant => ProduceAsyncComplete(message));

}

CacheMessageProduceAsyncComplete目前为空。

现在,秒表告诉我,消息创建和发送大约需要1秒,并且消息在控制台中的示例消费者上相应地弹出。 然而,整个测试总共需要14秒才能完成。

有没有人对此有解释? 以如此大的延迟调用这些回调是否正常?

[UPDATE]

我们越来越近了。所以我明确地定时了Callbacks,并且100回调实际上也在一秒钟内完成。 这仍然是为什么测试需要这么长时间的问题。事实证明,分析xUnit测试并不是那么容易,但我就是这样。

[更新2] 出于一时兴起,我删除了producer变量周围的使用,现在我的测试降到了2s - 这正是我所期待的。

不知何故,测试环境保持使用块&#34;打开&#34;并且只在以后关闭它。

0 个答案:

没有答案