api method

from requests.packages.urllib3.exceptions import InsecureRequestWarning,InsecurePlatformWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

requests.packages.urllib3.disable_warnings(InsecurePlatformWarning)

 

 

#获取cookie

def generate_cookies():

    loginUrl = setting.HOST + 'api/users/login'

    _data = {

        'phone': setting.PHONE,

        'password': cypto_plain.crypto_by_call_client_java(setting.PHONE_PASSWORD),

        'persistent': 'true' }

    r = requests.post(url = loginUrl, data = _data,verify=False)

    _cookies = r.cookies.get_dict()

 

    return _cookies

 

def get_cookies():

    try:

        file = open(setting.COOKIE_TXT,'r')

        cookies = pickle.load(file)

        file.close()

        base_url = setting.HOST + 'profile/api/user-info'

        status_code = requests.get(url = base_url,cookies=cookies,verify=False).status_code

        if status_code == 200:

            return cookies

        else:

            save_cookies()

    except:

        return save_cookies()

 

def save_cookies():

    file = open(setting.COOKIE_TXT,'w')

    cookies = generate_cookies()

    pickle.dump(cookies,file)

    file.close()

    return cookies

 

#获取当天零点时间

def get_zerotime():

    tm = int(time.time())

    dt = datetime.datetime.fromtimestamp(tm).strftime('%Y%m%d%H%M%S')

    d_time = time.strptime(dt, '%Y%m%d%H%M%S')

    dd_time = datetime.datetime(*d_time[:3])

    i_et = int(time.mktime(dd_time.timetuple()))

    return i_et

 

  

def get_verification(phone):

    pkey_file = setting.PKEY

    key = paramiko.RSAKey.from_private_key_file(pkey_file)

    # key = paramiko.DSSKey.from_private_key(pkey)

    s = paramiko.SSHClient()

    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    s.load_system_host_keys(pkey_file)

    cmd = 'tail /home/shared/log/fenbi-verifier.log|grep "Send Phone Verification: '+ phone + '"'

    try:

        s.connect(hostname = 'soho-ape-fenbi-verifier1-test',port = 22, username ='ape', pkey = key)

    except paramiko.AuthenticationException:

        print "Auth Failed!"

        sys.exit(1)

    except paramiko.socket.error:

        print "Server is unreachable!"

        sys.exit(2)

    else:

        stdin,stdout,stderr = s.exec_command(cmd)

 

    # p = Popen(cmd, shell=True,stdin=PIPE, stderr=STDOUT, close_fds=True)

    output =  stdout.read()

    stdin.flush()

    verification = output[-7:-1]

    print output

 

    return verification

 

 

def cmp_dict(c1,c2):

    if not c1 and not c2:

        print "字典为空"

    else:

        c1_key = sorted(c1.keys())

        c2_key = sorted(c2.keys())

        print "c1_key:",c1_key

        print "c2_key:",c2_key

        assert c1_key==c2_key

        for i in c1_key:

            print i+"_value1:", c1[i]

            print i+"_value2:", c2[i]

            cmp(c1[i],c2[i])

 

 

def cmp_dict1(c1,c2):

    if not c1 and not c2:

        print "字典为空"

    else:

        c1_key = sorted(c1.keys())

        c2_key = sorted(c2.keys())

        print "c1_key:",c1_key

        print "c2_key:",c2_key

        c1_key_size = len(c1_key)

        c2_key_size = len(c2_key)

        size = c1_key_size if c1_key_size<c2_key_size else c2_key_size

        for i in range(size):

            print c1_key[i]+"_value1:", c1[c1_key[i]]

            print c2_key[i]+"_value2:", c2[c2_key[i]]

            if c1_key[i].isdigit():

                cmp1(c1[c1_key[i]],c2[c2_key[i]])

            else:

                assert c1_key[i]==c2_key[i]

                cmp1(c1[c1_key[i]],c2[c2_key[i]])

 

 

def cmp_list(c1,c2):

    c1 = sorted(c1)

    c2 = sorted(c2)

    if c1 and c2:

        cmp(c1[0],c2[0])

    elif c1==[] and c2 ==[]:

        print "列表都为空"

 

def cmp_list1(c1,c2):

    c1 = sorted(c1)

    c2 = sorted(c2)

    if c1 and c2:

        cmp1(c1[0],c2[0])

    elif c1==[] and c2 ==[]:

        print "列表都为空"

 

 

def cmp(c1,c2):

    t1 = type(c1)

    t2 = type(c2)

    print t1,t2

    if t1 != t2:

        return False

    else:

        if t1 == dict:

            return cmp_dict(c1,c2)

        elif t1 == list:

            return cmp_list(c1,c2)

 

 

def cmp1(c1,c2):

    t1 = type(c1)

    t2 = type(c2)

    print t1,t2

    if t1 != t2:

        return False

    else:

        if t1 == dict:

            return cmp_dict1(c1,c2)

        elif t1 == list:

            return cmp_list1(c1,c2)

 

 

