Автор оригинала: Samuel James.
Что может пойти не так, когда вы выпускаете приложение в общественное достояние без тестирования? Вы можете либо подождать, чтобы узнать это, либо просто узнать, прежде чем выпускать продукт.
В этом уроке мы рассмотрим искусство нагрузочного тестирования, одного из нескольких типов нефункционального тестирования, необходимых для системы.
Согласно википедии
Что это за чертовщина locust.io? Locust -это инструмент нагрузочного тестирования с открытым исходным кодом, который может быть использован для моделирования миллионов одновременных пользователей, он имеет другие интересные функции, которые позволяют визуализировать данные, полученные в результате теста, плюс он был проверен и протестирован в бою
Почему Бродяга? Потому что vagrant позволяет нам создавать и поддерживать нашу производственную среду near replica с правильными параметрами для памяти, процессора, хранилища и дискового ввода-вывода.
Почему именно VirtualBox? VirtualBox здесь будет действовать как наш гипервизор, компьютерное программное обеспечение, которое будет создавать и запускать наши виртуальные машины.
Итак, каков же здесь план?
- Скачать Vagrant и VirtualBox
- Настройте среду реплики, близкую к производственной, используя vagrant и virtualbox | SOURCE_CODE_APPLICATION Настройте locust для запуска нашего нагрузочного теста
- SOURCE_CODE_LOCUST Выполните тест против нашей производственной среды реплики и проверьте производительность
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
репозитория
Там вы увидите все сценарии, используемые в настройке, 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.
Зайдите в свой браузер и используйте адрес 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
и беги саранча
Мы почти закончили: Теперь переходим к http://127.0.0.1:8089/
в вашем браузере
Введите количество пользователей, которых вы хотите смоделировать, и скорость штриховки (т. е. сколько пользователей вы хотите генерировать в секунду) и начните роиться в вашей среде разработки
NB: Вы также можете запустить locust в среде разработки, размещенной через облачный сервис, если это ваш вариант использования. Вам не нужно ограничиваться бродягой.
С помощью сгенерированного отчета и метрики процесса вы должны быть в состоянии принять хорошо обоснованное решение относительно архитектуры вашей системы или, по крайней мере, знать предел вашей системы и подготовиться к ожидаемому событию.
Заключение Поздравляю!!! если ты дойдешь до конца. В качестве резюме мы смогли поговорить о том, что такое нагрузочное тестирование, почему вы хотите выполнить нагрузочный тест на своем приложении и как это сделать с помощью locust и vagrant с поставщиком VirtualBox и поставщиком оболочки. Мы также изучили метрики и данные, полученные в ходе теста.
NB: Если вам нужна более лаконичная производственная среда vagrant, вы можете обратиться к документам здесь .
Спасибо за чтение и не стесняйтесь ставить лайки/делиться этим постом.