压测原因

因为培训系统首页用户量比较多,接口并发量较大,因为2021.06.03出现生产环境崩溃问题,故需要对培训系统需要压测的接口进行整理,主要是对首页的员工端接口进行压力测试

压测接口列表

baseUrl
http://ip:port/training

课程接口列表

培训接口列表

课程压测接口详情

备注: 线上课程目前上架的数据量在1000+左右,测试环境也需要同步这样的数据量,搜索和日志添加接口重点测试一下压力

web端首页课程搜索

Method : POST

URL : {{baseUrl}}/portalCourse/getCourseListByCriteria

Auth required : True

入参格式

Body :

  1. {
  2. "pageSize": 12,
  3. "pageNumber": 1,
  4. "orderBy": "createTime",
  5. "keyWord": "",
  6. "language": "",
  7. "orderDirection": "desc"
  8. }
参数名称 参数说明 请求类型 是否必须 默认值 数据类型
pageSize 分页大小 body false 20 int
pageNumber 分页页码 body false 1 int
orderBy 排序字段 body false createTime:更新时间
scorce: 评分
studyCount:热度
String
keyWord 关键字搜索 body false String
language 语种 body false 0 中文 1英文 string
orderDirection 排序方向 body false desc 倒序 asc 正序 string

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": {
  6. "total": 1065,
  7. "size": 12,
  8. "pages": 89,
  9. "current": 1,
  10. "records": [{
  11. "id": "337",
  12. "type": "0",
  13. "name": "samy新增课程2-6",
  14. "introduction": "samy新增课程2-6samy新增课程2-6samy新增课程2-6samy新增课程2-6",
  15. "coverUrl": "",
  16. "studyCount": 196,
  17. "scorce": 0.0,
  18. "createTime": "2021-01-07 13:39:15",
  19. "addStatus": "1",
  20. "updateTime": "2021-01-07 13:41:23.0",
  21. "lecturerVos": [{
  22. "id": "9",
  23. "lecturerPicture": "https://oss-dev.quectel.com/group1/M00/00/02/wKgKal-_jM-AN31KAAGKs9vtzL8355.jpg",
  24. "legalName": "王晓康",
  25. "enName": "Kondi Wang",
  26. "gender": "MALE",
  27. "type": "RESC3s9ugl0rCZgYlrR",
  28. "levelCode": "lisid84j7dfhsjd5487",
  29. "levelName": "中级讲师",
  30. "status": "Y",
  31. "typeName": "内部讲师"
  32. }]
  33. }]
  34. }
  35. }

app端首页课程搜索

Method : POST

URL : {{baseUrl}}/stuClient/selectPageCenter

Auth required : True

入参格式

Body :

  1. {
  2. "pageNumber": 1,
  3. "searchFlag": "1",
  4. "pageSize": 10,
  5. "keyWord": "课程",
  6. "orderBy":"createTime"
  7. }
参数名称 参数说明 请求类型 是否必须 默认值 数据类型
pageSize 分页大小 body false 20 int
pageNumber 分页页码 body false 1 int
orderBy 排序字段 body false createTime:更新时间
scorce: 评分
studyCount:热度
String
keyWord 关键字搜索 body false String
searchFlag 是否为搜索页面 body false

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": {
  6. "total": 1121,
  7. "size": 10,
  8. "pages": 113,
  9. "current": 1,
  10. "records": [{
  11. "id": "536",
  12. "type": "0",
  13. "name": "samy-测试讲师渲染课程001",
  14. "introduction": "1",
  15. "coverUrl": "",
  16. "studyCount": 2,
  17. "scorce": 5.0,
  18. "createTime": null,
  19. "addStatus": "0",
  20. "updateTime": "2021-05-26 16:12:14"
  21. }]
  22. }
  23. }

查询目录树

Method : POST

URL : {{baseUrl}}/directory/selectDirectoryTree

Auth required : True

入参格式

Body :

  1. {
  2. "studyId": 337,
  3. "type": "0"
  4. }
参数名称 参数说明 请求类型 是否必须 默认值 数据类型
studyId 课程/微课/学习计划id body false long
type 类型 body false 0 课程
1 微课
2 学习计划
String

