Используя nginx, чтобы моделировать медленное время отклика для тестирования целей

Я разрабатываю приложение холста Facebook, и я хочу к нагрузочному тесту его. Я знаю об ограничении Facebook на автоматизированное тестирование, таким образом, я моделировал вызовы API графа, создав поддельное веб-приложение, служил под начальством nginx и изменяя мой/etc/hosts, чтобы указать graph.facebook.com на 127.0.0.1.

Я использую jmeter для нагрузочного теста, применение и моделирование работают хорошо. Теперь я хочу моделировать медленные ответы API графа и видеть, как они затрагивают мое заявление. Как я могу формировать nginx так, чтобы он вставил задержку с каждым запросом, отправленным к моделируемому graph.facebook.com применению?

9

3 ответы

Можно замедлить скорость localhost (сеть), добавив задержку.
Используйте ifconfig команда, чтобы видеть сетевое устройство: на localhost это может быть lo и на LAN eth0 .

  • to add delay use this command (adding 1000ms delay on lo network device)

    tc qdisc add dev lo root netem delay 1000ms

  • to change delay use this one

    tc qdisc change dev lo root netem delay 1ms

  • and to remove delay

    tc qdisc del dev lo root netem delay 1000ms

10
добавлено
К сожалению, tc только для Linux, но не появляется на OS X.
добавлено автор jiyinyiyong, источник

Я изменил nginx конфигурацию, чтобы использовать limit_req_zone и limit_req , чтобы ввести задержки. Следующее уменьшает темп обслуживания к 20 запросам в секунду ( rate=20r/s ). Я установил burst=1000 так, чтобы мое заявление не получало бы 503 ответа.

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;
    [...]
    server {
        [...]
        location/{
            limit_req zone=one burst=1000;
            [...]
        }
    }
}

Документация здесь. Я не полагаю, что есть способ определить однородную задержку, используя этот метод.

2
добавлено

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

    location/{
        if (-f somewhere/sensible/LIMIT) {
           echo_sleep 1;
           # Yes, we need this here too.
           echo_exec /proxy$request_uri;
        }

        echo_exec /proxy$request_uri;
    }

    location /proxy/ {
        internal;
        # Ultimately, all this goes to a Django server.
        proxy_pass http://django/;
        proxy_set_header Host            $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

Important note: the presence or absence of forward slashes in the various paths makes a difference. For instance, proxy_pass http://django, without a trailing slash, does not do the same thing as the line in the code above.

Принцип операции прост. Если файл ГДЕ-НИБУДЬ/РАЗУМНЫЙ/ПРЕДЕЛ существует, то запросы, что матч местоположение/ сделан паузу в течение одной секунды перед хождением дальше. Таким образом в моем наборе тестов, когда я хочу сетевое замедление, я создаю файл, и когда я хочу удалить замедление, я удаляю его. (И у меня есть код очистки, который удаляет его между каждым тестом.) В теории я очень предпочел бы использовать переменные для этого, чем файл, но проблема состоит в том, что переменные повторно инициализируются с каждым запросом. Таким образом, мы не можем иметь расположение блок, который установил бы переменную поворачивать предел и другого, чтобы выключить его. (Это - первая вещь, которую я попробовал, и она потерпела неудачу из-за целой жизни переменных). Вероятно, было бы возможно использовать модуль Perl или Lua, чтобы сохраниться переменные или скрипка с печеньем, но я решил не спуститься по этим маршрутам.

Важные примечания:

  1. Это не является хорошей идеей смешать директивы от эхо модуль (как echo_sleep и echo_exec ) с директивами запаса nginx, которые приводят к производству ответа. Я первоначально имел echo_sleep вместе с proxy_pass и получил плохие результаты. Вот почему мы имеем расположение/полномочие/ блок, который выделяет директивы запаса от эхо материал. (См. это проблема для подобного конфликта, который был решен, разделив блок.)

  2. два echo_exec директивы, внутри и снаружи , если , необходим из-за того, как , если работает.

  3. , внутренний директива, предотвращает клиентов от прямого требования /proxy/... URL.

1
добавлено
QA — вакансии и аналитика рынка вакансий
QA — вакансии и аналитика рынка вакансий
5 668 участник(ов)

Вакансии и поиск работы в сфере QA. Вопросы: @qa_ru Про деньги: @qa_fin При размещении вакансии указывать: - должность - компанию - требования к кандидату - условия и ЗП хэштеги: #город #типзанятости

QA — русскоговорящее сообщество
QA — русскоговорящее сообщество
3 625 участник(ов)

Общаемся про все виды тестирования и его автоматизацию. Без мата, грубостей и провокаций. События: @qaevents Вакансии: @qa_jobs Автоматизаторы: @qa_automation Слухи про компании: @qa_bad_company

QA juniors
QA juniors
2 720 участник(ов)

Добро пожаловать в чат джуниоров QA! Общаемся обо всём, что связано с тестированием и не только :) В чате царит дружественная атмосфера, поэтому общаемся без мата, грубостей. @qa_automation - автоматизация @serious_tester - для тестировщиков и QA

QA - Bad Company!
QA - Bad Company!
2 602 участник(ов)

Позитив и негатив про компании или курсы, куда не стоит идти работать или учиться, а куда стоит. За пиратский контент - бан. @qa_fin о деньгах Русскоговорящее сообщество: @qa_ru Флудилка: @qaFlood Вакансии: @qa_jobs Финансы: @qa_fin

QA — Автоматизация
QA — Автоматизация
2 434 участник(ов)

1. Обсуждение технологий автоматизированного тестирования 2. Помощь начинающим Ru-сообщество: @qa_ru Джуночат: @qajuniors Вакансии: @qa_jobs Финансы: @qa_fin Митапы и события: @qaevents Паблики: @serious_tester, @automation_remarks, @atinfo

QA - Finance
QA - Finance
1 347 участник(ов)

Чат о деньгах тестировщиков. ЗП, релокейты,оферы. @qa_bad_company - обсуждение компаний/курсов и карьерного роста для QA @qa_automation - авто QA Холивары, политика, религия-бан Реклама, спам, оскорбления - бан Для флуда используйте другой чат

nginx_ru
nginx_ru
930 участник(ов)

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