「这是我参与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}