\n\n def get_success_msg(self):\n \"\"\"获取成功信息\"\"\"\n e = self.wait_element_visible(self.success_msg_locator)\n> return e.text\nE AttributeError: 'NoneType' object has no attribute 'text'\n\npages\\main_page.py:71: AttributeError"}, "description": "退课失败", "attachments": [{"name": "log", "source": "8be4ce2d-e17b-4a2d-9172-6e42d2bd7b71-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "test_info", "value": "{'password': 'zxz', 'expected': '密码错误'}"}], "start": 1595077597361, "stop": 1595077619243, "uuid": "42baa144-e0ef-4af1-909a-63d52683493b", "historyId": "0760b40c76161342aab7195da7ed70de", "testCaseId": "18a4f4731c8b19040ea89c2e2ccc77fb", "fullName": "tests.test_course.TestCourse#test_exit_error", "labels": [{"name": "tag", "value": "error"}, {"name": "tag", "value": "course"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_course"}, {"name": "subSuite", "value": "TestCourse"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_course"}]}
--------------------------------------------------------------------------------
/reports/test_all/7d344dc5-3fe2-4461-8ef5-f00b5535e849-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_add_success[test_info1]", "status": "passed", "description": "加课失败", "parameters": [{"name": "test_info", "value": "{'course_code': '123456', 'expected': '该加课码不存在或者已经失效'}"}], "start": 1595077595032, "stop": 1595077596019, "uuid": "8e370789-8059-42d0-862e-494ae3f01ba6", "historyId": "b6b1da51b2a8f83df7502cab83f5d8c9", "testCaseId": "c00fc0a16e4502b552e092a5e62abb28", "fullName": "tests.test_course.TestCourse#test_add_success", "labels": [{"name": "tag", "value": "error"}, {"name": "tag", "value": "course"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_course"}, {"name": "subSuite", "value": "TestCourse"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_course"}]}
--------------------------------------------------------------------------------
/reports/test_all/7d3c66ed-c6d3-410a-98e2-5f6b085ad8e4-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "444fb3ef-7f1a-4f6f-81a3-dd1b26403787", "befores": [{"name": "test_info", "status": "passed", "start": 1595077703820, "stop": 1595077703820}], "start": 1595077703820, "stop": 1595077707947}
--------------------------------------------------------------------------------
/reports/test_all/7dd62fb1-ea9d-4166-81a3-35f5df15977e-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "396e619a-78af-4e2a-9744-e8fdb653c6ef", "children": ["f0298da9-eddf-4624-9c72-91cab5e57fdd", "dc0a2f15-4245-49c2-9011-283adcf7e023", "8e370789-8059-42d0-862e-494ae3f01ba6", "42baa144-e0ef-4af1-909a-63d52683493b"], "befores": [{"name": "browser", "status": "passed", "start": 1595077568266, "stop": 1595077578253}], "afters": [{"name": "browser::0", "status": "passed", "start": 1595077619299, "stop": 1595077621521}], "start": 1595077568266, "stop": 1595077621522}
--------------------------------------------------------------------------------
/reports/test_all/80a6a4e8-925c-4f47-b0be-98047105546c-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_upload_homework_success[test_info1]", "status": "passed", "description": "提交作业成功", "parameters": [{"name": "test_info", "value": "{'file_path': 'F:\\\\课堂派web\\\\files\\\\py代码.py', 'expected': '作业提交成功'}"}], "start": 1595077691867, "stop": 1595077695605, "uuid": "e24c4dda-7f3e-4387-a8f9-5c0e59b1dc40", "historyId": "a2582194ddfcd4f95e370aa89e7568c9", "testCaseId": "b7b8d14c0311e805effa61e23a4d5200", "fullName": "tests.test_homework.TestHomework#test_upload_homework_success", "labels": [{"name": "tag", "value": "homework"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_homework"}, {"name": "subSuite", "value": "TestHomework"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_homework"}]}
--------------------------------------------------------------------------------
/reports/test_all/87ba29d5-cc41-4db5-acaa-3fc920da1064-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_homework_success[test_info1]", "status": "passed", "description": "作业提交、留言、查看提交日志", "parameters": [{"name": "test_info", "value": "{'file_path': 'F:\\\\课堂派web\\\\files\\\\txt文档.txt', 'message': '第2次提交作业!', 'expected1': '作业提交成功', 'expected2': '第2次提交作业!', 'expected3': '添加了 \"txt文档.txt\" 并提交'}"}], "start": 1595077683788, "stop": 1595077688181, "uuid": "1bb6a023-b927-4e51-ae19-7ff6731bbf69", "historyId": "a989d10f2dab02855037b34bd2449ce2", "testCaseId": "5d8362fec30a959c9d73c38f9385d2b3", "fullName": "tests.test_homework.TestHomework#test_homework_success", "labels": [{"name": "tag", "value": "smoke"}, {"name": "tag", "value": "homework"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_homework"}, {"name": "subSuite", "value": "TestHomework"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_homework"}]}
--------------------------------------------------------------------------------
/reports/test_all/88eac872-f27f-432c-b448-4801fc9b359c-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_homework_success[test_info0]", "status": "passed", "description": "作业提交、留言、查看提交日志", "attachments": [{"name": "log", "source": "6245e51f-71c5-47d9-aded-1b8bf8192ac6-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "test_info", "value": "{'file_path': 'F:\\\\课堂派web\\\\files\\\\txt文档.txt', 'message': '第1次提交作业!', 'expected1': '作业提交成功', 'expected2': '第1次提交作业!', 'expected3': '添加了 \"txt文档.txt\" 并提交'}"}], "start": 1595077638701, "stop": 1595077683759, "uuid": "ea51762e-f2e5-40d2-a2e6-35ab54db5598", "historyId": "583fb3aa4a60427cc8b811c26e2bcd4d", "testCaseId": "5d8362fec30a959c9d73c38f9385d2b3", "fullName": "tests.test_homework.TestHomework#test_homework_success", "labels": [{"name": "tag", "value": "smoke"}, {"name": "tag", "value": "homework"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_homework"}, {"name": "subSuite", "value": "TestHomework"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_homework"}]}
--------------------------------------------------------------------------------
/reports/test_all/8b104685-b739-4305-ac21-4a41cbcdb50b-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "8ae14f82-1717-442a-9c38-e94ad48dcca9", "befores": [{"name": "test_info", "status": "passed", "start": 1595077769840, "stop": 1595077769840}], "start": 1595077769840, "stop": 1595077772076}
--------------------------------------------------------------------------------
/reports/test_all/8be4ce2d-e17b-4a2d-9172-6e42d2bd7b71-attachment.txt:
--------------------------------------------------------------------------------
1 | [31m[1mERROR [0m root:base_page.py:76 元素定位失败:Message:
--------------------------------------------------------------------------------
/reports/test_all/96e5a1f1-3de1-47ca-bd11-41837f87eefa-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "e681f17b-16f7-45de-a616-994ef7dc85b9", "befores": [{"name": "test_info", "status": "passed", "start": 1595077699610, "stop": 1595077699610}], "start": 1595077699610, "stop": 1595077703815}
--------------------------------------------------------------------------------
/reports/test_all/97a1c9fb-596c-4c97-859b-9efd965d1d3a-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "793b88f9-42f7-46f5-bc17-0ce0a5ca3b37", "befores": [{"name": "test_info", "status": "passed", "start": 1595077688187, "stop": 1595077688187}], "start": 1595077688187, "stop": 1595077691848}
--------------------------------------------------------------------------------
/reports/test_all/98a7374f-0743-4b64-8a48-270f75841269-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "f4d972e0-6884-42c9-a454-764c4fcb6131", "befores": [{"name": "test_info", "status": "passed", "start": 1595077595031, "stop": 1595077595031}], "start": 1595077595031, "stop": 1595077596022}
--------------------------------------------------------------------------------
/reports/test_all/a2560e91-4446-4b68-8309-56f4167fae61-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "959d1bc7-a00b-42b6-8ab4-b06e123e1394", "befores": [{"name": "test_info", "status": "passed", "start": 1595077695610, "stop": 1595077695610}], "start": 1595077695610, "stop": 1595077699596}
--------------------------------------------------------------------------------
/reports/test_all/a2feab51-69ef-403f-bf3d-eb8aa67ebca7-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "2738e0d4-f0f2-46d3-9a69-31ce9ab4acfc", "children": ["42baa144-e0ef-4af1-909a-63d52683493b"], "befores": [{"name": "join_course", "status": "passed", "start": 1595077596027, "stop": 1595077597360}], "afters": [{"name": "join_course::0", "status": "passed", "start": 1595077619297, "stop": 1595077619297}], "start": 1595077596027, "stop": 1595077619297}
--------------------------------------------------------------------------------
/reports/test_all/a766fb96-fc50-410c-aab0-adf4d4f712d2-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "e9e6f0bf-637f-427d-97ec-6af184a64cac", "befores": [{"name": "test_info", "status": "passed", "start": 1595077720054, "stop": 1595077720054}], "start": 1595077720054, "stop": 1595077724517}
--------------------------------------------------------------------------------
/reports/test_all/a8c4fdf1-b2a6-4c58-984c-e6d9ae1e2374-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "d0eb8e0f-ee52-402a-8b46-da5348f449c8", "children": ["896f02b0-d0a1-4a08-ab9d-ea5f6849e4d7", "639f7cd3-d049-44f4-9f55-dfd0ea12351f"], "befores": [{"name": "enter_students_page", "status": "passed", "start": 1595077764908, "stop": 1595077767488}], "afters": [{"name": "enter_students_page::0", "status": "passed", "start": 1595077772078, "stop": 1595077772078}], "start": 1595077764908, "stop": 1595077772078}
--------------------------------------------------------------------------------
/reports/test_all/af02b8b7-3925-4678-b8ff-84936ea22b8e-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_join_exit_success[test_info0]", "status": "passed", "description": "加课、进入课堂、退课成功", "parameters": [{"name": "test_info", "value": "{'course_code': 'P69UVV', 'password': 'python123', 'expected1': '加入课堂成功', 'expected2': 'P69UVV', 'expected3': '课程退课成功'}"}], "start": 1595077590801, "stop": 1595077594097, "uuid": "f0298da9-eddf-4624-9c72-91cab5e57fdd", "historyId": "347704dc05aa29a914668ff065822f00", "testCaseId": "5898bea2e4b94ab668508e6565b55dda", "fullName": "tests.test_course.TestCourse#test_join_exit_success", "labels": [{"name": "tag", "value": "success"}, {"name": "tag", "value": "course"}, {"name": "tag", "value": "smoke"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_course"}, {"name": "subSuite", "value": "TestCourse"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_course"}]}
--------------------------------------------------------------------------------
/reports/test_all/b70d737e-1d07-4dd1-84f8-53dbe040fc6e-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "bb07a8f0-6da6-463d-87f5-ec7c7498afb7", "befores": [{"name": "test_info", "status": "passed", "start": 1595077594125, "stop": 1595077594125}], "start": 1595077594124, "stop": 1595077595026}
--------------------------------------------------------------------------------
/reports/test_all/c052b6bb-ec2b-42fc-a4f7-e3d587d56402-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_upload_homework_success[test_info4]", "status": "passed", "description": "提交作业成功", "parameters": [{"name": "test_info", "value": "{'file_path': 'F:\\\\课堂派web\\\\files\\\\压缩包.rar', 'expected': '作业提交成功'}"}], "start": 1595077703821, "stop": 1595077707947, "uuid": "dcac2979-e430-4e54-9499-2d2a4db741bf", "historyId": "cb4a604396164559b6ee7f8b94b3b41e", "testCaseId": "b7b8d14c0311e805effa61e23a4d5200", "fullName": "tests.test_homework.TestHomework#test_upload_homework_success", "labels": [{"name": "tag", "value": "homework"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_homework"}, {"name": "subSuite", "value": "TestHomework"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_homework"}]}
--------------------------------------------------------------------------------
/reports/test_all/c3c996d7-2e8d-4b96-aa1e-2a941c568ac5-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_login_error[test_info0]", "status": "passed", "description": "登录失败", "parameters": [{"name": "test_info", "value": "{'mobile': '', 'password': '12', 'expected': '账号不能为空'}"}], "start": 1595077724521, "stop": 1595077730220, "uuid": "01cf2a92-e652-4900-bbf6-c8aea2c6c57c", "historyId": "1a42a92fe9250ffdeb64eef1609dd764", "testCaseId": "5fd5da3b3ca8fdf751feb802572e5b42", "fullName": "tests.test_login.TestLogin#test_login_error", "labels": [{"name": "tag", "value": "login"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_login"}, {"name": "subSuite", "value": "TestLogin"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_login"}]}
--------------------------------------------------------------------------------
/reports/test_all/d215575b-67d6-44c8-a840-258aa2b41e2f-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "5776bb8e-5bcf-44ba-8905-601f70af52ce", "children": ["896f02b0-d0a1-4a08-ab9d-ea5f6849e4d7", "639f7cd3-d049-44f4-9f55-dfd0ea12351f"], "befores": [{"name": "login_page", "status": "passed", "start": 1595077759509, "stop": 1595077762211}], "afters": [{"name": "login_page::0", "status": "passed", "start": 1595077772105, "stop": 1595077772105}], "start": 1595077759509, "stop": 1595077772105}
--------------------------------------------------------------------------------
/reports/test_all/d29659e4-f8bc-49a1-bd41-236b80755237-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "da1b567e-70dd-4402-8971-35e25d1c5abb", "children": ["ea51762e-f2e5-40d2-a2e6-35ab54db5598", "1bb6a023-b927-4e51-ae19-7ff6731bbf69", "c9ca5fc2-fa58-407b-bc6b-88d7dc279774", "e24c4dda-7f3e-4387-a8f9-5c0e59b1dc40", "68795572-15bc-45c4-86d7-a77f716ed32d", "a2e559fa-de7c-45fd-898a-86a80b706e2c", "dcac2979-e430-4e54-9499-2d2a4db741bf"], "befores": [{"name": "login_page", "status": "passed", "start": 1595077631149, "stop": 1595077633511}], "afters": [{"name": "login_page::0", "status": "passed", "start": 1595077707995, "stop": 1595077707995}], "start": 1595077631149, "stop": 1595077707995}
--------------------------------------------------------------------------------
/reports/test_all/d30c37dd-47fc-4292-83a0-8693c7ae83df-result.json:
--------------------------------------------------------------------------------
1 | {"name": "test_upload_homework_success[test_info3]", "status": "passed", "description": "提交作业成功", "parameters": [{"name": "test_info", "value": "{'file_path': 'F:\\\\课堂派web\\\\files\\\\xlsx文件.xlsx', 'expected': '作业提交成功'}"}], "start": 1595077699611, "stop": 1595077703814, "uuid": "a2e559fa-de7c-45fd-898a-86a80b706e2c", "historyId": "4d4a6d3df4a82825e8c2060e70a83f3b", "testCaseId": "b7b8d14c0311e805effa61e23a4d5200", "fullName": "tests.test_homework.TestHomework#test_upload_homework_success", "labels": [{"name": "tag", "value": "homework"}, {"name": "parentSuite", "value": "tests"}, {"name": "suite", "value": "test_homework"}, {"name": "subSuite", "value": "TestHomework"}, {"name": "host", "value": "DESKTOP-83PFO6C"}, {"name": "thread", "value": "12272-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "tests.test_homework"}]}
--------------------------------------------------------------------------------
/reports/test_all/d72e7d59-5f8b-458a-9f1d-d487eeb91524-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "6956be1e-fed6-44f1-88d9-0e6aa6c14c30", "children": ["ea51762e-f2e5-40d2-a2e6-35ab54db5598", "1bb6a023-b927-4e51-ae19-7ff6731bbf69", "c9ca5fc2-fa58-407b-bc6b-88d7dc279774", "e24c4dda-7f3e-4387-a8f9-5c0e59b1dc40", "68795572-15bc-45c4-86d7-a77f716ed32d", "a2e559fa-de7c-45fd-898a-86a80b706e2c", "dcac2979-e430-4e54-9499-2d2a4db741bf"], "befores": [{"name": "enter_homework_page", "status": "passed", "start": 1595077635610, "stop": 1595077638700}], "afters": [{"name": "enter_homework_page::0", "status": "passed", "start": 1595077707987, "stop": 1595077707987}], "start": 1595077635610, "stop": 1595077707987}
--------------------------------------------------------------------------------
/reports/test_all/d917c678-9900-40af-ab75-49a7640ec461-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "2b589d3b-0bca-44bb-9976-711c10667063", "befores": [{"name": "test_info", "status": "passed", "start": 1595077597360, "stop": 1595077597360}], "start": 1595077597360, "stop": 1595077619296}
--------------------------------------------------------------------------------
/reports/test_all/dc12eccf-22de-4b43-906a-ad44172689bc-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "e178f723-d45c-438c-91ad-64589bfa0e88", "children": ["896f02b0-d0a1-4a08-ab9d-ea5f6849e4d7", "639f7cd3-d049-44f4-9f55-dfd0ea12351f"], "befores": [{"name": "join_course", "status": "passed", "start": 1595077762211, "stop": 1595077764908}], "afters": [{"name": "join_course::0", "status": "passed", "start": 1595077772104, "stop": 1595077772104}], "start": 1595077762211, "stop": 1595077772104}
--------------------------------------------------------------------------------
/reports/test_all/df29e220-83bc-47b4-aa0b-bfbc96077006-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "9c80426a-fd39-4797-9d28-b323b2e3b65d", "children": ["ea51762e-f2e5-40d2-a2e6-35ab54db5598", "1bb6a023-b927-4e51-ae19-7ff6731bbf69", "c9ca5fc2-fa58-407b-bc6b-88d7dc279774", "e24c4dda-7f3e-4387-a8f9-5c0e59b1dc40", "68795572-15bc-45c4-86d7-a77f716ed32d", "a2e559fa-de7c-45fd-898a-86a80b706e2c", "dcac2979-e430-4e54-9499-2d2a4db741bf"], "befores": [{"name": "browser", "status": "passed", "start": 1595077621595, "stop": 1595077631149}], "afters": [{"name": "browser::0", "status": "passed", "start": 1595077707999, "stop": 1595077710213}], "start": 1595077621595, "stop": 1595077710213}
--------------------------------------------------------------------------------
/reports/test_all/ed43be7e-c3b9-412f-adb6-9766de61b7b7-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "56bdac0d-31b2-4733-b1f9-039e51815c58", "befores": [{"name": "test_info", "status": "passed", "start": 1595077691867, "stop": 1595077691867}], "start": 1595077691867, "stop": 1595077695606}
--------------------------------------------------------------------------------
/reports/test_all/ed6b337e-588f-4215-8048-b2b656eadd14-container.json:
--------------------------------------------------------------------------------
1 | {"uuid": "d7a28f16-ea01-4fef-bdf4-49a0ba3344ea", "befores": [{"name": "test_info", "status": "passed", "start": 1595077767489, "stop": 1595077767489}], "start": 1595077767489, "stop": 1595077769837}
--------------------------------------------------------------------------------
/reports/test_course.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Test Report
6 |
7 |
8 |
245 | test_course.html
246 | Report generated on 18-Jul-2020 at 20:10:04 by pytest-html v2.1.1
247 | Environment
248 |
249 |
250 | JAVA_HOME
251 | D:\Java\jdk1.8.0_231
252 |
253 | Packages
254 | {"pluggy": "0.13.1", "py": "1.8.1", "pytest": "5.4.3"}
255 |
256 | Platform
257 | Windows-10-10.0.18362-SP0
258 |
259 | Plugins
260 | {"allure-pytest": "2.8.16", "html": "2.1.1", "metadata": "1.9.0", "rerunfailures": "9.0"}
261 |
262 | Python
263 | 3.7.3
264 | Summary
265 | 4 tests ran in 43.66 seconds.
266 | (Un)check the boxes to filter the results.
3 passed , 0 skipped , 1 failed , 0 errors , 0 expected failures , 0 unexpected passes , 0 rerun
267 | Results
268 |
269 |
270 |
271 | Result
272 | Test
273 | Duration
274 | Links
275 |
276 | No results found. Try to check the filters
277 |
278 |
279 | Failed
280 | tests/test_course.py::TestCourse::test_exit_error[test_info0]
281 | 20.95
282 |
283 |
284 |
286 |
287 |
288 | Passed
289 | tests/test_course.py::TestCourse::test_join_exit_success[test_info0]
290 | 4.02
291 |
292 |
293 |
295 |
296 |
297 | Passed
298 | tests/test_course.py::TestCourse::test_add_success[test_info0]
299 | 0.94
300 |
301 |
302 |
304 |
305 |
306 | Passed
307 | tests/test_course.py::TestCourse::test_add_success[test_info1]
308 | 1.18
309 |
310 |
311 |
--------------------------------------------------------------------------------
/reports/test_homework.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Test Report
6 |
7 |
8 |
245 | test_homework.html
246 | Report generated on 18-Jul-2020 at 20:37:40 by pytest-html v2.1.1
247 | Environment
248 |
249 |
250 | JAVA_HOME
251 | D:\Java\jdk1.8.0_231
252 |
253 | Packages
254 | {"pluggy": "0.13.1", "py": "1.8.1", "pytest": "5.4.3"}
255 |
256 | Platform
257 | Windows-10-10.0.18362-SP0
258 |
259 | Plugins
260 | {"allure-pytest": "2.8.16", "html": "2.1.1", "metadata": "1.9.0", "rerunfailures": "9.0"}
261 |
262 | Python
263 | 3.7.3
264 | Summary
265 | 7 tests ran in 52.56 seconds.
266 | (Un)check the boxes to filter the results.
7 passed , 0 skipped , 0 failed , 0 errors , 0 expected failures , 0 unexpected passes , 0 rerun
267 | Results
268 |
269 |
270 |
271 | Result
272 | Test
273 | Duration
274 | Links
275 |
276 | No results found. Try to check the filters
277 |
278 |
279 | Passed
280 | tests/test_homework.py::TestHomework::test_homework_success[test_info0]
281 | 4.92
282 |
283 |
284 |
286 |
287 |
288 | Passed
289 | tests/test_homework.py::TestHomework::test_homework_success[test_info1]
290 | 4.59
291 |
292 |
293 |
295 |
296 |
297 | Passed
298 | tests/test_homework.py::TestHomework::test_upload_homework_success[test_info0]
299 | 3.95
300 |
301 |
302 |
304 |
305 |
306 | Passed
307 | tests/test_homework.py::TestHomework::test_upload_homework_success[test_info1]
308 | 4.26
309 |
310 |
311 |
313 |
314 |
315 | Passed
316 | tests/test_homework.py::TestHomework::test_upload_homework_success[test_info2]
317 | 4.45
318 |
319 |
320 |
322 |
323 |
324 | Passed
325 | tests/test_homework.py::TestHomework::test_upload_homework_success[test_info3]
326 | 4.35
327 |
328 |
329 |
331 |
332 |
333 | Passed
334 | tests/test_homework.py::TestHomework::test_upload_homework_success[test_info4]
335 | 4.57
336 |
337 |
338 |
--------------------------------------------------------------------------------
/reports/test_login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Test Report
6 |
7 |
8 |
245 | test_smoe.html
246 | Report generated on 18-Jul-2020 at 19:47:14 by pytest-html v2.1.1
247 | Environment
248 |
249 |
250 | JAVA_HOME
251 | D:\Java\jdk1.8.0_231
252 |
253 | Packages
254 | {"pluggy": "0.13.1", "py": "1.8.1", "pytest": "5.4.3"}
255 |
256 | Platform
257 | Windows-10-10.0.18362-SP0
258 |
259 | Plugins
260 | {"allure-pytest": "2.8.16", "html": "2.1.1", "metadata": "1.9.0", "rerunfailures": "9.0"}
261 |
262 | Python
263 | 3.7.3
264 | Summary
265 | 5 tests ran in 18.14 seconds.
266 | (Un)check the boxes to filter the results.
5 passed , 0 skipped , 0 failed , 0 errors , 0 expected failures , 0 unexpected passes , 0 rerun
267 | Results
268 |
269 |
270 |
271 | Result
272 | Test
273 | Duration
274 | Links
275 |
276 | No results found. Try to check the filters
277 |
278 |
279 | Passed
280 | tests/test_login.py::TestLogin::test_login_success[test_info0]
281 | 3.64
282 |
283 |
284 |
286 |
287 |
288 | Passed
289 | tests/test_login.py::TestLogin::test_login_error[test_info0]
290 | 0.59
291 |
292 |
293 |
295 |
296 |
297 | Passed
298 | tests/test_login.py::TestLogin::test_login_error[test_info1]
299 | 0.52
300 |
301 |
302 |
304 |
305 |
306 | Passed
307 | tests/test_login.py::TestLogin::test_login_error[test_info2]
308 | 0.69
309 |
310 |
311 |
313 |
314 |
315 | Passed
316 | tests/test_login.py::TestLogin::test_login_error[test_info3]
317 | 0.73
318 |
319 |
320 |
--------------------------------------------------------------------------------
/reports/test_message.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Test Report
6 |
7 |
8 |
245 | test_message.html
246 | Report generated on 18-Jul-2020 at 19:52:43 by pytest-html v2.1.1
247 | Environment
248 |
249 |
250 | JAVA_HOME
251 | D:\Java\jdk1.8.0_231
252 |
253 | Packages
254 | {"pluggy": "0.13.1", "py": "1.8.1", "pytest": "5.4.3"}
255 |
256 | Platform
257 | Windows-10-10.0.18362-SP0
258 |
259 | Plugins
260 | {"allure-pytest": "2.8.16", "html": "2.1.1", "metadata": "1.9.0", "rerunfailures": "9.0"}
261 |
262 | Python
263 | 3.7.3
264 | Summary
265 | 2 tests ran in 22.76 seconds.
266 | (Un)check the boxes to filter the results.
2 passed , 0 skipped , 0 failed , 0 errors , 0 expected failures , 0 unexpected passes , 0 rerun
267 | Results
268 |
269 |
270 |
271 | Result
272 | Test
273 | Duration
274 | Links
275 |
276 | No results found. Try to check the filters
277 |
278 |
279 | Passed
280 | tests/test_message.py::TestSendMessage::test_send_message_success[test_info0]
281 | 2.25
282 |
283 |
284 |
286 |
287 |
288 | Passed
289 | tests/test_message.py::TestSendMessage::test_send_message_success[test_info1]
290 | 1.97
291 |
292 |
293 |
--------------------------------------------------------------------------------
/reports/test_smoke.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Test Report
6 |
7 |
8 |
245 | test_smoke.html
246 | Report generated on 18-Jul-2020 at 20:41:40 by pytest-html v2.1.1
247 | Environment
248 |
249 |
250 | JAVA_HOME
251 | D:\Java\jdk1.8.0_231
252 |
253 | Packages
254 | {"pluggy": "0.13.1", "py": "1.8.1", "pytest": "5.4.3"}
255 |
256 | Platform
257 | Windows-10-10.0.18362-SP0
258 |
259 | Plugins
260 | {"allure-pytest": "2.8.16", "html": "2.1.1", "metadata": "1.9.0", "rerunfailures": "9.0"}
261 |
262 | Python
263 | 3.7.3
264 | Summary
265 | 6 tests ran in 95.92 seconds.
266 | (Un)check the boxes to filter the results.
6 passed , 0 skipped , 0 failed , 0 errors , 0 expected failures , 0 unexpected passes , 0 rerun
267 | Results
268 |
269 |
270 |
271 | Result
272 | Test
273 | Duration
274 | Links
275 |
276 | No results found. Try to check the filters
277 |
278 |
279 | Passed
280 | tests/test_course.py::TestCourse::test_join_exit_success[test_info0]
281 | 3.19
282 |
283 |
284 |
286 |
287 |
288 | Passed
289 | tests/test_homework.py::TestHomework::test_homework_success[test_info0]
290 | 4.44
291 |
292 |
293 |
295 |
296 |
297 | Passed
298 | tests/test_homework.py::TestHomework::test_homework_success[test_info1]
299 | 4.31
300 |
301 |
302 |
304 |
305 |
306 | Passed
307 | tests/test_login.py::TestLogin::test_login_success[test_info0]
308 | 13.96
309 |
310 |
311 |
313 |
314 |
315 | Passed
316 | tests/test_message.py::TestSendMessage::test_send_message_success[test_info0]
317 | 2.24
318 |
319 |
320 |
322 |
323 |
324 | Passed
325 | tests/test_message.py::TestSendMessage::test_send_message_success[test_info1]
326 | 1.95
327 |
328 |
329 |
--------------------------------------------------------------------------------
/run.py:
--------------------------------------------------------------------------------
1 | """
2 | 收集和运行用例
3 | """
4 |
5 | import os
6 | import pytest
7 | from config.config import REPORTS_PATH
8 |
9 | REPORT_FILE = os.path.join(REPORTS_PATH, "test_all")
10 |
11 | if __name__ == '__main__':
12 | # pytest.main(["-m smoke", f"--html={REPORT_FILE}"])
13 | # pytest.main([f"--html={REPORT_FILE}"])
14 | # pytest.main(['--alluredir=reports/', "-m", "success"])
15 | pytest.main([f'--alluredir={REPORT_FILE}'])
16 | # 命令行allure运行
17 | # pytest - -alluredir = reports\test_all
18 | # 查看sllure报告
19 | # allure serve reports\test_all
--------------------------------------------------------------------------------
/tests/test_course.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | from data.course_data import cases_success, join_cases_success, join_cases_error, exit_cases_error
3 | from pages.main_page import MainPage
4 |
5 |
6 | @pytest.mark.course
7 | class TestCourse:
8 | @pytest.mark.smoke
9 | @pytest.mark.success
10 | @pytest.mark.parametrize("test_info", cases_success)
11 | def test_join_exit_success(self, test_info, login_page):
12 | """加课、进入课堂、退课成功"""
13 | driver = login_page
14 | main_page = MainPage(driver)
15 | join_actual = main_page.get().input_class_code(test_info["course_code"]). \
16 | sure_join_course().get_success_msg()
17 | # class_page = main_page.enter_class()
18 | # code_actual = class_page.get_course_code()
19 | # main_page = class_page.click_class_btn()
20 | exit_actual = main_page.get().click_more_btn().exit_course(test_info["password"]).get_success_msg()
21 | try:
22 | assert join_actual == test_info["expected1"], "加课成功"
23 | # assert code_actual == test_info["expected2"], "进入课堂成功"
24 | assert exit_actual == test_info["expected3"], "退课成功"
25 | except AssertionError as e:
26 | raise e
27 |
28 | @pytest.mark.success
29 | @pytest.mark.parametrize("test_info", join_cases_success)
30 | def test_add_success(self, test_info, login_page):
31 | """加课成功"""
32 | driver = login_page
33 | main_page = MainPage(driver)
34 | actual = main_page.get().input_class_code(test_info["course_code"]). \
35 | sure_join_course().get_success_msg()
36 | try:
37 | assert actual == test_info["expected"], "加课成功"
38 | except AssertionError as e:
39 | raise e
40 |
41 | @pytest.mark.error
42 | @pytest.mark.parametrize("test_info", join_cases_error)
43 | def test_add_success(self, test_info, login_page):
44 | """加课失败"""
45 | driver = login_page
46 | main_page = MainPage(driver)
47 | actual = main_page.get().input_class_code(test_info["course_code"]). \
48 | sure_join_course().get_error_msg()
49 | try:
50 | assert actual == test_info["expected"], "加课失败"
51 | except AssertionError as e:
52 | raise e
53 |
54 | @pytest.mark.error
55 | @pytest.mark.parametrize("test_info", exit_cases_error)
56 | def test_exit_error(self, test_info, join_course):
57 | """退课失败"""
58 | driver = join_course
59 | main_page = MainPage(driver)
60 | actual = main_page.get().click_more_btn().exit_course(test_info["password"]).get_error_msg()
61 | try:
62 | assert actual == test_info["expected"], "退课失败"
63 | except AssertionError as e:
64 | raise e
65 |
--------------------------------------------------------------------------------
/tests/test_homework.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | from pages.homework_page import HomeWorkPage
3 | from data.homework_data import cases_success, file_cases_success
4 | import logging
5 |
6 |
7 | @pytest.mark.homework
8 | class TestHomework:
9 | """测试Homework页面的上传作业,作业留言,查看作业提交状态:
10 | 前置条件:进入homework页面
11 | 1.上传作业
12 | 2.留言
13 | 3.查看提交日志
14 | """
15 | @pytest.mark.smoke
16 | @pytest.mark.homework
17 | @pytest.mark.parametrize("test_info", cases_success)
18 | def test_homework_success(self, test_info, enter_homework_page):
19 | """作业提交、留言、查看提交日志"""
20 | driver = enter_homework_page
21 | homework_page = HomeWorkPage(driver)
22 | homework_page.get().upload_files(test_info["file_path"]).comment(test_info["message"]).click_submit_files()
23 |
24 | file_actual = homework_page.get_success_message()
25 | comment_actual = homework_page.click_known().get_comment()
26 | log_actual = homework_page.view_status()
27 | try:
28 | assert file_actual == test_info["expected1"], "作业提交成功"
29 | assert comment_actual == test_info["expected2"], "作业留言成功"
30 | assert test_info["expected3"] in log_actual, "查看作业提交日志成功"
31 | except AssertionError as e:
32 | raise e
33 |
34 | @pytest.mark.homework
35 | @pytest.mark.parametrize("test_info", file_cases_success)
36 | def test_upload_homework_success(self, test_info, enter_homework_page):
37 | """提交作业成功"""
38 | driver = enter_homework_page
39 | homework_page = HomeWorkPage(driver)
40 | homework_page.get().upload_files(test_info["file_path"])
41 | homework_page.click_submit_files()
42 | file_actual = homework_page.get_success_message()
43 | try:
44 | assert file_actual == test_info["expected"], "作业提交成功"
45 | except AssertionError as e:
46 | raise e
47 |
48 |
--------------------------------------------------------------------------------
/tests/test_login.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | from pages.login_page import LoginPage
3 | from pages.main_page import MainPage
4 | from data.login_data import cases_error, cases_success
5 |
6 |
7 | @pytest.mark.login
8 | class TestLogin:
9 | @pytest.mark.smoke
10 | @pytest.mark.success
11 | @pytest.mark.parametrize("test_info", cases_success)
12 | def test_login_success(self, test_info, browser):
13 | """登录成功"""
14 | login_page = LoginPage(browser)
15 | login_page.get().login(test_info['mobile'], test_info['password'])
16 | user_info = MainPage(browser).get_user_account()
17 | try:
18 | assert test_info["expected"] in user_info, "登录成功"
19 | except AssertionError as e:
20 | raise e
21 |
22 | @pytest.mark.parametrize("test_info", cases_error)
23 | def test_login_error(self, test_info, browser):
24 | """登录失败"""
25 | login_page = LoginPage(browser)
26 | login_page.get().login(test_info["mobile"], test_info["password"])
27 | error_msg = login_page.get_error_msg()
28 | try:
29 | assert test_info["expected"] == error_msg, "登录失败"
30 | except AssertionError as e:
31 | raise e
32 |
33 |
--------------------------------------------------------------------------------
/tests/test_message.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | from pages.students_page import StudentsPage
3 | from data.send_message_data import cases_success
4 |
5 |
6 | @pytest.mark.message
7 | class TestSendMessage:
8 | """测试Students页面的同学私信功能:
9 | 前置条件:进入students页面
10 | 1.发送私信
11 | 2.断言
12 | """
13 | @pytest.mark.smoke
14 | @pytest.mark.success
15 | @pytest.mark.parametrize("test_info", cases_success)
16 | def test_send_message_success(self, test_info, enter_students_page):
17 | driver = enter_students_page
18 | student_page = StudentsPage(driver)
19 | actual = student_page.get().send_message(test_info["message"])
20 | try:
21 | assert actual in test_info["expected"], "留言成功"
22 | except AssertionError as e:
23 | raise e
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/课堂派web测试用例.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/donghe123178/web_automation_testing/1be5590eb4fe30055240506ebc7231d3cc457634/课堂派web测试用例.xlsx
--------------------------------------------------------------------------------
/课堂派项目介绍.md:
--------------------------------------------------------------------------------
1 | ## 课堂派web自动化项目
2 |
3 | 基于python+pytest+Selenium+allure,完成web自动化测试框架的搭建,并可以在jenkins上持续集成,应用于课堂派web自动化测试项目中,取得良好效果
4 |
5 | #### 一、自动化测试流程:
6 |
7 | 1. 需求分析
8 | 2. 挑选适合做自动化测试的功能
9 | 3. 设计测试用例
10 | 4. 搭建自动化测试环境
11 | 5. 设计自动化测试项目的架构
12 | 6. 编写代码
13 | 7. 执行测试用例
14 | 8. 生成测试报告并分析结果
15 |
16 | #### 二、项目介绍
17 |
18 | 课堂派是一款高效在线课堂管理平台
19 |
20 | **已知环境:**
21 |
22 | - 课堂派网址:https://www.ketangpai.com/ha
23 |
24 | - 加入考核班级邀请码:P69UVV
25 |
26 | **需要用自动化框架实现的功能**:
27 |
28 | 3.1 课堂:加入班级、进入班级、 退课
29 |
30 | 3.2 作业:上传作业、作业留言、查看作业提交状态
31 |
32 | 3.3 私信:发送私信
33 |
34 | #### 三、设计测试用例
35 |
36 | ##### 1.登录
37 |
38 | | 登录功能测试步骤 |
39 | | ------------------------------------------------------------ |
40 | | **前置条件**:联网 1.打开浏览器,初始化 (执行一次) |
41 | | (刷新页面,可重复执行多次) 2.输入页面地址或刷新 3.定位用户名 4.输入用户名 5.定位密码 6.输入密码 7.定位登录按钮 8.点击提交 9.定位用户的账号信息,断言(8.定位错误信息,断言) |
42 |
43 | ##### 2.课堂
44 |
45 | | 2.1 加入班级 | 2.2 进入班级 | 2.3 退出班级 |
46 | | ------------------------------------------------------------ | ----------------------------------------- | ------------------------------------------------------------ |
47 | | **前置条件**:已登录 | **前置条件**:已登录+已加入班级 | **前置条件**:已登录+已加入班级 1.登录 2.执行加入班级操作 3.判断,已加入则取消,未加入则继续 |
48 | | 1.定位加入课程 2.点击 3.定位加课验证码输入框 4.输入加课码 5.定位加入按钮 6.点击提交 7.定位加入成功信息,断言(定位错误信息,断言) | 1.定位班级 2.点击跳转至class界面 | 1.定位更多,点击 2.定位退课,点击 3.定位登录密码输入框 4.输入密码 5.定位退课按钮 6.点击提交 7.定位退课成功信息,断言(定位错误信息,断言) |
49 |
50 | ##### 3.作业
51 |
52 | 分析:有两种情况:
53 |
54 | - 第一次提交
55 | - 更新提交
56 |
57 | | 3.1 上传作业 | 3.2 作业留言 | 3.3 查看作业提交状态 |
58 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
59 | | **前置条件**:已登录+已加入班级+已进入作业页面 1.定位班级 2.点击跳转至class界面 3.定位作业,点击 4.定位作业标题 5.点击跳转至homework界面 | **前置条件**:已登录+已加入班级+已进入班级+已进入作业页面 1.定位班级 2.点击跳转至class界面 3.定位作业,点击 4.定位作业标题 5.点击跳转至homework界面 | **前置条件**:已登录+已加入班级+已进入作业页面 1.定位班级 2.点击跳转至class界面 3.定位作业,点击 4.定位作业标题 5.点击跳转至homework界面 |
60 | | 6.1定位添加作业文件按钮,点击 6.2定位更新提交按钮,点击 7.上传文件操作 8.定位提交按钮,点击提交 9.定位提交成功信息,断言(定位错误信息,断言) | 6.定位作业留言按钮,点击 7.定位留言输入框 8.清空输入框 9.输入留言 10.定位保存按钮,点击提交 11.定位作业留言按钮,获取留言信息,断言 | 6.定位作业留言按钮,点击 7.定位留言输入框 8.输入留言 9.定位保存按钮,点击提交 10.定位作业留言按钮,获取留言信息,断言 |
61 |
62 | ##### 4.私信
63 |
64 | | 私信功能测试步骤 |
65 | | ------------------------------------------------------------ |
66 | | **前置条件**:已登录+已加入班级+已进入班级+已进入students界面 1.定位班级 2.点击跳转至course界面 3.定位同学 4.点击跳转至student界面 |
67 | | 5.定位全部学生,点击 6.定位第一个学生,鼠标悬停 7.定位call图标,点击 8.定位会话输入框 9.输入消息 10.定位发送按钮 11.点击提交 12.定位发送的文本,断言 |
68 |
69 | #### 四、自动化测试环境
70 |
71 | python + selenium + pytest + chrom
72 |
73 | #### [Jenkins集成allure测试报告](https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-allure.html)
--------------------------------------------------------------------------------