Рубрики
Без рубрики

Locust.io: Нагрузочное тестирование с использованием vagrant

Узнайте, как выполнить нагрузочное тестирование вашей системы, чтобы определить ее поведение как в нормальных, так и в ожидаемых условиях пиковой нагрузки.

Автор оригинала: Samuel James.

Что может пойти не так, когда вы выпускаете приложение в общественное достояние без тестирования? Вы можете либо подождать, чтобы узнать это, либо просто узнать, прежде чем выпускать продукт.

В этом уроке мы рассмотрим искусство нагрузочного тестирования, одного из нескольких типов нефункционального тестирования, необходимых для системы.

Согласно википедии

Нагрузочное тестирование-это процесс предъявления требований к программной системе или вычислительному устройству и измерения его отклика. Нагрузочное тестирование проводится для определения поведения системы как в нормальных, так и в ожидаемых условиях пиковой нагрузки. Он помогает определить максимальную рабочую мощность приложения, а также любые узкие места и определить, какой элемент вызывает деградацию.

Что это за чертовщина locust.io? Locust -это инструмент нагрузочного тестирования с открытым исходным кодом, который может быть использован для моделирования миллионов одновременных пользователей, он имеет другие интересные функции, которые позволяют визуализировать данные, полученные в результате теста, плюс он был проверен и протестирован в бою

Почему Бродяга? Потому что vagrant позволяет нам создавать и поддерживать нашу производственную среду near replica с правильными параметрами для памяти, процессора, хранилища и дискового ввода-вывода.

Почему именно VirtualBox? VirtualBox здесь будет действовать как наш гипервизор, компьютерное программное обеспечение, которое будет создавать и запускать наши виртуальные машины.

Итак, каков же здесь план?

Some context Vagrant использует “Provisioners” и “Providers” в качестве строительных блоков для управления средами разработки.

Provisioners-это инструменты, которые позволяют пользователям настраивать конфигурацию виртуальных сред. Кукла и Шеф-повар-два наиболее широко используемых положения в экосистеме Бродяг. Провайдеры-это службы, которые Vagrant использует для настройки и создания виртуальных сред.

Ссылку можно найти здесь

Тем не менее, для нашей конфигурации vagrant мы будем использовать Vagrant Shell provisioner и VirtualBox для вашего провайдера, просто простая настройка на данный момент

Еще одна вещь, машина и требования к программному обеспечению записываются в файл под названием “Vagrantfile” для выполнения необходимых шагов для создания готового к разработке ящика, так что давайте перейдем к делу.

Почти производственная среда с использованием Vagrant и Virtualbox Я использовал свой прошлый проект, очень минимальное приложение Python/Django, которое я назвал Bookshelf, чтобы создать почти производственную среду. Вот ссылка на репозиторий

Давайте создадим нашу среду с помощью vagrantfile. Используйте команду vagrant init --minimal hashicorp/precise64 для создания vagrantfile, где hashicorp – имя пользователя, а precise64 – имя поля.

Подробнее о том, как начать работу с vagrant, можно узнать здесь

# vagrant file

# set our environment to use our host private and public key to access the VM
# as vagrant project provides an insecure key pair for SSH Public Key             # Authentication so that vagrant ssh works
# https://stackoverflow.com/questions/14715678/vagrant-insecure-by-default

private_key_path = File.join(Dir.home, ".ssh", "id_rsa")
public_key_path = File.join(Dir.home, ".ssh", "id_rsa.pub")
insecure_key_path = File.join(Dir.home, ".vagrant.d", "insecure_private_key")

private_key = IO.read(private_key_path)
public_key = IO.read(public_key_path)

