【性能腳本】list數據參數化

在dubbo接口請求時
有一些參數是列表格式,如學生id列表:

["001","002"]

有一些是列表中爲字典信息,如:

[{
  	 "uid": "001",
     "realName": "swqa1"
 },{
 	"uid": "002",
    "realName": "swqa2"
 }]

在參數請求中需要構造這些數據呢?
如果是一樣的數據,服務端和數據庫會對數據進行緩存,需要請求不一樣對數據,那怎麼實現請求的列表格式,並且不同的線程間的數據是不一樣的呢?

beanshell處理

使用beanshell讀取csv文件多行數據,並組裝成列表格式
beanshell 中 使用 ${__CSVRead(.\cv.csv,next)}; 獲取csv文件數據,然後循環將數據放進數組中

List aList = new ArrayList();
for (int i=0; i<2; i++) {
	String a = "${__CSVRead(.\cv.csv,0)}";
	aList.add(a);
}

vars.putObject("aList",aList);

當for循環時,__CSVRead每次讀取一樣的數據,如果按照如下這樣的方式時纔會往下一行讀取數據

List aList = new ArrayList();
String a = "${__CSVRead(.\cv.csv,0)}";
aList.add(a);

String b = "${__CSVRead(.\cv.csv,0)}";
aList.add(b);
vars.putObject("aList",aList);

並且這樣beanshell的處理方式,會對肉雞的性能造成一定的損耗

讀取csv列表數據

使用腳本將數據生成爲對應的list數據,並寫入到預先的csv文件中,直接讀取csv變量即可

LIST_LEN = 50
def parse_list(data_org):
    """
    將數據處理爲列表
    :return:
    """
    data_w = []
    for i in range(int(len(data_org)/LIST_LEN)):
        data_list = []
        for j in range(LIST_LEN):
            data_list.append(data_org[i*LIST_LEN+j][0])
        data_w.append([data_list])
    return data_w

建議使用最後一種方式,事先生成列表數據,在壓測時直接讀取壓測的列表數據即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章