您现在的位置是:首页 > 正文

基于PO和单例设计模式用python+selenium进行ui自动化框架设计【多测师_王sir】

2024-04-01 03:53:56阅读 4

本人是一名软件测试技术爱好者,希望和大家一起交流ui,接口,性能,功能,人工智能,大数据等技术。
更多免费软件测试ui和接口自动化框架设计视频就在多测师官网:www.duoceshi.cn
多测师_王sir原创

一)框架目录的结构
在这里插入图片描述

二)config包当中的config.ini文件主要是用来存项目的绝对路径,是为了后续跑用例和生成测试报告做准备
然后目前的配置文件大都会用yaml,ini,excel,还有.py也就是python文件来进行管理这里用的是ini文件。在这里插入图片描述

三)config包当中的globalconfig文件主要是用来生成项目的路径,测试用例,测试报告的路径
其中调用了ReadConfigIni这个类来读取ini格式的文件。
在这里插入图片描述

四)Data.xlsx主要是用来存放项目的url,账号和密码的
通过excel来存放,可以增加数据的稳定性,后面会通过封装读取excel文档的工具类,来对excel文档中的数据进行读取
data

五)public包中pages包中的BaseTestCase模块主要是用来放基类的
当中并且通过set_driver传入一个driver对象来进行设置driver对象,这其实就是单例设计模式的体现然后通过get_driver来拿driver,
所以只要继承BaseTestCase这个基类,就可以拿到这个类当中的一切类方法。然后定位页面元素
用find_element这个类方法来进行封装,可以使得传入的参数是一个
元组,然后这里其实用到了Java当中的page object设计模式,也就是所谓的PO设计模式,使得页面中的每一个控件都变成了对象的属性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
六)public包中pages包中的login模块主要封装了项目的登录,首先创建一个driver对象,然后通过调用set_driver方法把driver传给基类,这个地方是最为关键的地方,所以基类中的driver,其实就是这个地方传进去的,然后把driver对象赋值变成了BaseTestCase这个基类的类变量也就是类的属性,所以后续基类当中的类方法其实都是使用的这个login模块中创建的这个driver对象,这样的目的就是可以保证我们的项目从头到尾都是使用的同一个driver对象,同一个driver指的就是打开的为同一个chrome浏览器。
在这里插入图片描述
在这里插入图片描述

七)这里封装了一个读取excel的工具类
因为后续我们的项目的账号和密码都存在excel文档中去了,所以需要封装一个
读取excel的工具类,来读取账号和密码,其中用到了xlrd模块来读取。
在这里插入图片描述

八)Login_data模块中主要是读取excel然后返回url,账号,密码
get_password方法因为生成的数据是浮点数,所以用了int函数进行转换。
在这里插入图片描述

九)封装了一个发送邮件的工具类,值得注意的是这里用的是163的smtp服务器
这个代码是不适用QQ服务器的,而且pwd是163邮箱的授权码,不是密码
这个地方需要注意。
在这里插入图片描述
在这里插入图片描述

十)PageElement这个模块很为关键,这个PageElement类当中封装了所有页面的网页元素这里其实就是用到了让一个项目中的所有元素定位和用例流程和最终的用例进行分层处理这个设计有点像RF框架当中的三层封装设计模式:元素层,流程层和案例层,但是这样处理有一个问题就是代码量会很多。但是优势也是非常明显的
优势如下:
1.让元素定位,流程,案例进行了分离
2.前端代码关于元素定位有改动可以随时进行处理,修改非常方便
3.让代码间的耦合性降低
4.降低代码的维护成本
5.代码的复用性高
6.采用标准的page object页面对象设计模式,符合现在主流ui自动化框架的标准搭配
在这里插入图片描述

十一)这里封装了一个工具类,主要是用来读取ini文件的
需要先在dos窗口用pip install configparser来安装configparser模块
在这里插入图片描述

十二)run模块中主要是用来加载和运行所有的用例,并且生成测试报告和发送测试报告。
在这里插入图片描述
在这里插入图片描述

十三)编写测试用例,后续有当前模块的测试用例就可以更新在当前这个模块中
然后进行断言。
在这里插入图片描述

网站文章

  • 将字节转换成十六进制字符串

    /* * 将字节数组转换为十六进制字符串 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0

    2024-04-01 03:53:49
  • 信息学奥赛一本通题库 1007 计算(a+b)×c的值

    计算(a+b)×c的值

    2024-04-01 03:53:42
  • BZOJ 1025 [SCOI2009]游戏 - 筛法+DP

    一眼就能看出来这道题的规律,找循环节的lcm,然后。。。然后就不会了。。。 这道题已经转化为了:求一堆和比n小的数,且构成的不同lcm的个数lcm(a1,...,an)=px11⋅px22⋅...⋅pxnn其中∑i=1nai<=nlcm(a_1,...,a_n)=p_1^{x_1}·p_2^{x_2}·...·p_n^{x_n}其中\sum_{i=1}^{n}a_i<=n 题意中求的是lcm的可

    2024-04-01 03:53:02
  • 关于IDEA运行多个Service时启动类显示为灰色的问题解决方案

    关于IDEA运行多个Service时启动类显示为灰色的问题解决方案

    网上一搜一大把的复制粘贴过来的一模一样的东西,完全是浪费时间。把调试限制的配置改成20就好了。人idea设置就摆在那,如图。上图不可取,太麻烦了,自己沉下心研究了一下。

    2024-04-01 03:52:57
  • Hadoop学习笔记-MapReduce实现好友推荐记录

    Hadoop学习笔记-MapReduce实现好友推荐记录

    一、简介好友推荐功能简单的说是这样一个需求,预测某两个人是否认识,并推荐为好友。二、思路某两个非好友的用户,他们的共同好友越多,那么他们越可能认识。比如,原始数据如下Tom Cat Hello Had...

    2024-04-01 03:52:50
  • 计算机显示字母桌面上的功能,我的电脑开机后显示蓝屏上面全是英文字母怎么办?...

    计算机显示字母桌面上的功能,我的电脑开机后显示蓝屏上面全是英文字母怎么办?...

    Windows出错时会出现蓝屏,大家对此可能都已经习以为常了,但可不可以不是“蓝”屏,比方说换为“红”屏、“绿”屏可以不?当然可以!方法如下:1、首先要出现蓝屏错误画面:你只要从A盘或光驱复制一个文件...

    2024-04-01 03:52:07
  • 获取APP包名和启动页APP

    获取APP包名和启动页APP

    名(Package name)在Android系统中是判断一个App的唯一标识,不同的App可以有同样的名字,但是它的包名不可以相同。  例如我可以自己编译生成一个App也叫“微信”,但是我App的包...

    2024-04-01 03:52:00
  • tomcat配置https协议访问

    记录一下tomcat配置https协议访问网上看到好多关于tomcat配置https协议访问的相关文档,基本上都是通过java自带的工具实现的,但是后面的一些步骤好像都不太一样呢,这里就记录一下总结了...

    2024-04-01 03:51:53
  • 消解算法 c语言实现,一种基于混合进化算法的实例共指消解方法

    一种基于混合进化算法的实例共指消解方法【技术领域】[0001 ]本发明属于计算机信息领域,具体地,本发明涉及一种基于混合进化算法的实例 共指消解方法。【背景技术】[0002]定义:[0003]本体:本...

    2024-04-01 03:51:15
  • 服务优雅下线,没你想的那么简单?

    大家好,我是架构摆渡人。这是实践经验系列的第八篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。服务部署,是一个避免不了的问题。按正常迭代的速度一般两周会发一个...

    2024-04-01 03:51:09