From 497cf8a7dd8432373de5f6a20e33848f3f680e42 Mon Sep 17 00:00:00 2001 From: lastmheart <64411748+lastmheart@users.noreply.github.com> Date: Thu, 30 Mar 2023 13:06:01 +0300 Subject: [PATCH] Tests for optional parameters uris, unique --- postman/ewm-stat-service.json | 255 +++++++++++++++++++++++++++++++++- 1 file changed, 252 insertions(+), 3 deletions(-) diff --git a/postman/ewm-stat-service.json b/postman/ewm-stat-service.json index 7ba62ede..575141c8 100644 --- a/postman/ewm-stat-service.json +++ b/postman/ewm-stat-service.json @@ -1,11 +1,260 @@ { "info": { - "_postman_id": "144d1ccf-999b-45ac-a135-fc64e981b034", - "name": "stats-svc tests", + "_postman_id": "2727ee6b-c606-49ec-9d4b-549c21dbe7ae", + "name": "Tests for detatched stats service", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", "_exporter_id": "23073145" }, "item": [ + { + "name": "Получение статистики по посещениям. (Тест на опциональность параметра uris)", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "const main = async () => {\r", + " const api = new API(pm);\r", + " const rnd = new RandomUtils();\r", + "\r", + " try { \r", + " pm.collectionVariables.set(\"uri\", '/events'); \r", + " let post1 = rnd.getPost();\r", + " let post2 = rnd.getPost();\r", + " post1['uri'] = '/events';\r", + " post2['uri'] = '/events/5';\r", + " await api.addPost(post1);\r", + " await api.addPost(post2);\r", + "\r", + " let source = await api.getPosts(['/events']);\r", + " pm.collectionVariables.set('source', source);\r", + " \r", + " } catch(err) {\r", + " console.error(\"Ошибка при подготовке тестовых данных.\", err);\r", + " }\r", + "};\r", + "\r", + "const interval = setInterval(() => {}, 1000);\r", + "\r", + "setTimeout(async () => \r", + " {\r", + " try {\r", + " await main();\r", + " } catch (e) {\r", + " console.error(e);\r", + " } finally {\r", + " clearInterval(interval);\r", + " }\r", + " }, \r", + " 100 \r", + ");" + ], + "type": "text/javascript" + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Ответ должен содержать код статуса 200 и данные в формате json при запросе без опционального параметра uris\", function () {\r", + " pm.response.to.be.ok; \r", + " pm.response.to.be.withBody;\r", + " pm.response.to.be.json;\r", + "});\r", + "\r", + "const target = pm.response.json();\r", + "const source = pm.collectionVariables.get('source');\r", + "\r", + "pm.test(\"При запросе по конкретному uris должны получить 1 запись\", function () {\r", + " pm.expect(source.length).to.equal(1);\r", + "});\r", + "\r", + "pm.test(\"При запросе без uris должны получить больше 1 записи\", function () {\r", + " pm.expect(target.length).to.be.above(1);\r", + "});\r", + "\r", + "pm.test(\"Посты должны содержать поля: app, uri, hits\", function () {\r", + " pm.expect(target[0]).to.have.all.keys('app', 'uri', 'hits');\r", + " pm.expect(target[1]).to.have.all.keys('app', 'uri', 'hits');\r", + " pm.expect(source[0]).to.have.all.keys('app', 'uri', 'hits');\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/json" + } + ], + "url": { + "raw": "{{baseUrl}}/stats?start=2020-05-05 00:00:00&end=2023-05-05 00:00:00&unique=false", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "stats" + ], + "query": [ + { + "key": "start", + "value": "2020-05-05 00:00:00", + "description": "(Required) Дата и время начала диапазона за который нужно выгрузить статистику (в формате \"yyyy-MM-dd HH:mm:ss\")" + }, + { + "key": "end", + "value": "2023-05-05 00:00:00", + "description": "(Required) Дата и время конца диапазона за который нужно выгрузить статистику (в формате \"yyyy-MM-dd HH:mm:ss\")" + }, + { + "key": "uris", + "value": "{{uri}}", + "description": "Список uri для которых нужно выгрузить статистику", + "disabled": true + }, + { + "key": "uris", + "value": "aliqua o", + "description": "Список uri для которых нужно выгрузить статистику", + "disabled": true + }, + { + "key": "unique", + "value": "false", + "description": "Нужно ли учитывать только уникальные посещения (только с уникальным ip)" + } + ] + } + }, + "response": [] + }, + { + "name": "Получение статистики по посещениям. (Тест на опциональность и работу параметра unique)", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "const main = async () => {\r", + " const api = new API(pm);\r", + " const rnd = new RandomUtils();\r", + "\r", + " try { \r", + " pm.collectionVariables.set(\"uri\", '/events'); \r", + " let post = rnd.getPost();\r", + " post['uri'] = '/events';\r", + " await api.addPost(post);\r", + " await api.addPost(post);\r", + " await api.addPost(post);\r", + " \r", + " let source = await api.getPosts(['/events']);\r", + " pm.collectionVariables.set('source', source);\r", + "\r", + " } catch(err) {\r", + " console.error(\"Ошибка при подготовке тестовых данных.\", err);\r", + " }\r", + "};\r", + "\r", + "const interval = setInterval(() => {}, 1000);\r", + "\r", + "setTimeout(async () => \r", + " {\r", + " try {\r", + " await main();\r", + " } catch (e) {\r", + " console.error(e);\r", + " } finally {\r", + " clearInterval(interval);\r", + " }\r", + " }, \r", + " 100 \r", + ");" + ], + "type": "text/javascript" + } + }, + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Ответ должен содержать код статуса 200 и данные в формате json при запросе без опционального параметра unique\", function () {\r", + " pm.response.to.be.ok; \r", + " pm.response.to.be.withBody;\r", + " pm.response.to.be.json;\r", + "});\r", + "\r", + "const target = pm.response.json()[0];\r", + "const source = pm.collectionVariables.get('source')[0];\r", + "\r", + "pm.test(\"При запросе с unique==true должен быть всего 1 уникальный запрос\", function () {\r", + " pm.expect(target.hits).to.equal(1);\r", + "});\r", + "\r", + "pm.test(\"При запросе без uniqre должны получить минимум 3 запроса(поскольку делали 3)\", function () {\r", + " pm.expect(source.hits).to.be.above(2);\r", + "});\r", + "\r", + "pm.test(\"Посты должны содержать поля: app, uri, hits\", function () {\r", + " pm.expect(target).to.have.all.keys('app', 'uri', 'hits');\r", + " pm.expect(source).to.have.all.keys('app', 'uri', 'hits');\r", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/json" + } + ], + "url": { + "raw": "{{baseUrl}}/stats?start=2020-05-05 00:00:00&end=2023-05-05 00:00:00&uris={{uri}}&unique=true", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "stats" + ], + "query": [ + { + "key": "start", + "value": "2020-05-05 00:00:00", + "description": "(Required) Дата и время начала диапазона за который нужно выгрузить статистику (в формате \"yyyy-MM-dd HH:mm:ss\")" + }, + { + "key": "end", + "value": "2023-05-05 00:00:00", + "description": "(Required) Дата и время конца диапазона за который нужно выгрузить статистику (в формате \"yyyy-MM-dd HH:mm:ss\")" + }, + { + "key": "uris", + "value": "{{uri}}", + "description": "Список uri для которых нужно выгрузить статистику" + }, + { + "key": "uris", + "value": "aliqua o", + "description": "Список uri для которых нужно выгрузить статистику", + "disabled": true + }, + { + "key": "unique", + "value": "true", + "description": "Нужно ли учитывать только уникальные посещения (только с уникальным ip)" + } + ] + } + }, + "response": [] + }, { "name": "Тест корреткной работы сохранения и просмотра количества просмотров", "event": [ @@ -218,7 +467,7 @@ " return {", " app: \"ewm-main-service\",", " uri: \"/events/\" + pm.variables.replaceIn('{{$randomInt}}'),", - " ip: pm.variables.replaceIn('{{$randomIP}}'),", + " ip: '121.0.0.1',", " timestamp: this.getPastDateTime()", " }", " }",