def cmp_content(content,case_name,num=""):

    content_map = {}

    print case_name+num

    print content

    if (os.path.exists(setting.content_path)) and (case_name+num in open(setting.content_path).read()):

        flag = 1

        content_str = open(setting.content_path).read()

        content_str = content_str.replace('}{"Test_',', "Test_').replace('}{"TestDev_',', "TestDev_')

        content_map = json.loads(content_str)

    else:

        flag = 0

 

    if flag == 0:

        content_map[case_name+num] = content

    else:

        content_txt = content_map[case_name+num]

        cmp(content,content_txt)

 

    if flag == 0:

        f = open(setting.content_path,'a')

        f.write(json.dumps(content_map))

        f.close()

 

 

def cmp_content1(content,case_name,num=""):

    content_map = {}

    print case_name+num

    print content

    if (os.path.exists(setting.content_path)) and (case_name+num in open(setting.content_path).read()):

        flag = 1

        content_str = open(setting.content_path).read()

        content_str = content_str.replace('}{"Test_',', "Test_').replace('}{"TestDev_',', "TestDev_')

        content_map = json.loads(content_str)

    else:

        flag = 0

 

    if flag == 0:

        content_map[case_name+num] = content

    else:

        content_txt = content_map[case_name+num]

        cmp1(content,content_txt)

 

    if flag == 0:

        f = open(setting.content_path,'a')

        f.write(json.dumps(content_map))

        f.close()

 

def loop(var, key):

    if type(var) == type({}):

        for (k, v) in var.items():

            key[k] = v

            loop(v, key)

    if type(var) == type([]):

        for v in var:

            loop(v, key)

 

 

def parser(var):

    var = json.loads(var)

    key = {}

    keys = []

    loop(var, key)

    for (k, v) in key.items():

        keys.append(k)

    return keys

 

 

def get_httpReq(url,code,params=None,**kwargs):

    resp = requests.get(url,verify=False,params=params,**kwargs)

    status_code = resp.status_code

    print "status_code:" ,status_code

    assert status_code == code

    content = json.loads(resp.content)

    return content

 

 

def post_httpReq(url,code,data=None,**kwargs):

    resp = requests.post(url,verify=False,data=data,**kwargs)

    status_code = resp.status_code

    print "status_code:" ,status_code

    assert status_code == code

    content = json.loads(resp.content)

    return content

 

def post_httpReq_no_content(url,code,data=None,**kwargs):

    resp = requests.post(url,verify=False,data=data,**kwargs)

    status_code = resp.status_code

    print "status_code:" ,status_code

    # print "content:",resp.content

    assert status_code == code

 

def put_httpReq(url,code,data=None,**kwargs):

    resp = requests.put(url,verify=False,data=data,**kwargs)

    status_code = resp.status_code

    print "status_code:" ,status_code

    assert status_code == code

    content = json.loads(resp.content)

    return content

 

def put_httpReq_no_content(url,code,data=None,**kwargs):

    resp = requests.put(url,verify=False,data=data,**kwargs)

    status_code = resp.status_code

    print "status_code:" ,status_code

    assert status_code == code

 

def delete_httpReq(url,code,**kwargs):

    resp = requests.delete(url,verify=False,**kwargs)

    status_code = resp.status_code

    print "status_code:" ,status_code

    assert status_code == code

 

 

 

 

# 操作redis来获取验证码

def add_verification(phone):

    createdTime = int(time.time())*1000

    veri = int(str("%.6f" % time.time()).split('.')[1])

    r = redis.Redis(host=setting.redis_host,port=setting.redis_port,db=0,password=setting.redis_pwd)

    name = 'vri_phvri:%s'%phone

    value = '{"phone":%s,"verification":%s,"createdTime":%s}'%(phone,veri,createdTime)

    r.set(name,value,ex=60)

    return veri

 

 

 

#获取cookie

def generate_cookies_1(phone,pwd):

    loginUrl = setting.HOST + 'api/users/login'

    _data = {

        'phone': phone,

        'password': cypto_plain.crypto_by_call_client_java(pwd),

        'persistent': 'true' }

    r = requests.post(url = loginUrl, data = _data,verify=False)

    _cookies = r.cookies.get_dict()

 

    return _cookies

 

def get_cookies_1(txt,phone,pwd):

    try:

        file = open(txt,'r')

        cookies = pickle.load(file)

        file.close()

        base_url = setting.HOST + 'profile/api/user-info'

        status_code = requests.get(url = base_url,cookies=cookies,verify=False).status_code

        if status_code == 200:

            return cookies

        else:

            return save_cookies_1(txt,phone,pwd)

    except:

        return save_cookies_1(txt,phone,pwd)

 

def save_cookies_1(txt,phone,pwd):

    file = open(txt,'w')

    cookies = generate_cookies_1(phone,pwd)

    pickle.dump(cookies,file)

    file.close()

    return cookies

 

def str_generator(size=6, chars=string.ascii_uppercase + string.digits):

    str =  ''.join(random.choice(chars) for x in range(size))

    print str

    return str

 

 

 

 

import sys

import os

 

if __name__ == '__main__':

    os.system("rm conf/cookies*")

    if sys.argv[1] == "test":

        os.system("cp conf/setting_test.py conf/setting.py")

        os.system("nosetests Test_teacher/ --with-xunit")

    if sys.argv[1] == "online":

        os.system("cp conf/setting_online.py conf/setting.py")

        os.system("nosetests Test_teacher/Test_*.py --with-xunit")

 

 

 

 

posted @ 2019-01-08 18:22  hayabky  阅读(306)  评论(0)    收藏  举报