Введение
В последнее время проект компании нуждается в рефакторинге, и принят режим разделения фронтенда и бэкенда. Из-за разницы в эффективности разработки и прогрессе между фронтенд- и бэкенд-разработчиками, фронтенд-разработчикам необходимо подделывать данные при написании кода вызывающего интерфейса. Это означает, что N фронтенд-персоналу необходимо поддерживать N копий данных, и у каждого фронтенд-персонала может быть разное понимание бизнеса, а поддельные данные необъективны, поэтому будут проблемы, когда интерфейс фактически отлаживается с помощью задняя часть.
Чтобы решить эту проблему, мы можем использовать WireMock.
2. Введение
2.1 Краткое введение
WireMock — это эмулятор на основе HTTP. Он включает заглушку ответов HTTP, проверку запросов, проксирование / перехват, запись и воспроизведение.
Когда прогресс разработки разработчиков непостоянен, они могут полагаться на интерфейс, созданный WireMock, для имитации различных запросов и ответов, чтобы избежать прогресса разработки определенного модуля.
2.2 Скачать файлы
нажмитеWire mock.org/docs/run you…Загрузите пакет jar, который запускает службу WireMock.
2.3 Запустите службу
Выполните следующую команду в каталоге, где находится пакет jar:
java -jar wiremock-standalone-2.13.0.jar --port 9999
После запуска, как показано ниже:
Дополнительные параметры см. в официальной документации.
3. Напишите ответ
После того, как сервис WireMock запущен, это все еще просто пустая оболочка, нам нужно добавить правила запросов и запросы ответов к сервису.
Создайте проект maven и напишите клиентский код WireMock.
3.1 Добавить зависимости
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock</artifactId>
<version>2.13.0</version>
</dependency>
3.2 Написание ответа
import static com.github.tomakehurst.wiremock.client.WireMock.*;
public class App {
public static void main(String[] args) {
// 连接 9999 端口
configureFor(9999);
// 删除旧的规则
removeAllMappings();
stubFor(get(urlPathEqualTo("/user/1"))
.willReturn(aResponse()
.withStatus(200)
.withBody("{\"id\":1,\"name\":\"Jack\"}")));
}
}
Пополнить:
получить(): получить запрос
withStatus: вернуть статус
withBody: вернуть данные
После выполнения метода наш имитированный запрос и ответ добавляются в сервис WireMock.
Открытый доступ в браузереhttp://127.0.0.1:9999/user/1, эффект следующий:
4. Оптимизация
В реальном бизнес-коде невозможно вызвать интерфейс и вернуть простую строку JSON. Запись этих строк в приведенный выше код была бы катастрофой, когда нам нужно изменить структуру данных, поэтому мы можем записать возвращенные данные в файл для обслуживания.
4.1 Новый файл
Создайте файл user.txt (пользовательский) в каталоге проекта src/main/resources со следующим содержимым:
{
"id":1,
"name":"jack",
"age":18,
"birthday":"2018-01-01"
}
4.2 Добавить зависимости
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
API вышеуказанных зависимостей нужно использовать в тестовом коде, если ридер настроил API для чтения файлов, этот шаг можно пропустить.
4.3 Изменить код
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.springframework.core.io.ClassPathResource;
public class App {
public static void main(String[] args) throws IOException {
// 连接 9999 端口
configureFor(9999);
// 删除旧的规则
removeAllMappings();
// 添加请求规则和请求响应
mock("user.txt","/user/1");
}
private static void mock(String fileName, String url) throws IOException{
// 加载文件
ClassPathResource resource = new ClassPathResource(fileName);
// 读取内容
String data = FileUtils.readFileToString(resource.getFile(), "UTF-8");
stubFor(get(urlPathEqualTo(url))
.willReturn(aResponse()
.withStatus(200)
.withBody(data)));
}
}
Выполните метод, откройте браузер для доступаhttp://127.0.0.1:9999/user/1, эффект следующий:
Когда нам нужно смоделировать новый интерфейс для внешнего интерфейса, нам просто нужно запустить фиктивный метод с другими параметрами.
Примечание. Описанный выше фиктивный метод предназначен только для имитации запроса на получение. Если вам необходимо смоделировать запрос различных методов, см. следующую информацию.
5. Ссылки
- провод mock.org/docs/Java-U…официальная документация