返回示例*

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": [{
  6. "id": "1378",
  7. "parentId": null,
  8. "name": "视频1",
  9. "typeCode": "2",
  10. "fileId": "1511",
  11. "fileCode": "61749bc7bf76f7b7201799c9f9f34b76",
  12. "fileUrl": "{\"LD\": \"http://oss-dev.quectel.com/group1/M00/00/3E/wKgKal_2npmAIgtkAAABaVOAxi850.m3u8\", \"OD\": \"http://oss-dev.quectel.com/group1/M00/00/3E/wKgKal_2npmAF7ITAAABaRpKQyE32.m3u8\"}",
  13. "fileName": "1607391261625.mp4",
  14. "examExerciseId": null,
  15. "cover": "",
  16. "studyStatus": "2",
  17. "lessonType": "0",
  18. "studyId": "337",
  19. "type": "0",
  20. "sort": "1",
  21. "score": 0.0,
  22. "scoreRate": null,
  23. "viewTime": "1",
  24. "time": "",
  25. "completeCount": null,
  26. "transStatus": "NORMAL",
  27. "index": null,
  28. "children": []
  29. }]
  30. }

web端首页课程展示

Method : GET

URL : {{baseUrl}}/portalCourse/home

Auth required : True

入参格式

Body :无

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": {
  6. "microVideoLists": [{
  7. "id": "49",
  8. "type": "1",
  9. "name": "很厉害的微课",
  10. "introduction": "你好",
  11. "coverUrl": "",
  12. "studyCount": null,
  13. "scorce": 0.0,
  14. "createTime": "2021-01-13 13:21:21",
  15. "addStatus": "0",
  16. "updateTime": "2021-01-14 15:40:09",
  17. "lecturerVos": []
  18. }],
  19. "newCourseLists": [{
  20. "id": "422",
  21. "type": "0",
  22. "name": "新增课程1",
  23. "introduction": "新增课程1新增课程1",
  24. "coverUrl": "",
  25. "studyCount": 1,
  26. "scorce": 0.0,
  27. "createTime": "2021-05-06 15:42:05",
  28. "addStatus": "0",
  29. "updateTime": "2021-05-10 14:04:15.0",
  30. "lecturerVos": [{
  31. "id": "8",
  32. "lecturerPicture": "https://oss-dev.quectel.com/group1/M00/00/23/wKgKal_j-XyATKx8AAEbNxOVJMw263.jpg",
  33. "legalName": "刘谢霞",
  34. "enName": "Levana Liu",
  35. "gender": "FEMALE",
  36. "type": "RESC3s9ugl0rCZgYlrR",
  37. "levelCode": "usUYOia8ToXdyCz5om2",
  38. "levelName": "高级讲师",
  39. "status": "Y",
  40. "typeName": "内部讲师"
  41. }]
  42. }],
  43. "hotCourseLists": [{
  44. "id": "337",
  45. "type": "0",
  46. "name": "samy新增课程2-6",
  47. "introduction": "samy新增课程2-6samy新增课程2-6samy新增课程2-6samy新增课程2-6",
  48. "coverUrl": "",
  49. "studyCount": 196,
  50. "scorce": 0.0,
  51. "createTime": "2021-01-07 13:39:15",
  52. "addStatus": "0",
  53. "updateTime": "2021-01-07 13:41:23.0",
  54. "lecturerVos": [{
  55. "id": "9",
  56. "lecturerPicture": "https://oss-dev.quectel.com/group1/M00/00/02/wKgKal-_jM-AN31KAAGKs9vtzL8355.jpg",
  57. "legalName": "王晓康",
  58. "enName": "Kondi Wang",
  59. "gender": "MALE",
  60. "type": "RESC3s9ugl0rCZgYlrR",
  61. "levelCode": "lisid84j7dfhsjd5487",
  62. "levelName": "中级讲师",
  63. "status": "Y",
  64. "typeName": "内部讲师"
  65. }]
  66. }]
  67. }
  68. }

web学员端首页

Method : POST

URL : {{baseUrl}}/studentCourse/page

Auth required : True

入参格式

Body :

  1. {
  2. "keyWord": "",
  3. "status": "all",
  4. "studyType": "all",
  5. "pageSize": 10,
  6. "pageNumber": 1
  7. }
参数名称 参数说明 请求类型 是否必须 默认值 数据类型
keyWord 关键字搜索 body false string
status 状态 body false 0 未学习
1 学习中
2 学习完成
all 全部
string
studyType 类型 body false 0 自学
1 学习计划
all 全部
string
pageSize 分页大小 body false 1 int
pageNumber 页码 body false 20 int

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": {
  6. "total": 22,
  7. "size": 10,
  8. "pages": 3,
  9. "current": 1,
  10. "records": [{
  11. "id": "43",
  12. "type": "1",
  13. "name": "9206平台定位功能介绍+",
  14. "introduction": "9206平台定位功能介绍+",
  15. "coverUrl": "https://oss-dev.quectel.com/group1/M00/00/27/wKgKal_ldm2ADOvSAAcgwBgmuCI383.png",
  16. "studyCount": 0,
  17. "scorce": null,
  18. "createTime": "2020-12-25 15:38:18",
  19. "addStatus": null,
  20. "updateTime": null,
  21. "lecturerVos": [],
  22. "studyType": "0",
  23. "status": "1",
  24. "totalCount": 1,
  25. "completeRate": null,
  26. "clickTime": null,
  27. "incrementalLessonCount": null,
  28. "changeType": null
  29. }]
  30. }
  31. }

