LoadRunner生成唯一值
LoadRunner生成唯一數
void Main() { int i; char uStr[64]; srand( (unsigned)time( NULL ) );// 最好放在vuser_init里 for (i=0;i<10;i++) { GetUniqueString(i,uStr); lr_output_message(uStr); } } void GetUniqueString(int inValue,char *outStr) { int id, scid; char *vuser_group; lr_whoami(&id, &vuser_group, &scid); web_save_timestamp_param("tStamp", LAST); sprintf(outStr,"%s%05d%010d%04d",lr_eval_string("{tStamp}"),id,rand(),inValue); free(vuser_group); } |
建議把隨機種子(srand( (unsigned)time( NULL ) );)放在腳本初始化函數里,只需要初始化一次。若放在子函數里,每次調用都初始化一下的話,產生的隨機數可能是一樣的。是不安全的代碼!這個唯一數,有四關:毫秒級的時間+虛擬用戶ID+隨機數+傳入的參數;基本上在同一個Controller里不會出現重復了!再稍微處理一下就可以得到想法的東西了,譬如:LoadRunner實現:計算字符串Md5 加密成md5串,再改裝一下就成GUID了!
這里有一個安全問題值得說明,隨機種子最好只初始化一次,隨機數的算法是和時間有一定關系的。若把隨機種子放在子函數里,你會發現生成出來的隨機數都是一樣的。
不要驚訝,為什么說是個安全問題,說嚴重一點,隨機數是一種算法,有可能被別人劫獲并計算出下一個隨機值,故不安全!
posted on 2013-12-25 10:36 順其自然EVO 閱讀(241) 評論(0) 編輯 收藏 所屬分類: loadrunner