我們用多個用戶(vus)和多個迭代(iterations)在特定時間內運行Get http請求。 它就像下面這樣簡單明了。
從'k6/http'匯入 http。
import { sleep } from 'k6';
export let options ={
vus:'10',
duration: '20s',
迭代次數。'10'
}
出口默認函式(){
const baseUri = 'http://Myhost:3200'
let response = http.get(`${baseUri}/api/v1/vm-inventory`)
讓body = JSON.parse(response.body)
body.items.forEach(element => {
如果(element.datastoreIds.length != 0 ){
console.log(JSON.stringify(element))
console.log(`vm的名稱是${element.name}`)
}
});
sleep(1);
}
我還需要通過多個用戶和多個迭代來運行帖子請求。但是我看到的所有例子都是與單次請求有關的。當我們運行多個post請求時,我們的資料需要在每個迭代中被改變。這在k6中是如何實作的?下面是我的帖子請求。
import http from 'k6/http';
import { sleep } from 'k6';
export let options ={
vus:'5',
duration: '120s',
迭代次數。'5'
}
讓payload = `{
"VMId": "70c8b578-32ef-40d2-bcc5-81267423d2c4",
"name": "test_vm_1",
"mem": "4,
"cpu": "2",
"磁盤": "50GB"
}`
出口默認函式() {
const url = 'http://myhost:3200/api/v1/vm-inventory'
var header = {
headers: {
'Content-Type': 'application/json',
},
};
let res = http.post(url, JSON.stringify(payload),header);
console.log(res.json().json.name)。
sleep(5);
}
我需要在每次迭代時改變payload中的Vm名稱,以便使請求是唯一的。 如何在k6中實作這一點?在Jmeter中,他們從csv中讀取每個迭代的不同資料并實作它。但我找不到任何K6的例子。
uj5u.com熱心網友回復:
我們需要在匯出默認函式內創建有效載荷,這樣我們就可以在發送之前在那里修改它。如果VMId只是需要一個唯一的UUID,可以看看jslib utils庫,它包含了一個生成uuidv4的函式:
把它放在一起: (注意,我已經將有效載荷改為JS物件,這樣它就不會被兩次串聯)。 我們也可以像下面那樣使用payload。
__VU將給出虛擬用戶的編號,這樣我們就可以創建test_vm_vu_1,test_vm_vu_3,test_vm_vu_2。(它將被并行運行,所以編號不會按順序出現)
標籤:export函式是一個很好的例子。
匯出函式uuidv4() {
return 'xxxxxxx-xxxx-4xxx-yxxx-xxxxxxxx'.replace(/[xy]/g, function(c) {
let r = Math.random() * 16 | 0, v = c =='x' ? r : (r & 0x3 | 0x8);
回傳v.toString(16)。
});
}
從'k6/http'中匯入http。
import { sleep } from 'k6';
export let options = {
vus: '5',
duration: '120s',
迭代次數。'5'
}
出口默認函式() {
讓payload = {
VMId: uuidv4(),
name: `test_vm_${Date.now()}`,
mem: 4,
cpu: 2,
磁盤。"50GB"
};
const url = 'http://myhost:3200/api/v1/vm-inventory'
var header = {
headers: {
'Content-Type': 'application/json',
},
};
let res = http.post(url, JSON.stringify(payload), header);
console.log(res.json().json.name)。
sleep(5);
}
export function uuidv4() {
return 'xxxxxxx-xxxx-4xxx-yxxx-xxxxxxxx'.replace(/[xy]/g, function(c) {
let r = Math.random() * 16 | 0, v = c =='x' ? r : (r & 0x3 | 0x8);
回傳v.toString(16)。
});
}
let payload = {
VMId: uuidv4(),
name: `test_vm_vu_${__VU}`,
mem: 4,
cpu: 2,
磁盤。"50GB"
};
