qa-diploma's People
qa-diploma's Issues
Корректировки плана
- Сценарии
- В сценариях, где проверяется прошедшие месяц/год, вероятно, проверка должна проходить не на фронтенде, а на бекенде, потому что, обычно, логические вычисления/проверки проводят именно на сервисе, чтобы не влиять на производительность вашего компьютера, а на фронтенде проводят лишь первичную валидацию.
- В 11 сценарии опечатались: вы проверяете кейс без номера карты, а ожидаете ошибку по владельцу.
- Можно еще добавить кейс с отправкой номера карты, которого нет в списке тестовых данных. Интересно, как в таком случае поведет себя сервис.
- Инструменты
- Можно объединить
Библиотеки
иОтчетность
вИнструменты
и добавить туда еще язык программирования, хранилище кода. - По заданию необходимо написать обоснование выбора инструмента. По сути, выбора у нас нет, но если бы и был, то выбирать пришлось бы - напишите сильные, на ваш взгляд, стороны выбранных инструментов.
- Риски
- Что вы имели в виду под низкой продуктивностью? Вашу продуктивность? Если да, то так не пойдет. Заказчика не очень будет интересовать, в какой стадии у вас луна или какова мощность магнитных бурь. Либо вы имели в виду не вашу продуктивность, а в более общем смысле? Тогда это слишком обобщенно, нужно расписать риски более детально, от чего может зависеть общая продуктивность.
- Что еще можно учесть. Вам предстоит проверить работу приложения с двумя базами данных (mysql/postgres). Вы подумали над стратегией, как это организовать? Вероятно, могут возникнуть проблемы с настройкой такой инфраструктуры - это риск.
- У вас нет документации с требованиями к сервису, к тому что должно пройти форму, а что не должно, где и какие проверки должны происходить. Если работа приложения не совпадет с ожидаемым вами, то вы можете потерять время на корректировку кейсов. Риск? Риск.
- Оценка
- Оценку чаще всего пишут в человекочасах или человекоднях - сколько нужно времени (часов или дней по 8ч.) одному человеку для выполнения работы. Так становится более понятно, какая нужна команда для выполнения в нужный срок (при возможности одновременной работы нескольких человек).
- В общем, оценили хорошо, но есть один момент. Риски, как правило, не превышают 25% от вашей оценки, поэтому к оценке "без рисков" можно добавить часы, чтобы риски не превышали 15-25%.
- Еще можно отдельно прикинуть время на написание отчетности. Вам же не просто отчет allure сгенерить, вам еще нужно написать итоговый отчет с входными и выходными показателями.
Баг: после исправления значений остается подсветка полей как некорректных
Открыта форма Оплата по карте
Не заполняю никакие поля, нажимаю кнопку Продолжить. Все поля подсвечены, сообщение об ошибке "Неверный формат".
Заполняю все поля валидными значениями, нажимаю Продолжить.
ОР: все поля не подсвечены, сообщений об ошибке нет
ФР: поля Номер карты, Владелец, cvc остались подсвечены
Опечатка: В файле "qa-diploma/docs/Summary.md" - "пролем"
В файл "qa-diploma/docs/Summary.md" с отчётом по итогам автоматизации опечатка в слове "проблем".
;^)
В таблице order_entity заполняется поле payment_id вместо credit_id при покупке в кредит
Шаги:
Заполнить форму "Кредит по данным карты"
- Номер карты: 4444444444444441
- Дата: 08/22
- cvc: 789
Продолжить
ОР: созданы записи в таблицах order_entity, credit_request_entity, при этом order_entity.credit_id = credit_request_entity.bank_id
ФР: поле order_entity.credit_id = NULL, заполнено поле payment_id
mysql> select * from credit_request_entity;
+--------------------------------------+--------------------------------------+----------------------------+----------+
| id | bank_id | created | status |
+--------------------------------------+--------------------------------------+----------------------------+----------+
| 7225fdf9-4a14-4605-aced-1e48f404767f | 52af6c12-9fcb-4c24-88d5-f1f094a60749 | 2019-12-09 10:05:46.604000 | APPROVED |
+--------------------------------------+--------------------------------------+----------------------------+----------+
Ошибка при выполнении запроса DELETE You have an error in your SQL syntax
Создала новую ветку, https://github.com/falkona/qa-diploma/tree/feature/shortCleanTables
В ней отредактировала метод cleanTables()
public static void cleanTables() throws SQLException {
String deleteOrderEntity = "delete from order_entity; delete from payment_entity; delete from credit_request_entity;";
try (
Connection connection = DriverManager.getConnection(getUrl(), getUser(), getPassword());
PreparedStatement statementOrderEntity = connection.prepareStatement(deleteOrderEntity);
) {
statementOrderEntity.executeUpdate();
}
}
Когда я выполняю запрос на удаление в терминале MySQL, все работает
При этом тесты падают с ошибкой
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delete from payment_entity; delete from credit_request_entity' at line 1
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delete from payment_entity; delete from credit_request_entity' at line 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025)
at ru.netology.utils.SqlHelper.cleanTables(SqlHelper.java:20)
at ru.netology.test.PurchaseTest.cleanTables(PurchaseTest.java:159)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:132)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:111)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptAfterEachMethod(TimeoutExtension.java:95)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeMethodInExtensionContext(ClassBasedTestDescriptor.java:464)
at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$synthesizeAfterEachMethodAdapter$17(ClassBasedTestDescriptor.java:454)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachMethods$9(TestMethodTestDescriptor.java:228)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$12(TestMethodTestDescriptor.java:256)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:256)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:255)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachMethods(TestMethodTestDescriptor.java:226)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220)
at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188)
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:102)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:82)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:78)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.stop(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:132)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.base/java.lang.Thread.run(Thread.java:834)
Баг: опечатка в слове Марракеш
Как фронт должен реагировать, если с бэка приходит код ответа 400?
Шаги:
Заполнить поля формы "Путешествие дня" значениями:
- номер карты: 1234000000000000
- месяц: 08
- год: 22
- владелец: Нос Дарья
- cvc: 789
ОР: система оповещает пользователя, что номер карты не найден (?)
ФР: одновременно появляются нотификации "Успешно" и "Ошибка"
Параллельная работа mysql и postgres
Для работы с каждой БД я создала свою ветку, со своими значениями в application.properties.
При запуске SUT с одной записью, например
spring.datasource.url=jdbc:mysql://192.168.99.100:3306/app
все работает нормально, и для mysql, и для posgres.
Потом я попробовала это все соединить в master, и файл application.properties стал выглядеть так
spring.credit-gate.url=http://192.168.99.100:9999/credit
spring.payment-gate.url=http://192.168.99.100:9999/payment
spring.datasource.url=jdbc:postgresql://192.168.99.100:5432/app
spring.datasource.url=jdbc:mysql://192.168.99.100:3306/app
spring.datasource.username=app
spring.datasource.password=pass
После запуска SUT в базе mysql были созданы таблицы, а в базе postgres - нет. Это баг или я что-то сделала неправильно? Лог запуска SUT
2019-12-12 09:03:52.892 INFO 13048 --- [ main] ru.netology.shop.ShopApplication : Starting ShopApplication v0.0.1-SNAPSHOT on DESKTOP-FB81I61 with PID 13048 (C:\Users\skype\netology\qa-di
ploma\artifacts\aqa-shop.jar started by skype in C:\Users\skype\netology\qa-diploma\artifacts)
2019-12-12 09:03:52.895 INFO 13048 --- [ main] ru.netology.shop.ShopApplication : No active profile set, falling back to default profiles: default
2019-12-12 09:03:53.688 INFO 13048 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
2019-12-12 09:03:53.769 INFO 13048 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 70ms. Found 3 repository interfaces.
2019-12-12 09:03:54.167 INFO 13048 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.sp
ringframework.transaction.annotation.ProxyTransactionManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-12-12 09:03:55.106 INFO 13048 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-12-12 09:03:55.120 INFO 13048 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-12-12 09:03:55.120 INFO 13048 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-12-12 09:03:55.204 INFO 13048 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-12-12 09:03:55.205 INFO 13048 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2248 ms
2019-12-12 09:03:55.429 INFO 13048 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2019-12-12 09:03:55.528 INFO 13048 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.4.8.Final}
2019-12-12 09:03:55.791 INFO 13048 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2019-12-12 09:03:55.901 INFO 13048 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-12-12 09:03:56.828 INFO 13048 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2019-12-12 09:03:56.863 INFO 13048 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2019-12-12 09:03:57.805 INFO 13048 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJt
aPlatform]
2019-12-12 09:03:57.813 INFO 13048 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-12-12 09:03:58.265 WARN 13048 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view r
endering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-12-12 09:03:58.438 INFO 13048 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-12-12 09:03:58.559 INFO 13048 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html]
2019-12-12 09:03:58.724 INFO 13048 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-12-12 09:03:58.726 INFO 13048 --- [ main] ru.netology.shop.ShopApplication : Started ShopApplication in 6.29 seconds (JVM running for 6.818)
В таблицу payment_entity записывается некорректная сумма
Шаги:
Заполнить форму "Путешествие дня" значениями:
- Номер карты: 4444444444444441
- Месяц: 08
- Год: 23
- Владелец: Дарья
- сvc: 456
Нажать Продолжить
Выполнить запрос к БД
select * from payment_entity;
ОР: в поле amount значение соответствует тому, что указано на форме - 45 000 рублей
ФР: в поле amount значение - 4 500 000
mysql> select * from payment_entity;
+--------------------------------------+---------+----------------------------+----------+--------------------------------------+
| id | amount | created | status | transaction_id |
+--------------------------------------+---------+----------------------------+----------+--------------------------------------+
| f184915a-2482-48d9-84b4-2469d9538e8b | 4500000 | 2019-12-09 09:59:00.227000 | APPROVED | 8876c99b-665f-4890-a7bc-7f5bc0fc61d1 |
+--------------------------------------+---------+----------------------------+----------+--------------------------------------+
Баг: некорректное сообщение об ошибке
При покупке с "неуспешной" карты показывается нотификация "Успешно"
Как проверить записи в БД
Отредактировала позитивные кейсы, добавила в них проверку, что при транзакции создается запись в БД. Вопрос: как определить, что в результате теста действительно была добавлена конкретная запись в БД? Там есть 2 идентификатора, которые непонятно как генерятся. Соответственно, непонятно, как искать нужную запись в БД.
Проблемы с кодировкой при поиске элемента
Запускаю тест PurchaseTest.shouldBeSuccessCurrentMonthAndYearPayment()
Кодировка файла PurchaseTest.java, Page.java - UTF-8
Падает на строке 14 в классе Page.java
@Getter protected SelenideElement paymentButton = $(byText("Купить")).parent().parent();
Ошибка
Element not found {by text: Купить}
Если выставить кодировку windows-1251, то все работает нормально
Баг: нет валидации поля Номер карты
Ошибка npm: command not found при попытке запуска симулятора
В папку gate-simulator добавила файлы Dockerfile и docker-compose.yml (их скопировала из д.з. по докеру).
Выполнила команду docker-compose up -d --build
далее
$ docker-compose up -d --build
Creating network "gate-simulator_default" with the default driver
Building node-app
Step 1/6 : FROM node:8.16.2-alpine
---> 26881633664e
Step 2/6 : WORKDIR /opt/app
---> Using cache
---> a6b3215da7d8
Step 3/6 : COPY . .
---> Using cache
---> 9f6ec9bc76de
Step 4/6 : RUN npm install
---> Using cache
---> a8acfd00af5e
Step 5/6 : CMD ["npm", "start"]
---> Using cache
---> 7b7f2eadba5a
Step 6/6 : EXPOSE 9999
---> Using cache
---> be2770099f64
Successfully built be2770099f64
Successfully tagged node-app:1.0
Creating gate-simulator_node-app_1 ... done
После этого выполняю команду npm start и получаю ошибку
$ npm start
bash: npm: command not found
при этом образ создан, контейнер запущен
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
node-app 1.0 be2770099f64 59 seconds ago 71.5MB
<none> <none> d3f7c75592fd 2 minutes ago 71.5MB
<none> <none> c10dc75dc916 50 minutes ago 75.1MB
postgres latest d5177924aea0 5 days ago 394MB
node 8 c0eda5b3a935 9 days ago 895MB
mysql latest d435eee2caa5 9 days ago 456MB
node 8.16.2-alpine 26881633664e 12 days ago 67MB
postgres 12.0-alpine 5b681acb1cfc 5 weeks ago 72.8MB
$ docker-compose ps
▒▒▒⥬▒ ▒▒ 㤠▒▒▒▒ ▒▒▒▒ 㪠▒▒▒▒▒ ▒▒▒▒.
Name Command State Ports
-------------------------------------------------------------------------------------------
gate-simulator_node-app_1 docker-entrypoint.sh npm start Up 0.0.0.0:9999->9999/tcp
Баг: нет валидации поля Имя
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.