# Set the environment details here
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.hostname = "bookshelf-dev"
  # using a private network here, so don't forget to update your /etc/host file.
  # 192.168.50.4    bookshelf.example
  config.vm.network "private_network", ip: "192.168.50.4"
  
  config.ssh.insert_key = false
  config.ssh.private_key_path = [
    private_key_path,
    insecure_key_path # to provision the first time
  ]
  
  # reference: https://github.com/hashicorp/vagrant/issues/992 @dwickern 
  # use host/personal public and private key for security reasons
  config.vm.provision :shell, :inline => <<-SCRIPT
    set -e
    mkdir -p /vagrant/.ssh/

    echo '#{private_key}' > /vagrant/.ssh/id_rsa
    chmod 600 /vagrant/.ssh/id_rsa

    echo '#{public_key}' > /vagrant/.ssh/authorized_keys
    chmod 600 /vagrant/.ssh/authorized_keys
  SCRIPT

  # Use a shell provisioner here
  config.vm.provision "shell" do |s|
    s.path = ".provision/setup_env.sh"
    s.args = ["set_up_python"]
  end


  config.vm.provision "shell" do |s|
    s.path = ".provision/setup_nginx.sh"
    s.args = ["set_up_nginx"]
  end
  
  if Vagrant.has_plugin?("vagrant-vbguest")
    config.vbguest.auto_update = false  
  end
  
  # set your environment parameters here
  config.vm.provider 'virtualbox' do |v|
    v.memory = 2048
    v.cpus = 2
  end

  config.vm.post_up_message = "At this point use `vagrant ssh` to ssh into the development environment"
end

Обратите внимание на config config.vm.network "private_network", ip: "192.168.50.4" где я настроил сеть виртуальной машины для использования частной сети “192.168.59.4”, я отредактировал свой файл /etc/hosts , чтобы сопоставить этот IP-адрес с полным доменным именем (FQDN) приложения под названием bookshelf.example . Итак, не забудьте отредактировать ваш /etc/hosts/ а также он должен выглядеть так

##
# /etc/host
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.50.4    bookshelf.example

Скрипты обеспечения можно найти в папке .provision репозитория

Скрипты обеспечения можно найти в папке || .provision |||| репозитория

Там вы увидите все сценарии, используемые в настройке, start_app.sh используется для запуска приложения, как только вы находитесь в виртуальной машине через ssh.

Чтобы запустить процесс run vagrant up && vagrant ssh , это запустит приложение и перенесет вас через ssh в виртуальную машину, внутри виртуальной машины перейдите в папку vagrant//|, чтобы запустить приложение с помощью команды . start_app.sh

Когда наше приложение будет запущено и запущено, следующим шагом будет создание сценария нагрузочного тестирования для запуска против нашей установки.

NB: Текущая настройка приложения здесь использует sqlite3 для конфигурации базы данных, вы можете изменить ее на Postgres, раскомментировав ее в файле настроек. Кроме того, setup_env.sh условия среды для использования Postgres.

Чтобы создать более полную и надежную производственную среду реплик , я бы предложил вам обратиться к документам здесь , вы также можете проверить vagrant , чтобы понять и поиграть с vagrant.

Настройка саранчи для нагрузочного тестирования Другими словами, для выполнения нагрузочного тестирования мы будем использовать саранчу. Исходный код можно найти здесь

Во-первых, мы создаем наш файл саранчи

# locustfile.py

# script used against vagrant set up on bookshelf git repo
# url to repo: https://github.com/andela-sjames/bookshelf

from locust import HttpLocust, TaskSet, task

class SampleTrafficTask(TaskSet):

    @task(2)
    def index(self):
        self.client.get("/")

    @task(1)
    def search_for_book_that_contains_string_space(self):
        self.client.get("/?q=space")

  @task(1)
    def search_for_book_that_contains_string_man(self):
        self.client.get("/?q=man")

class WebsiteUser(HttpLocust):
    host = "http://bookshelf.example"
    task_set = SampleTrafficTask
    min_wait = 5000
    max_wait = 9000

Вот простой файл locust под названием locustfile.py , где мы определяем ряд задач locust, сгруппированных в классе TaskSet . Затем у нас есть класс HttpLocust , представляющий пользователя, где мы определяем, как долго имитируемый пользователь должен ждать между выполнением задач, а также какой класс набора задач должен определять “поведение”пользователя.

