Дразнить или пропускать аутентификацию LDAP в веб-приложении Flask, запускать тесты поведения с использованием селена? - PullRequest
0 голосов
/ 14 февраля 2019

Я создаю веб-приложение, используя Flask, и наряду с модульными тестами я пишу некоторые тесты поведения, использующие поведение.Я использую аутентификацию LDAP для аутентификации пользователей, и в своих тестах на поведение я хочу протестировать интерфейс (используя selenium), где пользователь вводит имя пользователя и пароль и входит в систему. Однако, где я создавал фиктивных пользователей в mongodb веб-приложениябазы данных для приложения (а не сервера LDAP) раньше, теперь я не могу запустить свои тесты поведения, поскольку фиктивные пользователи не проходят аутентификацию через LDAP.есть ли способ в моих тестах поведения, я могу смоделировать ответ от LDAP или иным образом обойти это?

Это мой маршрут в файле app.py,

@app.route('/login', methods=['GET', 'POST'])
def login():
 login_form = LoginForm()
 if request.method == 'POST':
     users = mongo.db.users
     usrnm = login_form.usrnm.data
     pw = login_form.password.data
     login = users.find_one({'username': usrnm})
     if login:
         if Ldap().ldap_check(usrnm, pw):
             return redirect('/warning/' + login_form.usrnm.data)
     flash('Incorrect login details. Have you requested access?')
 return render_template('login.html', form = login_form)

Вотшаг «Поведение» с использованием селена, в котором я ввожу данные и нажимаю кнопку входа:

@when(u'the user enters their username')
def user_credentials(context):
    elem = context.browser.find_element_by_name('username')
    elem.send_keys('123')

@when(u'the user enters their password')
def user_password(context):
    elem2 = context.browser.find_element_by_name('password')
    elem2.send_keys('password')

@when(u'the user presses login')
def user_login_button(context):
    context.browser.find_element_by_name('signin').click()

Шаг «пользователь нажимает на кнопку входа» завершается неудачно, так как моя программа проверки ldap возвращает false:

def ldap_check(self, username, password):
    con = ldap.initialize('ldap://myldapserver.com')
    con.start_tls_s()
    try:
        con.simple_bind_s('cn=' + username +',ou=accounttype,ou=mycompany,dc=mycompanystuff,dc=com', password)
        return True
    except:
        return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...