栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

进阶之路--从0开始学web自动化(11)--关键字驱动&登录cookie保存&selenium原理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

进阶之路--从0开始学web自动化(11)--关键字驱动&登录cookie保存&selenium原理

selenium原理

架构层面

pthon调用selenium的方法向驱动发送请求,驱动转换成js代码发送给浏览器,浏览器执行代码,进行操作

python(任何编程语言)  ---发送http请求-->  chromedriver.exe   ---js代码-->  浏览器

源码层面

初始化浏览器Chrome():

-通过Popen(驱动路径)方法,自动运行命令行,启动chromedriver.exe本地服务

-通过远程连接RemoteConection 初始化很多接口地址和请求方法

python每次调用selenium的方法,都会调用excute方法,最终调用request方法,向chrmedriver发送一次请求访问相应的接口,然后驱动转化称为js代码发送给浏览器

cookis保存

当我们登录页面之后,服务器会发送一个token给客户端,下次访问登录后的页面的时候会自动带上,就不会再进行登录

在web自动化测试中,因为selenium每次启动浏览器都是无痕模式,不会自动保存cookie,有时候登录需要验证码,而我们手上没有万能验证码的时候,就需要使用cookie来保存登录状态

操作步骤:

1,首先手动登录页面,得到token

2,用selenium的方法传入token值 

这里传入的参数是一个字典,格式为{"name": "token名称","value": "token值"} 

关键字驱动

数据驱动:很多测试数据,共享一个测试逻辑(代码)

关键字驱动:很多测试数据,测试步骤,测试逻辑不一样

web自动化关键字驱动的数据包含:需要调用的方法,调用方法所需要的参数

yaml文件里的横杠-表示文件类型是一个列表数据,而每个列表的元素是字典数据,表示整个操作流程需要的步骤.代替了po模式里的页面操作.对于不同的页面对能使用

 yaml文件中,不支持元组类型,但是yaml里的列表符号[],结合了Python中的列表和元组的功能

深坑注意:使用locator传参的时候,传入的是元组或者列表,可以使用

但是读取yaml文件之后,locator对应的值

会变成 

把列表里面没有引号的内容加上引号,导致传参出错,所以在yaml文件中,元素定位的方式要统一写成带引号的

action: 浏览器需要调用的方法,该方法存在basepage中

 params: 方法需要的参数,包含参数名称和所对应的值

 注意:action里的函数名和params里的参数名要跟方法需要的函数名和参数名一致

具体操作步骤:

1,读取yaml文件的内容.包括浏览器操作的方法和对应的参数

#读取yaml文件
        with open(r"E:lemonban-seleniumlessonlesson44_关键字驱动test_datalogin_steps.yaml",encoding="utf-8")as f:
             steps = yaml.safe_load(f)#得到的结果是列表嵌套字典

读取的结果是一个列表嵌套字典,而字典里也有字典

2,得到basepage的页面对象,这里不用po页面对象,因为basepage页面的方法更加通用

3,使用for循环获取每一步的步骤

#遍历列表,获取数据,得到每一步的测试步骤
             for step in steps:
                 #从yaml数据中获得需要调用的方法的名称
                 method_name = step["action"]
                 #获取方法所需的参数
                 method_params = step["params"]
                 #通过page对象,获取basepage类里的方法的名称
                 method = getattr(page,method_name)
                 #使用方法,传入参数,传参时候解包字典,相当于传入locator = "",word=""等关键字参数
                 method(**method_params)

引申:getattr可以获取对象的属性和所在的类里的方法,得到的是方法的名称,并没有调用,要想调用直接在方法名称后面加()

总结

关键字驱动适合用于跑正常流程的功能,如果有多个用例,则需要使用多个yaml文件来保存不同的操作步骤,并且写多个测试用例函数

而数据驱动+po模式则适合逻辑相同,输入数据不同(在登录页面输入不同数据,查看错误信息)的异常用例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664689.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号