используя имя файла locustfile.py позволяет нам начать процесс, просто выполнив команду locust . Если вы решили дать своему файлу другое имя, то вам просто нужно сослаться на путь с помощью locust-f/path/to/the/locust/file , чтобы запустить скрипт.

Если вы начинаете волноваться и хотите знать больше, чем руководство quick start будет введено в курс дела.

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

Пришло время увидеть какое-то действие

Приложение Bookshelf: Запустите приложение через vagrant up && vagrant ssh перейдите к /vagrant и запустите . start_app.sh

Vagrant позволяет выключить работающую машину с помощью vagrant halt и уничтожить машину и все ресурсы, которые были созданы с ее помощью с помощью vagrant destroy . Используйте эту ссылку , чтобы узнать больше о командной строке vagrant.

Vagrant позволяет выключить работающую машину с помощью || vagrant halt || и уничтожить машину и все ресурсы, которые были созданы с ее помощью с помощью || vagrant destroy || . Используйте эту || ссылку||, чтобы узнать больше о командной строке vagrant.

Зайдите в свой браузер и используйте адрес private_ip 192.168.50.4 или предпочтительно http://bookshelf.example что мы устанавливаем в вашем /etc/host файле системы 192.168.50.4 bookshelf.example

Зайдите в свой браузер и используйте адрес private_ip|| 192.168.50.4 || или предпочтительно || http://bookshelf.example || что мы устанавливаем в вашем ||/etc/host || файле системы || 192.168.50.4 bookshelf.example

Locust Swarm: В вашей папке load-testing активируйте ваш virtualenv , получите ваши зависимости вниз через pip install -r requirements.txt и беги саранча

Locust Swarm: || В вашей папке load-testing активируйте ваш || virtualenv || , получите ваши зависимости вниз через || pip install -r requirements.txt || и беги || саранча

Мы почти закончили: Теперь переходим к http://127.0.0.1:8089/ в вашем браузере

Мы почти закончили: || Теперь переходим к || http://127.0.0.1:8089/|| в вашем браузере

Введите количество пользователей, которых вы хотите смоделировать, и скорость штриховки (т. е. сколько пользователей вы хотите генерировать в секунду) и начните роиться в вашей среде разработки

NB: Вы также можете запустить locust в среде разработки, размещенной через облачный сервис, если это ваш вариант использования. Вам не нужно ограничиваться бродягой.

С помощью сгенерированного отчета и метрики процесса вы должны быть в состоянии принять хорошо обоснованное решение относительно архитектуры вашей системы или, по крайней мере, знать предел вашей системы и подготовиться к ожидаемому событию.

С помощью сгенерированного отчета и метрики процесса вы должны быть в состоянии принять хорошо обоснованное решение относительно архитектуры вашей системы или, по крайней мере, знать предел вашей системы и подготовиться к ожидаемому событию.
С помощью сгенерированного отчета и метрики процесса вы должны быть в состоянии принять хорошо обоснованное решение относительно архитектуры вашей системы или, по крайней мере, знать предел вашей системы и подготовиться к ожидаемому событию.
С помощью сгенерированного отчета и метрики процесса вы должны быть в состоянии принять хорошо обоснованное решение относительно архитектуры вашей системы или, по крайней мере, знать предел вашей системы и подготовиться к ожидаемому событию.
С помощью сгенерированного отчета и метрики процесса вы должны быть в состоянии принять хорошо обоснованное решение относительно архитектуры вашей системы или, по крайней мере, знать предел вашей системы и подготовиться к ожидаемому событию.

Заключение Поздравляю!!! если ты дойдешь до конца. В качестве резюме мы смогли поговорить о том, что такое нагрузочное тестирование, почему вы хотите выполнить нагрузочный тест на своем приложении и как это сделать с помощью locust и vagrant с поставщиком VirtualBox и поставщиком оболочки. Мы также изучили метрики и данные, полученные в ходе теста.

NB: Если вам нужна более лаконичная производственная среда vagrant, вы можете обратиться к документам здесь .

Спасибо за чтение и не стесняйтесь ставить лайки/делиться этим постом.