web学员端获取课时详情

Method : GET

URL : {{baseUrl}}/lesson/getLesson/{lessonId}

URL Parameters : lessonId=[string] lessonId 是课时id

Auth required : True

入参格式

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": {
  6. "id": "789",
  7. "directoryId": "1208",
  8. "studyId": "43",
  9. "studyType": "1",
  10. "name": "9206平台定位功能介绍+",
  11. "fileId": "1211",
  12. "fileUrl": "{\"LD\": \"http://oss-dev.quectel.com/group1/M00/00/27/wKgKal_leGWAA5FgAAAOLv5m4O427.m3u8\", \"OD\": \"http://oss-dev.quectel.com/group1/M00/00/27/wKgKal_leGOAUWngAAAOLuzQxlY01.m3u8\"}",
  13. "fileName": "9206平台定位功能介绍+.mp4",
  14. "transStatus": "NORMAL",
  15. "examExerciseId": null,
  16. "cover": "http://oss-dev.quectel.com/group1/M00/00/27/wKgKal_ldqCAYCPNAAcgwBgmuCI281.png",
  17. "score": 2.0,
  18. "time": "6062",
  19. "viewTime": "50",
  20. "type": "0",
  21. "contentType": "video/mp4",
  22. "studyStatus": "1",
  23. "submitId": null,
  24. "fileCode": "af4d67aae5eb0853aa9db422141ab248"
  25. }
  26. }

web学员端课时日志添加

Method : POST

URL : {{baseUrl}}/student/create/{lessonId}

URL Parameters : lessonId=[string] lessonId 是课时id

Auth required : True

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": true
  6. }

web学员端更新课时状态

Method : PUT

URL : {{baseUrl}}/lesson/updateProcess

Auth required : True

入参格式

Body :

  1. {
  2. "lessonId": "",
  3. "type": "2"
  4. }
参数名称 参数说明 请求类型 是否必须 默认值 数据类型
lessonId 关键字搜索 body false 课时id long
type 操作类型 body false 0 开始学习;
1 学习中(未学完);
2 学习结束
string

返回示例*

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": true
  6. }

web学员端加入学习

Method : POST

URL : {{baseUrl}}/course/studyCourse/{courseId}

URL Parameters : courseId=[string] courseId 是课程id

Auth required : True

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": true
  6. }

培训压测接口详情

学员报名接口

Method : POST

URL : {{baseUrl}}/activity_student/apply

Auth required : True

接口说明

学员端web页面报名的接口

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
id 活动分类id parameter false 字符长度[1, 50] long

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""
  6. }

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

不同用户登录的账号去报名同一个活动,或者不同的人去报名不同的活动。或者同一个用户报名活动。

学员取消报名接口

Method : POST

URL : {{baseUrl}}/activity_student/cancel_apply

Auth required : True

接口说明

学员端web页面取消报名的接口

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
id 活动分类id parameter false 字符长度[1, 50] long

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""
  6. }

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

不同用户登录的账号去取消报名同一个培训活动或者不同的培训活动。或者同一个用户取消报名活动。

学员签到接口

Method : POST

URL : {{baseUrl}}/activity_student/sign_in

Auth required : True

接口说明

学员端web页面签到的接口

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
id 活动分类id parameter false 字符长度[1, 50] long

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""
  6. }

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

不同用户登录的账号去签到同一个活动,或者不同的人去签到不同的活动。或者同一个用户签到活动。

学员端培训活动分页接口

Method : POST

URL : {{baseUrl}}/activity/student_page

Auth required : True

接口说明

学员端培训活动分页的接口

