Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thotasrinath/xk6-couchbase
K6 extension to test Couchbase DB
https://github.com/thotasrinath/xk6-couchbase
couchbase k6 xk6 xk6-extension
Last synced: 4 months ago
JSON representation
K6 extension to test Couchbase DB
- Host: GitHub
- URL: https://github.com/thotasrinath/xk6-couchbase
- Owner: thotasrinath
- License: apache-2.0
- Created: 2023-02-12T03:14:54.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-09-11T15:19:02.000Z (5 months ago)
- Last Synced: 2024-09-12T22:16:00.285Z (5 months ago)
- Topics: couchbase, k6, xk6, xk6-extension
- Language: Go
- Homepage:
- Size: 1.19 MB
- Stars: 5
- Watchers: 3
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CouchBase k6 extension
K6 extension to perform tests on couchbase.
## Currently Supported Commands
- Supports inserting a document.
- Supports Batch insertion.
- Supports findOne (Fetch by primary key)
- Supports deleting a document by id
- Supports upserts
- Testing query performance
- Prepared statement query performance## Build Instructions
- Install xk6 using (go install go.k6.io/xk6/cmd/xk6@latest)
### For Development
```shell
git clone [email protected]:thotasrinath/xk6-couchbase.git
cd xk6-couchbase
xk6 build --output xk6-couchbase --with github.com/thotasrinath/xk6-couchbase=.
```
### For Use
```shell
xk6 build --with github.com/thotasrinath/xk6-couchbase@latest
```## Examples
### Document Insertion Test
```js
import xk6_couchbase from 'k6/x/couchbase';const client = xk6_couchbase.newClient('localhost', '', '');
export default () => {let doc = {
correlationId: `test--couchbase`,
title: 'Perf test experiment',
url: 'example.com',
locale: 'en',
time: `${new Date(Date.now()).toISOString()}`
};
client.insert("test", "_default", "_default", makeId(15), doc);
}function makeId(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
let counter = 0;
while (counter < length) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
counter += 1;
}
return result;
}```
##### Below is the example commands to test the script
```bash
# Update examples/test-insert.js with cluster credentials and bucket name
./xk6-couchbase run --vus 10 --duration 30s examples/test-insert.js
```### Batch Insert Documents
```js
import xk6_couchbase from 'k6/x/couchbase';const client = xk6_couchbase.newClient('localhost', '', '');
const batchsize = 50;
export default () => {
var docobjs = {}
for (var i = 0; i < batchsize; i++) {
docobjs[makeId(15)] = getRecord();
}client.insertBatch("test", "_default", "_default", docobjs);
}function getRecord() {
return {
correlationId: `test--couchbase`,
title: 'Perf test experiment',
url: 'example.com',
locale: 'en',
time: `${new Date(Date.now()).toISOString()}`
};}
function makeId(length) {
let result = '';
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charactersLength = characters.length;
let counter = 0;
while (counter < length) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
counter += 1;
}
return result;
}```
### FindOne test
```js
import xk6_couchbase from 'k6/x/couchbase';const client = xk6_couchbase.newClient('localhost', '', '');
export default () => {
// syntax :: client.findOne("", "", "", "");
var res = client.findOne("test", "_default", "_default", "002wPJwiJArcUpz");
console.log(res);
}```
### Document Deletion Test
```js
import xk6_couchbase from 'k6/x/couchbase';const client = xk6_couchbase.newClient('localhost', '', '');
export default () => {client.remove("test", "_default", "_default", "002wPJwiJArcUpz", doc);
}```
### Query test
```js
import xk6_couchbase from 'k6/x/couchbase';const client = xk6_couchbase.newClient('localhost', '', '');
export default () => {
var res = client.find("select * from test._default._default use keys \"00096zszpZaT47X\"");//console.log(res);
}
```### Query using a prepared statement
```js
import xk6_couchbase from 'k6/x/couchbase';const client = xk6_couchbase.newClient('localhost', '', '');
export default () => {
var res = client.findByPreparedStmt("select * from test._default._default use keys \"00096zszpZaT47X\"");//console.log(res);
}
```### Upsert test
#### Initial data load is expected. Data with sequential Id's could be generated with below script. File - examples/load-sequential-data.js```js
import xk6_couchbase from 'k6/x/couchbase';
const jobConfig = {
vus: 10,
count: 10000
}
export const options = {
scenarios: {
contacts: {
executor: 'per-vu-iterations',
vus: jobConfig.vus,
iterations: jobConfig.count
},
},
};
const client = xk6_couchbase.newClient('localhost', '', '');
export default function () {
let doc = {
correlationId: `test--couchbase`,
title: 'Perf test experiment',
url: 'example.com',
locale: 'en',
time: `${new Date(Date.now()).toISOString()}`
};let docId = ((__VU - 1) * jobConfig.count) + __ITER;
client.insert("test", "_default", "_default", String(docId), doc);
}
```
#### Upsert test script to generate random id in range and excute Upsert. File - examples/test-upsert.js
```js
import xk6_couchbase from 'k6/x/couchbase';
import {randomIntBetween} from 'https://jslib.k6.io/k6-utils/1.2.0/index.js';const client = xk6_couchbase.newClient('localhost', '', '');
export default () => {let doc = {
correlationId: `test--couchbase`,
title: 'Perf test experiment',
url: 'example.com',
locale: 'en',
time: `${new Date(Date.now()).toISOString()}`,
randomNo: randomIntBetween(0,1000000)
};
client.upsert("test", "_default", "_default", String(randomIntBetween(0, 100000)), doc);
}
```