{eval=Array;=+count(Array);}
1、背景
最近的性能測試中,壓測的某些接口返回的數(shù)據(jù)是一個復(fù)雜的json格式的字符串,而后續(xù)的接口中又需要把這個字符串修改后作為入?yún)ⅲ约禾幚砥饋肀容^麻煩。于是想到了把cjson編譯成動態(tài)鏈接庫在loadrunner的腳本中調(diào)用。另外,由于實(shí)際壓測用的是部署在linux上的負(fù)載機(jī),還需要再編譯一個linux上的動態(tài)鏈接庫。這樣在調(diào)試時使用windows平臺的dll,而在壓測時使用linux平臺的so。 先附上我編譯好的動態(tài)鏈接庫,可以直接在loadrunner中使用http://download.csdn.net/download/ultrahook/10126401
2、cjson
cjson是一個開源的json庫,它的優(yōu)勢在于完全用c實(shí)現(xiàn),因此適用性相當(dāng)廣,用在loadrunner中也是毫無壓力。它的git主頁是https://github.com/DaveGamble/cJSON。
3、windows平臺
在代碼中加載cjson.dll,然后就可以使用cjson的函數(shù)了。先嘗試一下,
注意這里cjson_Version返回的是指針,但loadrunner認(rèn)為是int,所以要顯式轉(zhuǎn)成指針,不然編譯不通過。
再看cjson解析字符串的函數(shù)。它的用法如下:
這里需要用到cJSON.h中聲明的結(jié)構(gòu)體cJSON,但直接引用cJSON.h在loadrunner中編譯不過。這個也有解決辦法,把cJSON.h中cJSON這個結(jié)構(gòu)體的定義代碼復(fù)制到action的頂部就可以了,如圖 cJSON.h中其他的變量或者宏也可以,如果編譯時報錯,復(fù)制過來就可以了。
4、Linux平臺
下面再編譯一個linux平臺上的動態(tài)鏈接庫,用在linux負(fù)載機(jī)上。 cjson的代碼中帶了MakeFile,也有cmake,可以直接編譯。但如果linux系統(tǒng)是64位的,則默認(rèn)編譯的是64位的so,無法被loadrunner加載,會提示“wrong ELF class: ELFCLASS64”。我們需要手動修改MakeFile,讓它編譯一個32位的so。 1. 修改cJSON源碼根目錄下的MakeFile 打開MakeFile,分別在29、31、93、96行,增加-m32,如圖 2. 在源碼根目錄下執(zhí)行
如果出現(xiàn)提示“fatal error: sys/cdefs.h: No such file or directory”,需要再裝一個依賴庫
3. 編譯成功后,會得到名為libcjson.so.1.6.0的動態(tài)鏈接庫。把它復(fù)制到loadrunner腳本的根目錄下,同樣菜單File-Add file to script,增加到腳本中。 4. 在腳本中加載so,這步和windows上是一樣的。這樣腳本就可以在linux下運(yùn)行了。linux上安裝負(fù)載機(jī)可以參考我的另一篇文章http://blog.csdn.net/ultrahook/article/details/78524182。
5、遺留問題
最后有個遺留問題,loadrunner似乎不支持平臺宏,我想用宏控制,在windows下加載dll,linux下加載so,但沒有找到解決方法。
首先謝邀。
windows上的動態(tài)鏈接庫一般是指dll文件,linux上的動態(tài)鏈接庫一般是指so文件。
so文件是一個共享庫,用來動態(tài)鏈接的shared object,下面示范怎么在windows平臺上編譯so文件,實(shí)質(zhì)是模擬linux使用GCC環(huán)境來編譯so文件,工具采用vs2008。
1 打開vs2008,新建一個win32的控制臺項目,然后新建mathunit,c和mathunit.h兩個文件,文件的內(nèi)容如下所示:
mathunits.c
mathunits.h
然后在該項目的主函數(shù)(main)中進(jìn)行調(diào)用測試。(注意vs2008中的main函數(shù)跟別的不太一樣)
在編譯開始之前要將vs2008設(shè)為C的編譯。下面使用GCC進(jìn)行編譯:
1 運(yùn)行CyqWin.bat設(shè)置編譯路徑到上面mathunits.h和mathunits.c目錄。
2 將.c文件編譯為.o文件 gcc -c mathunits.c
3 接著將o文件進(jìn)行打so文件 gcc -shared -fPCI -o libdyunits.so mathunits.o
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答