Задать вопрос
Eugene-Usachev
@Eugene-Usachev

Как тестировать сетевые запросы в Go?

Я хочу сначала протестировать, а потом пробенчмаркить самописное решение. Сервер я уже поднял, что браузер, что Postman могут с ним общаться. Однако тестировать ручками у меня желания не много, поэтому я решил написать свой тест. Я использовал этот код для тестов:
func TestPlainTextV3(t *testing.T) {
	// Create an instance of your http client
	client := &http.Client{}

	// Make a request to a test server
	req, err := http.NewRequest("GET", "http://localhost:8000", nil)
	if err != nil {
		t.Fatal(err)
	}
	resp, err := client.Do(req)
	if err != nil {
		t.Fatal(err)
	}
	var body = make([]byte, 1024, 1024)
	_, err = resp.Body.Read(body)
	if string(body) != "Hello, World!" {
		t.Log("Unexpected response body:", string(body), "want: Hello, World!")
	}
	t.Log("Response body:", string(body))
}

Дальше я стартую тесты и вижу ошибку:

--- FAIL: TestPlainTextV3 (0.00s)
2023-05-08T09:41:31.076549477Z main_test.go:19: Get "localhost:8000": dial tcp 127.0.0.1:8000: connect: connection refused

Я уверен, что ошибка в тестах, так как я попытался прогнать через тесты ещё один сервер Fiber и тот вызывает эту же ошибку и так же работает везде, кроме тестов. Что я сделал не так?
  • Вопрос задан
  • 176 просмотров
Подписаться 1 Простой 8 комментариев
Решения вопроса 1
@falconandy
Я исользую Docker для запуска сервера. Я запускаю сервер на порте 8081, но Docker перенаправляет запросы на 8081 с порта 8000, куда я могу "дотянуться" из браузера или Postman. Тесты я тоже запускаю в Docker. И сервер и тесты запущены в едином Docker-compose.


Из контейнера тестов вы должны обращаться к контейнеру сервера не по localhost, а по имени контейнера сервера и по оригинальному порту, на котором висит сервер. Т.е. что-то типа http://server:8081
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы