本文为博主原创,未经许可严禁转载。
本文链接: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