問題是這樣的:我想用strcpy函數把一個字符串賦給一個變量,再將這字符串做一個參數化,然后我想看看參數化是否成功,于是我用了lr_message函數把它打印出來。腳本代碼很簡單,如下所示:
Action()
{
char a[10];
strcpy(a,"{a}");
lr_message(a);
return 0;
}
其中,{a}我已經做了參數化,參數值為11。
運行這個腳本后,發現運行日志里打印出來的a值顯示為{a}。
在嘗試了N遍以后,我把lr_message(a);這句代碼改成lr_message(lr_eval_string(a));后問題解決,運行日志里打印出了我所期望的值11。
問題雖然解決了,但我還是很納悶,為什么在用lr_message的時候不能直接引用參數,而我記得之前在web_url、web_submit_data等函數里都是可以直接引用參數化的值,而從來沒有出現過問題。也許是在LoadRunner里,這幾個函數對參數值的引用方式不同吧,不知道我這樣想是否正確,希望大家批評指正!
昨天和Zee討論了一個下午,結論還是沒有明確。今天上午繼續試驗,試驗結果表明Zee說的是正確的,不能直接將C語言里的變量直接當作LR變量使用,而需要做一些轉換。事實上,執行strcpy(a,"{a}");后,并沒有真正將參數值傳給a。需要這樣寫:strcpy(a,lr_eval_string("{a}"));這樣就沒問題了。
不過,問題還沒有結束,在tuxedo協議中,用 lrt_strcpy函數則沒有這個問題存在,例如:lrt_strcpy(sendBuf1, sendBuf);則可以成功地將sendBuf中的參數值賦值給sendBuf1。目前懷疑是該函數在內部已經進行過轉換,但并不肯定,尚待證實。
再次針對以上問題進行試驗,我在lrt_strcpy(sendBuf1, sendBuf);語句的前后各加了一句調試信息:lr_output_message("sendBuf:%s",sendBuf);
和lr_output_message("sendBuf1:%s",sendBuf1);
打印出來的結果截然不同,前者的輸出顯示沒有傳入參數值,而后者則成功傳入參數。這表明確實是lrt_strcpy這個函數在搞鬼。
至此,這個問題可以圓滿結束了!感謝Zee同學的熱情解答!^_^
文章來源于領測軟件測試網 http://www.kjueaiud.com/