RF绕过用户名密码登录

3,369 阅读2分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战

前言

做UI自动化测试的过程中,登录是测试的第一关,一般网站可以正常通过用户名和密码登录,只需打开测试站点,定位用户名和密码输入框,登录即可。假如网站登录这块为了安全,开启了MFA验证,例如额外需要绑定手机,或是通过第三方软件生成的验证码来登录等,我们UI去获取第三方产生的验证码,实现起来比较费劲费劲,还有的是通过SSO登录,如果不是为了严格验证登录功能,而是为了验证其他功能,我们可以绕过登录这块。

怎么绕过登录这块,有很多种方式,可以和开发说让他给你一个固定的验证码,或是为了让他关闭MFA, 或是你自己在测试代码中,增加一定的延时,在这个时间内手工输入验证码等,以上虽说可以解决,但是并不是完美的方法,现在最常用的是我们获取cookie, 通过cookie登录,可以理解获取我们的登录态。

获取测试网站的cookie

non-sso

该网站不是通过sso登录,我们通过手工登录,登录成功之后,刷新页面,找到cookie,复制下来保存 cookie一般根据自己的网站设置,有时效期, 可以设置让这个cookie的时效长一点,不用每次登录的时候,都要去修改这个cookie。

sso

比如你是通过一个mocker来登录你的测试网站,首先这个mocker也需要登录和验证,那你先手工登录这个mocker,获取cookie保存, 然后再通过这个mocker的cookie登录, 然后跳转到你的测试网站,通过代码获取测试网站的cookie, 再通过获取的测试网站的cookie来登录进行后续的测试

python selenium 的写法

获取的cookie保存为字典的形式{'name':key, 'value':value}, 如果cookie里面有多个值,可以写成字典列表的形式

cookies = [{'name':key1, 'value':value1},
{'name':key2, 'value':value2},
{'name':key3, 'value':value3},
...]

然后调用selenium的cookie的add cookie方法,实际例子,,涉及到隐私,cookie自己瞎写的,如下:

from selenium import webdriver

def main():

    print("write code here")

    driver = webdriver.Firefox()
    login_url = ""

    cookie_dict = [

        {'name': 'WEB_ID', 'value': '1c267560'},

        {'name': 'token', 'value': 'fac97060cbd99fe927'},

        {'name': 'sessionid', 'value': '2a8497fe047d597a8be66dbb'}

    ]
    driver.get(login_url)

    for i in cookie_dict:

        driver.add_cookie(i)

    driver.refresh()

RF 写法

Userlogin

    [Arguments]    ${mocker_cookie_dict}   ${test_website_url}

    [Documentation]    用户登录统一处理

    log many    &{mocker_cookie_dict}

    OpenBroswer    ${test_website_url}    firefox

    FOR    ${KEY}    ${VALUE}    IN    &{mocker_cookie_dict}

        add cookie    ${KEY}    ${VALUE}

    END

    go to    ${test_website_url}