接口自动化测试之复杂场景实践【一】

本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/116798396

最近我有部分工作是 要往公司的接口自动化测试平台写入 我测得需求中 几个接口的场景;实操几小时后,我有点不满意,想着自己再搞一搞。

接口自动化测试框架的category ,有兴趣,来看一看。

个人博客:https://blog.csdn.net/zyooooxie

需求

简单介绍下 实际请求和设计的场景:

0,session接口【获取用户的sessionId】
1,A接口【购买礼包】:清理表里购买记录-发请求 购买-查看表里的购买记录(支付状态为0);
2,B接口【领取免费礼包–购买0元的礼包】:清理表里的购买记录-发请求 领取-查看表里的购买记录(支付状态为1);
3,C接口【查询购买记录】:修改表里的购买记录(支付状态为1)-发请求 查询;
4,D接口【礼包类型–不同用户、条件不同、礼包不同】:请求大数据的接口 修改用户的某属性-发请求 查询;
5,E接口【抽奖】:修改Redis数据-拥有不同抽奖次数;

技术点 有 :前置请求 、操作数据库、修改Redis数据

Python脚本

方法-获取当前日期所在周 周一的日期

@File: get_current_monday.py

def get_monday_func(test_date: str = None):

    now = datetime.date.today()

    if test_date is not None:
        now = datetime.datetime.strptime(test_date, '%Y%m%d')

    abc = now - datetime.timedelta(days=now.weekday())
    Log.info(abc)

    return abc.strftime('%Y%m%d')

前置请求-修改用户的某属性

@File: modify_big_data.py
【有删减】

xie = "zyooooxie%csdn%3D"

def modify_data(send_num: int, dec_count: int = 0, dec_state: str = '0', dec_date: str = None):
    data_dict = {
    
    
        "mobile_secret": xie,

        "dec_count": dec_count,
        "dec_state": dec_state,
        "dec_date": dec_date,
        "send_num": send_num}

    res = requests.post(url=''.join(['http://', gl_ip, ':', gl_port, '/', gl_url]), json=data_dict)
    res_dict = res.json()
    assert res_dict['created'] is False
    assert res_dict['result'] == 'updated'

session接口

@File: get_session_id.py


def get_session_id_func(mobile: int = base_phone):
    url = "/getSession"

    res = requests.post(url=''.join([base_url, url]), json={
    
    'mobile': mobile}, verify=False)
    res_json = res.json()

    session_id = res_json['obj']['sessionId']
    user_id = res_json['obj']['userId']
    Log.info('sessionId: {}、userId:{}'.format(session_id, user_id))
    return session_id, user_id

实际脚本

@File: test_send_requests.py
【有删减】

A接口【购买礼包】

清理表里购买记录-发请求 购买-查看表里的购买记录(支付状态为0)


def test_5():
    db, cur = connect_db()

    # session, user = get_session_id_func()

    try:
        cur.execute("""DELETE FROM pay_record WHERE USER_ID = '{}' ;""".format(user))
    except Exception as e:
        Log.info(e.args)

    res_json = send_req(session, gl_buy_url, {
    
    "packetType": "S_B", "paySource": "WEIXIN"})
    assert res_json['success'] is True
    assert res_json['obj']['goodsDesc'].find('套餐') != -1

    data = exe_sql(db, cur, """SELECT PACKET_TYPE,PAY_STATUS FROM pay_record WHERE USER_ID = '{}';""".format(user))

    assert data[0][0].find('S_B') != -1
    assert data[0][1] == 0

B接口【领取免费礼包–购买0元的礼包】

清理表里的购买记录-发请求 领取-查看表里的购买记录(支付状态为1)

def test_2b():
    modify_data(85)      # 前置-修改属性
    sleep(1)

    # session, user = get_session_id_func()

    db, cur = connect_db()
    try:
        cur.execute("""DELETE FROM pay_record WHERE USER_ID = '{}' ;""".format(user))
    except Exception as e:
        Log.info(e.args)

    res_json = send_req(session, gl_free_url, {
    
    "packetType": "F"})

    assert res_json['errorMessage'] is None
    assert res_json['success'] is True

    data = exe_sql(db, cur, """SELECT PACKET_TYPE,PAY_STATUS FROM pay_record WHERE USER_ID = '{}';""".format(user))

    assert data[0][0].find('F') == 0
    assert data[0][1] == 1
    

C接口【查询购买记录】

购买 -修改表里的购买记录(支付状态为1)-发请求 查询


def test_6():
    test_5()		# 购买
    db, cur = connect_db()

    # session, user = get_session_id_func()

    try:
        cur.execute("""UPDATE pay_record SET PAY_STATUS = 1 WHERE USER_ID = '{}';""".format(user))
    except Exception as e:
        Log.info(e.args)

    res_json = send_req(session, gl_query_record_url, {
    
    })
    assert res_json['success'] is True
    assert res_json['obj'][0]['recordTime'] is not None
    assert res_json['obj'][0]['recordTime'] == datetime.date.today().strftime('%Y-%m-%d')
    close_db(db, cur)

D接口【礼包类型–不同用户、条件不同、礼包不同】

请求大数据的接口 修改用户的某属性-发请求 查询


def req_index():
    # session, user = get_session_id_func()

    res_json = send_req(session, gl_index_data_url, {
    
    })

    assert res_json['success'] is True
    assert res_json['obj']['EndTime'].replace('-', '') == ' '.join([get_date_14days(), '23:59:59'])

    return res_json


def test_3():
    modify_data(85, dec_count=1, dec_state='1', dec_date=get_monday_func())      # 前置-修改属性
    sleep(1)

    res_json = req_index()
    assert res_json['obj']['sB']['awardType'] == 'p1'

def test_4a():
    modify_data(85, dec_count=2, dec_state='1', dec_date=get_monday_func())      # 前置-修改属性
    sleep(1)

    res_json = req_index()
    assert res_json['obj']['sB']['awardType'] == 'p2'


def test_4b():
    modify_data(86, dec_count=3, dec_state='1', dec_date=get_monday_func())  # 前置-修改属性
    sleep(1)

    res_json = req_index()
    assert res_json['obj']['sB']['awardType'] == 'p2'

E接口【抽奖】

修改Redis数据-拥有不同抽奖次数

def test_10():
    # 修改Redis数据
    test_memday2()
    Log.info('Redis数据 已经修改')

    # session, user = get_session_id_func()

    data_dict = {
    
    "activityType": 3}

    for _ in range(6):
        res_json = send_req(session, gl_another_url, data_dict)

        assert res_json['success'] is True
        assert res_json['obj'].find('LB') == 0



def redis_connect(host: str, port: int, pwd: str):
    # 设置 decode_responses=True,写入的 Key/Value 对中的 Value 为 string 类型
    pool = redis.ConnectionPool(host=host, port=port, decode_responses=True, password=pwd, db=0)
    rd = redis.Redis(connection_pool=pool)
    return rd

def test_memday2():
    s_host = 'zyooooxie'
    s_port = 8080
    s_pwd = 'csdn'
    hash_name = 'abc:ABC:123'

    rd = redis_connect(s_host, s_port, s_pwd)
    rd.hset(hash_name, 'Channce', '6')
    

本文链接:https://blog.csdn.net/zyooooxie/article/details/116798396

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

猜你喜欢

转载自blog.csdn.net/zyooooxie/article/details/116798396