Body :

  1. {
  2. "categoryId": "活动分类id",
  3. "name": "活动名称",
  4. "status": "活动状态",
  5. "startTime": "活动开始时间",
  6. "endTime": "活动结束时间",
  7. "pageSize": "每页数据条数",
  8. "pageNumber": "分页页码",
  9. }

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
categoryId 活动分类id body false 字符长度[1, 50] long
name 活动名称 body false 字符长度[1, 50] string
status 活动状态 body false 字符长度[1, 20] string
startTime 活动开始时间 body false 字符长度[1, 50] long
endTime 活动结束时间 body false 字符长度[1, 50] long
pageSize 每页数据条数 body false 30 int
pageNumber 分页页码 body false 1 int

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": {
  6. "total": 1,
  7. "size": 10,
  8. "pages": 1,
  9. "current": 1,
  10. "records": [
  11. {
  12. "id": "108",
  13. "name": "容器化介绍",
  14. "categoryId": null,
  15. "categoryName": null,
  16. "locationNames": "HF-12F-Jakarta",
  17. "lecturerNames": null,
  18. "coverUrl": "",
  19. "description": "1、docker介绍\n2、kubernetes介绍\n3、业务与容器化集成\n4、安装及答疑",
  20. "startTime": "2021-03-10 18:30:00",
  21. "endTime": "2021-03-10 20:30:00",
  22. "status": "END",
  23. "activityType": "apply",
  24. "activityStatus": "late",
  25. "applyCount": 24,
  26. "evaluateCount": null,
  27. "examPaperId": null,
  28. "questionnaireId": "190",
  29. "cancelApplyType": false,
  30. "signInType": false,
  31. "examType": false,
  32. "questionnaireType": false,
  33. "examPaperAnswerId": null,
  34. "questionnaireAnswerId": "1227"
  35. }
  36. ]
  37. }

返回参数

参数名称 参数说明 数据类型
data 返回查询对象 object

如何压测

用账号登录token分页查询培训活动的分页接口即可。

学员端培训考试的提交接口

Method : POST

URL : {{baseUrl}}/activity/submit_exam

Auth required : True

接口说明

学员端培训考试的提交的接口

Body :

  1. {
  2. "activityId": "培训id",
  3. "examId": "考试id",
  4. "startTime": "答题开始时间",
  5. "endTime": "答题结束时间",
  6. "duration": "答题持续时间",
  7. "answers": "答案列表",
  8. }

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
activityId 培训id body true 1 字符长度[1, 50] long
examId 考试id body true 1 字符长度[1, 50] long
startTime 答题开始时间 body true 10 字符长度[1, 50] long
endTime 答题结束时间 body true 10 字符长度[1, 50] long
duration 答题持续时间 body true 10 long
answers 答案列表集合 body true [{},{}] list

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

用不同账户登录获取的token值去提交考试答案压测

学员端培训问卷的提交接口

Method : POST

URL : {{baseUrl}}/activity/submit_questionnaire

Auth required : True

接口说明

学员端培训问卷的提交的接口

Body :

  1. {
  2. "activityId": "培训id",
  3. "releaseId": "问卷发布id",
  4. "startTime": "答题开始时间",
  5. "endTime": "答题结束时间",
  6. "duration": "答题持续时间",
  7. "answers": "答案列表",
  8. }

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
activityId 培训id body true 1 字符长度[1, 50] long
releaseId 问卷发布id body true 1 字符长度[1, 50] long
startTime 答题开始时间 body true 10 字符长度[1, 50] long
endTime 答题结束时间 body true 10 字符长度[1, 50] long
duration 答题持续时间 body true 10 long
answers 答案列表集合 body true [{},{}] list

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

用不同账户登录获取的token值去提交问卷压测

APP端学员报名接口

Method : POST

URL : {{baseUrl}}/activity_app/apply

Auth required : True

接口说明

APP端学员报名的接口

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
id 活动分类id parameter false 字符长度[1, 50] long

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""
  6. }

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

不同用户登录的账号去报名同一个活动,或者不同的人去报名不同的活动。或者同一个用户报名活动。

APP端学员取消报名接口

Method : POST

URL : {{baseUrl}}/activity_app/cancel_apply

Auth required : True

接口说明

APP端学员取消报名的接口

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
id 活动分类id parameter false 字符长度[1, 50] long

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""
  6. }

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

不同用户登录的账号去取消报名同一个培训活动或者不同的培训活动。或者同一个用户取消报名活动。

APP端学员签到接口

Method : POST

URL : {{baseUrl}}/activity_app/sign_in

Auth required : True

接口说明

APP端学员签到的接口

入参格式

参数名称 参数说明 请求类型 是否必须 默认值 限制 数据类型
id 活动分类id parameter false 字符长度[1, 50] long

返回示例

  1. {
  2. "success": true,
  3. "msg": null,
  4. "code": 0,
  5. "data": ""
  6. }

返回参数

参数名称 参数说明 数据类型
success true成功 false失败 boolean

如何压测

不同用户登录的账号去签到同一个活动,或者不同的人去签到不同的活动。或者同一个用户签到活动。