51Testing软件测试论坛

标题: 如何算取HASHCODE值 [打印本页]

作者: yhmin    时间: 2007-5-7 14:56
标题: 如何算取HASHCODE值
在使用LR性能测试的过程中,有一个网页需要根据用户登陆的时间,IP值算出一个挑战值.

然后再用一个算号器算出一个密码,输入后即可正常登陆系统.

例如,挑战值是117851010540600   那算号器算出来的密码应该是 -396694025

这个算号器是JAVA算出来的.

String testString = new String("117851010540600");
String pwd = testString.hashCode(testString);

经过查找hashCode方法的源代码.用JAVA还原出来就是:

public static int getHashCode(String s){
       int hash = 0;      
       int off = 0;
       char val[]= s.toCharArray();
        int len = s.length();
        for (int i = 0; i < len; i++) {
            hash = 31*hash + val[off++];
        }
        return hash;
    }

遇到一个问题,在LR中,用WEB_REG_SAVE_PARAM可以得到117851010540600
但是没办法进行HASH的计算.因为LR的脚本是基于C的.int的长度不够,算出来的值不对.

哪位知道怎么处理好一点,不想使用基于JAVA的脚本呀.

[ 本帖最后由 yhmin 于 2007-5-7 15:33 编辑 ]
作者: vacation9    时间: 2007-5-7 16:45
把 int 类型转换为字符串 (string) 类型试试
作者: yhmin    时间: 2007-5-7 16:51
但是要做四则运算的呀
作者: selon    时间: 2007-5-8 10:54
这样可以吗?
Action()
{
        char mystr[15] = "117851010540600";
        int pwd;
        pwd = getHashCode(mystr);
        lr_message("pwd %10d",pwd);
        free(mystr);
        return 0;
}
int getHashCode(char str[]){
        int hash = 0;
        int off = 0;
        int len = strlen(str);
        int i;
        for(i = 0 ; i < len ; i++){
                hash = 31*hash + str[off++];
        }
        return hash;
}

结果:
Virtual User Script started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
pwd -396694025
Ending action Action.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.

[ 本帖最后由 selon 于 2007-5-8 11:18 编辑 ]
作者: rickyzhu    时间: 2007-5-8 10:59
不想用Java的脚本,就把这段java代码用c重写就可以了啊,呵呵

不过别问我怎么写,我对c不熟,sdlkfj1
作者: selon    时间: 2007-5-8 11:30
总觉得在LR里写这个东东有点不伦不类
作者: yhmin    时间: 2007-5-8 13:45
谢谢楼上几位给出的好的建议(甚至代码),问题已经解决.现在脚本已经很好的跑起来了.哈哈

还是因为对C不熟悉,所以当时没能搞定,也有一部分是当局者迷的原因.

问题可能就出在"10d"这个东东上面. 格式,格式.真的要好好复习一下谭浩强老师的C语言教材了.




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2