def test_save_play_code(self): """ 课程-保存试炼场用户代码 :return: """ url = f'{self.ip}/course/user/save/playCode' data = { "classId": self.class_id_list[0], "courseId": self.course_id_list[0], "pointId": self.point_id_tup[0], "seriesId": self.series_id_list[0], "userCode": turtle_code() } res = requests.post(url=url, headers=self.teacher_headers, json=data) assert_res(res.text) data_ret = res.json() try: save = data_ret['data'] except TypeError: print(f'接口"/course/user/save/playCode"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/course/user/save/playCode"返回{data_ret}') else: if save: url = f'{self.ip}/course/user/query/playCode' res = requests.post(url=url, headers=self.teacher_headers, json=data) assert_res(res.text) data_ret = res.json() try: print(data_ret['data']) except TypeError: print(f'接口"/course/user/query/playCode"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/course/user/query/playCode"返回{data_ret}')
def test_05_user_course(self): """ 用户最近课程 :return: """ series_id_list = self.teacher_parm.get_series_list() class_id_list = self.teacher_parm.get_class_list() url = f'{self.ip}/index/user/courses' for class_id in class_id_list: for series_id in series_id_list: for f in range(2): data = { "classId": class_id, "flag": f, "pageNum": 1, "pageSize": 10, "seriesId": series_id } res = requests.post(url=url, headers=self.teacher_headers, json=data) assert_res(res.text) time.sleep(1) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: print(f'接口/index/user/courses,返回{data_ret["msg"]}') except KeyError: print(f'接口/index/user/courses,返回{data_ret},与预期不符') else: print([{ i['seriesName']: [i['issueName'], i['planWeeks'], i['flag']] } for i in data_list])
def test_teacher_practises(self): """ 老师查看学生练习 :return: """ all_point_id = [id_dic['id'] for id_dic in self.all_point_resource_id_list] for point_id in all_point_id: url = f'{self.ip}/course/teacher/' \ f'{self.course_id_list[0]}/{self.class_id_list[-1]}/{point_id}/practises' res = requests.get(url=url, headers=self.teacher_headers) assert_res(res.text) time.sleep(1) data_ret = res.json() try: data_dic = data_ret['data'] print(f"{data_dic['practisedCount']}/{data_dic['practiseCount']},{data_dic['avgCorrectRate']}") practises_data = data_dic['practises'] pprint( [ {i['name']: i['correctRate'], 'subject': [{p['name']: p['result']} for p in i['subjects']]} for i in practises_data ] ) print('#################################################') except TypeError: msg = '接口正常,没有数据' \ if data_ret['msg'] == '操作成功' else \ f'接口/common/classes报错,返回{data_ret["msg"]}' print(msg) except KeyError: print(f'接口"/practises"返回{data_ret}')
def test_student_homework_list(self): """ 学生端-作业列表-作业列表查询 :return: """ url = f'{self.ip}/homework/stuHwList' class_id_list = self.student_class_id_list class_id_list.append('') for class_id in class_id_list: for status in ['', 0, 1, 2]: for homework_name in ['', '接口']: data = { "classId": class_id, "currPage": 1, "homeworkName": homework_name, "pageSize": 100, "schoolId": self.school_id, "status": status } res = requests.post(url=url, headers=self.student_headers, json=data) assert_res(res.text) time.sleep(1) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: print(f'接口"/homework/stuHwList"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/homework/stuHwList"返回{data_ret}') else: print([{ i['homeworkId']: i['homeworkName'] } for i in data_list])
def test_student_homework_problem_info(self): """ 学生端-作业题目-详细查询 :return: """ url = f'{self.ip}/homework/stuHwProblemInfo' for p, t in self.student_problem_id_list: data = { "hwId": self.student_homework_id_list[0], "subjectId": p, "subjectType": t } res = requests.post(url=url, headers=self.student_headers, json=data) assert_res(res.text) data_ret = res.json() try: data_dic = data_ret['data'] print((data_dic['problemName'], data_dic['problemAnswer'], data_dic['userCode'])) except TypeError: print(f'接口"/homework/stuHwProblemInfo"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/homework/stuHwProblemInfo"返回{data_ret}')
def test_teacher_homework_problem_info(self): """ 教师端题目查看 :return: """ url = f'{self.ip}/homework/tchHwProblemInfo' for subject_id, subject_type in self.teacher_problem_id_list: data = { "hwId": self.teacher_homework_id_list[0], "studentId": self.student_id, "subjectId": subject_id, "subjectType": subject_type } res = requests.post(url=url, headers=self.teacher_headers, json=data) assert_res(res.text) data_ret = res.json() try: print({ data_ret['data']['problemId']: data_ret['data']['problemName'] }) except TypeError: print(f'接口"/homework/tchHwProblemInfo"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/homework/tchHwProblemInfo"返回{data_ret}')
def test_teacher_homework_student_list(self): """ 教师端-学生成绩列表 :return: """ url = f'{self.ip}/homework/tchHwStuList' data = { "currPage": 1, "hwId": self.teacher_homework_id_list[0], "pageSize": 30 } res = requests.post(url=url, headers=self.teacher_headers, json=data) assert_res(res.text) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: print(f'接口"/homework/tchHwStuList"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/homework/tchHwStuList"返回{data_ret}') else: print([{ i['studentName']: [ i['result'], i['correctCount'], i['finishedCount'], i['level'] ] } for i in data_list])
def test_teacher_homework_current_student_list(self): """ 教师端当前作业学生下拉列表 :return: """ self.teacher_problem_id_list = self.teacher_parm.teacher_get_homework_problem_id_list( ) url = f'{self.ip}/homework/tchHwCurrentStuList' for subject_id, subject_type in self.teacher_problem_id_list: data = { "hwId": self.teacher_homework_id_list[0], "subjectId": subject_id, "subjectType": subject_type } res = requests.post(url=url, headers=self.teacher_parm.headers, json=data) assert_res(res.text) data_ret = res.json() try: print([(i['studentId'], i['studentName'], i['status']) for i in data_ret['data']]) except TypeError: print( f'接口"/homework/tchHwCurrentStuList"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/homework/tchHwCurrentStuList"返回{data_ret}')
def test_teacher_homework_list(self): """ 老师作业列表 :return: """ url = f'{self.ip}/homework/tchHwList' for class_id in list(chain(self.teacher_class_id_list, [''])): for homework_name in ['', '接口']: for status in ['', 1, 2, 3]: # 待定 data = { 'schoolId': self.school_id, 'classId': class_id, 'homeworkName': homework_name, 'pageSize': 30, 'status': status, 'currPage': 1 } res = requests.post(url=url, headers=self.teacher_headers, json=data) assert_res(res.text) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: print(f'接口"/homework/tchHwList"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/homework/tchHwList"返回{data_ret}') else: print([{ i['homeworkId']: i['homeworkName'] } for i in data_list])
def test_06_get_works_hall(self): """ 获取作品大厅列表 :return: """ class_id_list = self.teacher_parm.get_class_list(get_all=True) class_id_list.append('') for class_id in class_id_list: for s in range(2): for k in ['', '测试']: url = f'{self.ip}/pc/play/getPlayWorksHall' params = f'pageNum=1&pageSize=12&sort={s}&keyword={k}&classId={class_id}' print(params) response = requests.get(url=url, headers=self.teacher_headers, params=params) assert_res(response.text) data_ret = response.json() time.sleep(1) try: data_list = data_ret['data']['list'] except TypeError: print(f'接口"/pc/play/getPlayWorksHall"报错,返回{data_ret["msg"]}') print('##############################################################') except KeyError: print(data_ret) print('##############################################################') else: print(f'班级{class_id}', [{i['id']: {i['title']: f"作者:{i['nickname']}"}} for i in data_list]) print('##############################################################')
def test_user_courses(self): """ 用户课程列表 :return: """ url = f'{self.ip}/course/user/courses' for class_id in self.class_id_list: for series_id in self.series_id_list: data = { "classId": class_id, "flag": 1, "pageNum": 1, "pageSize": 12, "seriesId": series_id } res = requests.post(url=url, headers=self.student_headers, json=data) assert_res(res.text) time.sleep(1) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: print(f'接口"/course/user/courses"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口"/course/user/courses"返回{data_ret}') else: print([{i['id']: [i['seriesName'], i['issueName']]} for i in data_list])
def test_01_add_category(self): url = f'{self.ip[:-8]}/ddc-port/play/addSucaiCategory' data = { 'categoryName': '接口添加分类待删' } response = requests.post(url=url, headers=self.student_headers, json=data) assert_res(response.text, '操作成功')
def test_09_work_detail(self): """ 游客通过作品ID获取作品详情 :return: """ works_id_list = self.teacher_parm.get_work_id_list() url = f'{self.ip[:-8]}/ddc-port/play/workDetail' headers = { 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/68.0.3440.84 Safari/537.36' } params = f'worksId={works_id_list[0]}' response = requests.get(url=url, headers=headers, params=params) assert_res(response.text) data_ret = response.json() try: data_dic = data_ret['data'] print(f'作品id:{data_dic["id"]},' f'作品名称:{data_dic["title"]},' f'作者:{data_dic["nickname"]}') except TypeError: print(f'接口"/play/workDetail"报错,返回{data_ret["msg"]}') except KeyError: print(data_ret)
def test_02_detail(self): """ 详情(学生和老师) :return: """ for i in ['student', 'teacher']: url = f'{self.ip}/learning/{i}/detail' \ if 'student' == i else f'{self.ip}/learning/{i}/detail/{self.student_id}' header = self.student_headers if i == 'student' else self.teacher_headers class_id_list = self.student_class_id_list if i == 'student' else self.teacher_class_id_list for series_id in self.series_id_list: for class_id in class_id_list: for flag in ['', 1]: params = f'seriesId={series_id}&classId={class_id}&flag={flag}' \ if flag == 1 else f'seriesId={series_id}&classId={class_id}' res = requests.get(url=url, headers=header, params=params) assert_res(res.text) time.sleep(1) data_ret = res.json() try: print([(d['name'], d['grade'], d['avgGrade']) for d in data_ret['data']]) except TypeError: msg = '接口正常,没有数据' \ if data_ret['msg'] == '操作成功' else \ f'接口/learning/{i}/detail报错,返回{data_ret["msg"]}' print(msg) except KeyError: print(f'接口/learning/{i}/detail,返回{data_ret},与预期不符')
def test_03_detail_page(self): """ 学生-自己详情 老师-学生详情-数据分页 :return: """ for i in ['student', 'teacher']: url = f'{self.ip}/learning/{i}/detail/page' \ if 'student' == i else f'{self.ip}/learning/{i}/detail/page/{self.student_id}' header = self.student_headers if i == 'student' else self.teacher_headers class_id_list = self.student_class_id_list if i == 'student' else self.teacher_class_id_list for series_id in self.series_id_list: for class_id in class_id_list: for flag in ['', 1]: params = f'seriesId={series_id}&classId={class_id}&flag={flag}&pageNum=1&pageSize=30' \ if flag == 1 else f'seriesId={series_id}&classId={class_id}&pageNum=1&pageSize=30' res = requests.get(url=url, headers=header, params=params) assert_res(res.text) time.sleep(1) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: msg = '接口正常,没有数据' \ if data_ret['msg'] == '操作成功' else \ f'接口/learning/{i}/detail/page报错,返回{data_ret["msg"]}' print(msg) except KeyError: print(f'接口/learning/{i}/detail/page,返回{data_ret},与预期不符') else: print([(d['name'], d['grade'], d['avgGrade']) for d in data_list])
def test_04_evaluate(self): """ 学生-自己编程能力 老师-学生详情-编程能力 :return: """ out_list = [] for i in ['student', 'teacher']: url = f'{self.ip}/learning/{i}/evaluate' \ if 'student' == i else f'{self.ip}/learning/{i}/evaluate/{self.student_id}' header = self.student_headers if i == 'student' else self.teacher_headers res = requests.get(url=url, headers=header) assert_res(res.text) time.sleep(1) data_ret = res.json() try: out_list.append([{i['label']: i['score']} for i in data_ret['data']]) print(f'{i}:{[{i["label"]: i["score"]} for i in data_ret["data"]]}') except TypeError: print(f'接口"/learning/{i}/evaluate"报错,返回{data_ret["msg"]}') except KeyError: print(f'接口/learning/{i}/evaluate,返回{data_ret},与预期不符') try: assert out_list[0] == out_list[1] except AssertionError: print('教师和学生数据不一致')
def test_class_list(self): """ 班级管理-列表 :return: """ url = f'{self.ip}/teachcenter/classmanage/list' for t in range(1, 3): for k in ['', '接口']: data = { "classType": t, "currPage": 1, "keyword": k, "pageSize": 30, "schoolId": self.school_id } res = requests.post(url=url, headers=self.manager_param.headers, json=data) assert_res(res.text) time.sleep(1) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: print(f'接口/teachcenter/classmanage/stuList报错,返回{data_ret["msg"]}') except KeyError: print(f'接口/teachcenter/classmanage/stuList返回{data_ret}') else: pprint([(i['classId'], i['className'], i['stuCount']) for i in data_list])
def test_03_get_teacher_list(self): """ 获取老师管理列表 :return: """ url = f'{self.ip}/teachcenter/teachermanage/list' for t in range(1, 4): for k in ['', '接口']: data = { "currPage": 1, "keyword": k, "pageSize": 40, "schoolId": self.school_id, "tchType": t } res = requests.post(url=url, headers=self.manager_headers, json=data) assert_res(res.text) time.sleep(1) data_ret = res.json() try: data_list = data_ret['data']['list'] except TypeError: print( f'接口/teachcenter/teachermanage/list报错,返回{data_ret["msg"]}' ) except KeyError: print(f'接口/teachcenter/teachermanage/list返回{data_ret}') else: pprint([{i['tchId']: i['tchName']} for i in data_list])
def test_08_file_import(self): """ 教师管理-批量导入 :return: """ from requests_toolbelt.multipart.encoder import MultipartEncoder url = f'{self.ip}/teachcenter/teachermanage/fileImport' file_name = 'teacher.xls' with open(f'{self.file_path}upload\\{file_name}', 'rb') as f: m = MultipartEncoder( {'file': (file_name, f, 'application/vnd.ms-excel')}) self.manager_headers['Content-Type'] = m.content_type params = f'schoolId={self.school_id}' res = requests.post(url=url, headers=self.manager_headers, data=m, params=params) assert_res(res.text, '批量导入用户失败') data_ret = res.json() try: print(data_ret['data']['errMsg']) except TypeError: print( f'接口/teachcenter/teachermanage/fileImport报错,返回{data_ret["msg"]}' ) except KeyError: print(f'接口/teachcenter/teachermanage/fileImport返回{data_ret}')
def test_01_post_work(self): """ 上传作品 :return: """ save_draft_for_works(self.teacher_parm) draft_id_list = self.teacher_parm.get_draft_id_list() code = turtle_code() url = f'{self.ip[:-8]}/ddc-port/play/postWork' for p in range(2): data = { "codeList": [ { "fileContent": code, "fileName": "main.py", "fileType": 1, "rwType": 1 } ], "cover": "https://edu-test-1255999742.file.myqcloud.com/portrait/20190527/" "4a60ada1fc0f478ca109f9fe49419328.jpg", "description": "发布接口测试", "draftId": draft_id_list[0], "publishCode": p, "title": f"接口发布作品源代码{p}" } response = requests.post(url=url, headers=self.teacher_headers, json=data) assert_res(response.text)
def test_05_weak(self): """ 学生-自己薄弱统计 老师-学生详情-薄弱统计 :return: """ for i in ['student', 'teacher']: url = f'{self.ip}/learning/{i}/weak' \ if 'student' == i else f'{self.ip}/learning/{i}/weak/{self.student_id}' header = self.student_headers if i == 'student' else self.teacher_headers for series_id in self.series_id_list: params = f'seriesId={series_id}' res = requests.get(url=url, headers=header, params=params) assert_res(res.text) time.sleep(1) data_ret = res.json() try: print([{i['label']: i['grade']} for i in data_ret['data']]) except TypeError: msg = '接口正常,没有数据' \ if data_ret['msg'] == '操作成功' else \ f'接口/learning/{i}/weak报错,返回{data_ret["msg"]}' print(msg) except KeyError: print(f'接口/learning/{i}/weak,返回{data_ret},与预期不符')
def test_07_teacher_classes(self): """ 老师-班级信息 :return: """ url = f'{self.ip}/learning/teacher/classes' res = requests.get(url=url, headers=self.teacher_headers) assert_res(res.text)
def test_06_teacher_analysis(self): """ 老师-学情分析 :return: """ url = f'{self.ip}/learning/teacher/analysis' res = requests.get(url=url, headers=self.teacher_headers) assert_res(res.text)
def test_06_user_info(self): """ 用户信息 :return: """ url = f'{self.ip}/user/userinfo' response = requests.get(url=url, headers=self.teacher_headers) assert_res(response.text)
def test_05_logout(self): """ 注销 :return: """ url = f'{self.ip}/user/logout' response = requests.get(url=url, headers=self.teacher_headers) assert_res(response.text)
def test_03_password_reset(self): """ 用户-重置密码 :return: """ user_id, _ = self.teacher_params.get_user_school_id() url = f'{self.ip}/user/password/reset/{user_id}' response = requests.get(url=url, headers=self.teacher_headers) assert_res(response.text)
def test_04_delete_teacher(self): """ 管理员删除教师 :return: """ url = f'{self.ip}/teachcenter/teachermanage/remove' data = {"schoolId": self.school_id, "tchIds": self.teacher_id_list[:1]} res = requests.post(url=url, headers=self.manager_headers, json=data) assert_res(res.text)
def test_student_info(self): """ 班级管理-学生列表-学生信息查询 :return: """ url = f'{self.ip}/teachcenter/classmanage/stuInfo/{self.student_id_list[0]}' res = requests.get(url=url, headers=self.manager_param.headers) assert_res(res.text) pprint(res.json())
def test_07_switch_school(self): """ 切换学校 :return: """ school_id_list = self.teacher_params.get_school_id_list() for i in [1, 0]: url = f'{self.ip}/user/switch/school/{school_id_list[i]}' response = requests.get(url=url, headers=self.teacher_headers) assert_res(response.text)
def del_course(parameter, course_id): """ 删除指定课程 :param parameter: 参数对象 :param course_id: 课程id :return: """ url = f'{parameter.ip}/course/teacher/del/{course_id}' res = requests.get(url=url, headers=parameter.headers) assert_res(res.text)