This is a k6 extension using the xk6 system, that allows to connect with Azure ServiceBus.
❗ This extension isn't supported by the k6 team, and may break in the future. USE AT YOUR OWN RISK! |
---|
To build a k6
binary with this extension, first ensure you have the prerequisites:
- Go toolchain
- Git
- Install
xk6
framework for extendingk6
:
go install go.k6.io/xk6/cmd/xk6@latest
- Build the binary:
xk6 build --with github.com/fernandoescolar/xk6-azservicebus@latest
- Run a test
k6 run -e CONNECTION_STRING=your_azure_service_bus_connection_string your_tests.js
You can find some example javascript files in the examples folder.
A ServiceBus
instance represents the connection with the Azure ServiceBus service and it is created with new ServiceBus(configuration)
, where configuration attributes are:
Attribute | Description |
---|---|
connectionString |
(mandatory) is the Azure ServiceBus connection string you can find in the azure portal |
timeout |
(optional) is the operations timeout in millis |
insecureSkipVerify |
(optional) if true it will allow untrusted certificates in connections |
Example:
import { ServiceBus } from 'k6/x/azservicebus';
const config = {
connectionString: __ENV.CONNECTION_STRING,
timeout: 30000,
};
const servicebus = new ServiceBus(config);
When you finish using the ServiceBus
instance, you should close it using the close()
method:
export function teardown() {
servicebus.close();
}
To send messages to Azure ServiceBus you have to create a new sender using the createSender(topicOrQueue)
method of the ServiceBus
instance. The topicOrQueue
parameter is the name of the topic or the queue where the messages will be sent:
const sender = servicebus.createSender('test-topic');
// or
const sender = servicebus.createSender('test-queue');
Then, you can send messages to a topic or a queue using the following functions:
Function | Description |
---|---|
send(string) |
sends a string message to a topic or a queue |
sendMessage(message) |
sends a Message object to a topic or a queue |
sendBatch(string[]) |
sends a batch of string messages to a topic or a queue |
sendBatchMessages(message[]) |
sends a batch of Message objects to a topic or a queue |
Example:
const sender = servicebus.createSender('test-topic');
sender.send('hello azure service bus!');
sender.sendBatch(['hello azure service bus!', 'hello again!']);
sender.sendMessage({
subject: 'my subject',
bodyAsString: 'hello azure service bus!'
});
sender.sendBatchMessages([
{
subject: 'my subject',
bodyAsString: 'hello azure service bus!'
},
{
subject: 'my subject',
bodyAsString: 'hello again!'
}
]);
sender.close();
Once you have finished using the sender, you should close it using the close()
method:
sender.close();
And the Message
object has the following attributes:
Attribute | Description |
---|---|
applicationProperties |
(optional) is a map of string key/value pairs |
body |
(mandatory if bodyAsString has not been specified) is the message body in byte array format |
bodyAsString |
(mandatory if body has not been specified) is the message body in string format |
contentType |
(optional) is the content type of the message |
correlationID |
(optional) is the correlation ID of the message |
messageID |
(optional) is the message ID |
partitionKey |
(optional) is the partition key |
sessionID |
(optional) is the session ID |
subject |
(optional) is the subject of the message |
timeToLive |
(optional) is the time to live of the message |
to |
(optional) is the destination of the message |
To receive messages from Azure ServiceBus you have to create a new queue receiver using the createQueueReceiver(queue)
method of the ServiceBus
instance, or createSubscriptionReceiver(topic, subscription)
method to create a subscription receiver. The queue
parameter is the name of the queue where the messages will be received, and the topic
and subscription
parameters are the name of the topic and the subscription where the messages will be received:
const receiver = servicebus.createQueueReceiver('test-queue');
// or
const receiver = servicebus.createSubscriptionReceiver('test-topic', 'test-subscription');
Then, you can receive messages from a queue or a subscription using the following functions:
Function | Description |
---|---|
getMessage() |
receives a ReceivedMessage from a queue or a subscription |
getMessages(maxMessages) |
receives an array of ReceivedMessage from a queue or a subscription |
const receiver = servicebus.createQueueReceiver('test-queue');
const message = receiver.getMessage();
check(message, {
'Is expected message': (m) => m.bodyAsString === expectedMessage,
})
receiver.close();
Once you have finished using the receiver, you should close it using the close()
method:
receiver.close();
And the ReceivedMessage
object has the following attributes:
Attribute | Description |
---|---|
applicationProperties |
is a map of string key/value pairs |
body |
is the message body in byte array format |
bodyAsString |
is the message body in string format |
contentType |
is the content type of the message |
correlationID |
is the correlation ID of the message |
deadLetterErrorDescription |
is the error description of the dead letter message |
deadLetterReason |
is the reason of the dead letter message |
deadLetterSource |
is the source of the dead letter message |
deliveryCount |
is the delivery count of the message |
enqueuedSequenceNumber |
is the enqueued sequence number of the message |
enqueuedTime |
is the enqueued time of the message |
expiresAt |
is the expiration time of the message |
lockedUntil |
is the locked until time of the message |
messageID |
is the message ID |
partitionKey |
is the partition key |
replyTo |
is the reply to destination of the message |
replyToSessionID |
is the reply to session ID of the message |
scheduledEnqueueTime |
is the scheduled enqueue time of the message |
sequenceNumber |
is the sequence number of the message |
sessionID |
is the session ID |
state |
is the state of the message |
subject |
is the subject of the message |
timeToLive |
is the time to live of the message |
to |
is the destination of the message |
The source code of this project is released under the MIT License.