unit tests
  • Установка Google Test
    • через VS 2022
  • Что тестировать как тестировать
    • Test Suites
  • Google Test примеры
  • Параметризация примеры
  • Функции expect и assert
    • EXPECT_*
  • Пример setUP() TearDown()
  • Тестирование производительности
  • Профилирование
    • ЦП Аналитика
    • Пример
  • пример тестирование записи в файл
  • 📚Tasks
    • Задание на повторение
    • Задание calculate_average
    • Задание
    • Задание 2
    • Задание 3
    • Задание Интеграционное тестирование
    • Задание 4 треугольник интеграция
    • Задание кошелек
    • Кошелек интеграция
    • Задачи профилирование
    • Задание Task
  • Пример
Powered by GitBook
On this page

Тестирование производительности

есть Задача:

#ifndef TASK_H
#define TASK_H

#include <string>

// Перечисление для статуса задачи
enum class TaskStatus {
    Pending,    // Ожидающая
    InProgress, // В процессе
    Completed   // Завершенная
};

// Класс, представляющий задачу
class Task {
private:
    int id;                     // Уникальный идентификатор задачи
    std::string description;    // Описание задачи
    TaskStatus status;          // Статус задачи

public:
    // Конструкторы
    Task() : id(0), description(""), status(TaskStatus::Pending) {} // Конструктор по умолчанию
    Task(int id, const std::string& description) : id(id), description(description), status(TaskStatus::Pending) {} // Конструктор с параметрами

    // Методы доступа к атрибутам задачи
    int getId() const { return id; } // Получить идентификатор задачи
    std::string getDescription() const { return description; } // Получить описание задачи
    TaskStatus getStatus() const { return status; } // Получить статус задачи

    // Методы изменения статуса задачи
    void markAsInProgress() { status = TaskStatus::InProgress; } // Установить статус "В процессе"
    void markAsCompleted() { status = TaskStatus::Completed; } // Установить статус "Завершено"
};

#endif // TASK_H

Тесты на производительность

#include <gtest/gtest.h>
#include <chrono>
#include "task.h"

// Тест производительности для создания задачи
TEST(TaskPerformanceTest, TaskCreationPerformance) {
    constexpr int numTasks = 1000000;

    // Засекаем время начала операции создания задачи
    auto start = std::chrono::high_resolution_clock::now();

    // Цикл для создания numTasks задач
    for (int i = 0; i < numTasks; ++i) {
        Task task(i, "Task description");
    }

    // Засекаем время завершения операции создания задачи
    auto end = std::chrono::high_resolution_clock::now();

    // Вычисляем продолжительность операции создания задачи
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

    // Выводим результат измерения времени в стандартный вывод
    std::cout << "Time taken for creating " << numTasks << " tasks: " << duration << " milliseconds" << std::endl;
}

// Тест производительности для изменения статуса задачи
TEST(TaskPerformanceTest, MarkTaskAsInProgressPerformance) {
    constexpr int numTasks = 1000000;
    Task task(0, "Task description");

    auto start = std::chrono::high_resolution_clock::now();

    for (int i = 0; i < numTasks; ++i) {
        task.markAsInProgress();
    }

    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

    std::cout << "Time taken for marking " << numTasks << " tasks as 'In Progress': " << duration << " milliseconds" << std::endl;
}

// Тест производительности для доступа к атрибутам задачи
TEST(TaskPerformanceTest, AccessTaskAttributesPerformance) {
    constexpr int numTasks = 1000000;
    Task task(0, "Task description");

    auto start = std::chrono::high_resolution_clock::now();

    for (int i = 0; i < numTasks; ++i) {
        int id = task.getId();
        std::string description = task.getDescription();
        TaskStatus status = task.getStatus();
    }

    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();

    std::cout << "Time taken for accessing attributes of " << numTasks << " tasks: " << duration << " milliseconds" << std::endl;
}

в

PreviousПример setUP() TearDown()NextПрофилирование

Last updated 1 year ago