#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
'''
Author:leo
Date&Time:2019-08-18 and 12:23
FileName:apiTest.py
Description:...
# 導入接口測試庫
import requests,json,time
from pprint import pprint
# 配置fiddler代理,請求後面帶上proxies=proxies, verify=False,就可以通過fiddler攔截請求
# proxies = {'http': 'http://localhost:****', 'https':'http://localhost:****'}
# response = requests.post(url, data=payload, proxies=proxies, verify=False)
# 測試環境Host(ip等銘感信息建議放在單獨的py文件中)
testHost = "127.0.0.1:****"
# 獲取當前時間戳
nowTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
#基本類(後面類都繼承並調用該類)
class Basic:
# 登錄賬戶
def login(self,username,password):
# 儘可能少用globa全局變量
# global cookies
print("\n----登錄賬戶----\n")
url = f"http://{testHost}/api/mgr/loginReq"
payload = {"username":username,"password":password}
response = requests.post(url, data=payload)
loginres = dict(response.json())
self.cookies = dict(response.cookies)
self.sessionid = response.cookies['sessionid']
# print(f"登錄成功:{loginres}...{cookies}")
if loginres["retcode"] == 0:
print(f"登錄成功:{loginres},獲取cookeis:{self.cookies}")
else:
print(f"登錄失敗,賬號或密碼錯誤!錯誤信息:{self.cookies}")
return loginres
# 課程類
class Course(Basic):
def __init__(self,cookies=None):
self.cookies = cookies
# 列出課程
def list_course(self,pagenum,pagesize):
# get請求(參數用params,不用data)
print("\n----列出課程----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
payload = {'action':'list_course','pagenum':pagenum,'pagesize':pagesize}
# params可以避免參數中包含&等特殊字符
listHttp = requests.get(url=url, params=payload,cookies=self.cookies)
listret = listHttp.json()
# print(type(getret))
print(str(listret)+",列出課程信息!")
return listret
# 添加課程
def add_course(self,name,desc,display_idx):
# post請求
print("\n----添加課程----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
headers = {"Content-Type":"application/x-www-form-urlencoded"}
payload = {'action': 'add_course','data': f'{{"name":"{name}","desc":"{desc}","display_idx":{display_idx}}}'}
# payload = {'action': 'add_course','data': '{"name":"%s","desc":"%s","display_idx":%s}'% (name, desc, display_idx)}
addHttp = requests.post(url=url, headers=headers, data=payload,cookies=self.cookies)
addtret = addHttp.json()
# print(type(postret))
pprint(str(addtret)+",添加課程信息!")
return addtret
# 刪除課程
def delete_course(self,cid):
# post請求
print("\n----刪除課程----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
headers = {"Content-Type":"application/x-www-form-urlencoded"}
payload = {'action': 'delete_course','id': cid}
delHttp = requests.delete(url=url, headers=headers, data=payload,cookies=self.cookies)
deltret = delHttp.json()
# print(type(postret))
pprint(str(deltret)+",刪除課程信息!")
return deltret
# 修改課程
def modify_course(self,cid,name,desc,display_idx):
# post請求
print("\n----修改課程----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
headers = {"Content-Type":"application/x-www-form-urlencoded"}
payload = {'action':'modify_course',
'id':cid,
'newdata':
'''
{"name":"%s",
"desc":"%s",
"display_idx":"%s"
}'''%(name,desc,display_idx)
}
delHttp = requests.put(url=url, headers=headers, data=payload,cookies=self.cookies)
deltret = delHttp.json()
# print(type(postret))
pprint(str(deltret)+",修改課程信息!")
return deltret
#老師類
class Teacher(Basic):
def list_teacher(self,pagenum="1",pagesize="100"):
print("\n----列出老師----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
payload = {"action":"list_teacher","pagenum":pagenum,"pagesize":pagesize}
response = requests.get(url=url,params=payload,cookies=self.cookies)
listres = response.json()
pprint(f"{listres}"+",列出老師信息")
return listres
def add_teacher(self,realname,username,desc,display_idx,courses,password='sq888'):
print("\n----添加老師----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
headers = {"Content-Type":"application/x-www-form-urlencoded"}
payload = {"action":"add_teacher",
"data":f'''
{{"realname":"{realname}","username":"{username}","desc":"{desc}","display_idx":{display_idx},
"courses":{json.dumps(courses)},
"password":"{password}"}}'''
}
response = requests.post(url=url,headers=headers,data=payload,cookies=self.cookies)
addres = response.json()
pprint(str(addres)+",新增老師信息!")
return addres
# 刪除老師
def delete_teacher(self, tid):
# post請求
print("\n----刪除老師----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
headers = {"Content-Type": "application/x-www-form-urlencoded"}
payload = {'action': 'delete_teacher', 'id': tid}
response = requests.delete(url=url, headers=headers, data=payload, cookies=self.cookies)
deltret = response.json()
# print(type(postret))
pprint(str(deltret) + ",刪除老師信息!")
return deltret
# 修改老師
def modify_teacher(self,tid,realname,username,desc,display_idx,courses,password='sq888'):
# post請求
print("\n----修改老師----\n")
url = f"http://{testHost}/api/mgr/sq_mgr/"
headers = {"Content-Type": "application/x-www-form-urlencoded"}
payload = {"action": "modify_teacher",
"id":f'{tid}',
"newdata":f'''
{{"realname":"{realname}","username":"{username}","desc":"{desc}","display_idx":{display_idx},
"courses":{json.dumps(courses)},
"password":"{password}"}}'''
}
response = requests.put(url=url, headers=headers, data=payload, cookies=self.cookies)
deltret = response.json()
# print(type(postret))
pprint(str(deltret) + ",修改老師信息!")
return deltret
# 自測函數
if __name__== '__main__':
# ----測試老師
test = Teacher()
# 登錄
loginres= test.login('auto', 'sdfsdfsdf')
# 新增老師
test.add_teacher(f"老師姓名{nowTime}",f"登錄名稱{nowTime}",f"描述{nowTime}",10,
[{"id":1198,"name":"測試課程2019-08-24 13:06:14"},{"id":1199,"name":"測試課程2019-08-24 13:06:47"}])
# 列出老師
test.list_teacher(1,100)
# 修改老師
test.modify_teacher(255,f"老師姓名{nowTime}1",f"登錄名稱{nowTime}1",f"描述{nowTime}1",10,
[{"id":1198,"name":"測試課程2019-08-24 13:06:14"},{"id":1199,"name":"測試課程2019-08-24 13:06:47"}])
# 列出老師
test.list_teacher(1,100)
# 批量循環刪除老師
test.delete_teacher(254)
tlist = test.list_teacher(1,100)
newlist = []
for id in tlist['retlist']:
newlist.append(id['id'])
for i in newlist:
test.delete_teacher(i)
# # #----測試課程
# # 子類繼承父類,可以調用父類的方法
# test = Course()
# # 登錄賬戶
# loginres= test.login('auto', 'sdfsdfsdf')
# # 列出課程
# test.list_course(1,20)
# # 添加課程
# addcourse = test.add_course(f'語文課{nowTime}1','語文描述',5)
# ccid = addcourse['id']
# # 修改課程
# test.modify_course(ccid,f'語文課{nowTime}2','語文描述',5)
# # 刪除課程
# test.delete_course(ccid)