тестирование методов POST и GET в колбе - PullRequest
0 голосов
/ 25 апреля 2018

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

код app.py

@app.route('/register_user')
def register_user():
    return render_template('register_user.html')

@app.route('/manage_admin', methods=['POST', 'GET'])
def manage_admin():
    if request.method == 'POST':
        manage_admin = request.form
    return render_template('manage_admin.html', manage_admin=manage_admin)

register_user.html

<form id="form-login" method="post" action="/manage_admin">

        <input type="text" class="input100" name="name" placeholder="fullname">
        <br>
        <br>
        <input type="text" class="input100" name="username" placeholder=" username">
        <br>
        <br>
        <input type="text" class="input100" name="email" placeholder="email">
        <br>
        <br>
        <input type="password" class="input100" name="password" placeholder="password">
        <br>
        <br>
        <br>
        <input type="submit" class="login-button"  value="Submit">
</form>

manage_admin.html

{% for key, value in manage_admin.items() %}
    <th>{{ value }}</th>
{% endfor %}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Простое решение, если вы можете разобрать html самостоятельно:

app.test_client().post('/manage_admin', data={'name': 'John Doe', 'username': 'jdoe', ...}))

Возвращает Ответ , из которого вы можете получить html и проверить содержимое по своему усмотрению. Я использовал встроенный парсер Python, например .

0 голосов
/ 25 апреля 2018

Я бы порекомендовал использовать что-то вроде Selenium для запуска автоматических тестов. Это позволит вам выполнять тесты на работающем экземпляре вашего приложения.

Для начала установите Selenium:

pip install selenium

Затем создайте сценарий для запуска ваших тестов, импортировав Selenium Webdriver вместе с unittest из стандартной библиотеки Python:

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class TestRegistrationPage(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()

    def tearDown(self):
        self.driver.quit()

    def test_form_posts_to_admin_page(self):
        self.driver.get('http://localhost:5000/register_user')  # Assuming default Flask port

        # Retrieve input elements
        name_input = self.driver.find_element_by_name('name')
        username_input = self.driver.find_element_by_name('username')
        email_input = self.driver.find_element_by_name('email')
        password_input = self.driver.find_element_by_name('password')

        # Populate inputs with dummy text
        name_input.send_keys('Alice Cooper')
        username_input.send_keys('acoop')
        email_input.sendkeys('acoop@schoolsoutforever.com')
        password_input.sendkeys('rockonbaby')

        # Find submit button and submit form by sending an "Enter" keypress
        submit_button = self.driver.find_element_by_class_name('login-button')
        submit_button.send_keys(Keys.ENTER)

        # Check if redirect worked. If you don't redirect from the form page the just use the driver.get method above with the target url instead
        admin_url = self.driver.current_url
        self.assertEqual(admin_url, 'http://localhost:5000/manage_admin')

        # Get table header elements and extract their text values
        table_cells = self.driver.find_elements_by_tag_name('th')
        table_contents = []
        for cell in table_cells:
            table_contents.append(cell.text)

        # Check if dummy text made it into the table contents
        self.assertIn('Alice Cooper', table_contents)
        self.assertIn('acoop', table_contents)
        self.assertIn('acoop@schoolsoutforever.com', table_contents)
        self.assertIn('rockonbaby', table_contents)

# Tell unit tests to run when you run the script
if __name__ == '__main__':
    unittest.main()

Если у вас возникнут проблемы с элементами, которые не были найдены, это может быть проблема времени загрузки страницы. В этом случае вам может потребоваться принудительное ожидание, если повторный запуск тестов не работает. Для получения информации об этом см. этот ответ и документацию Selenium Waits .

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