python自动化框架搭建过程_python自动化测试框架搭建

Time will tell(时间会证明一切).

前言

最近博主一直扎根于把碎片化的知识熔炼为整套知识体系的过程中。Python语言、selenium、unittest框架、HTMLTestRunner框架这些都有所了解,也写了很多脚本去做项目的功能测试。但还是感觉到有些零零散散,串不起来。

这几天在各大博客论坛一直逛该,并且在尝试着自己搭一个自动化测试框架,到了今天,终于初见成效。

过程中不断地修修改改,这篇文章主要捡点核心的部分来说,谈谈自己的搭建思路。个人浅见,欢迎提议。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thbWlfb2NoaW5fYWthbmU=,size_16,color_FFFFFF,t_70#pic_center

正题

大概地讲下每个模块下的类实现的一些方法:

1、config

||-config.yml 配置文件,主要存放一些全局配置变量,如:

(1)截图、报告、驱动存放路径;

(2)发送邮件使用到的发件人邮箱及登录密码(因为发送邮件一般用于自动发送测试报告,所以发件人比较固定);

(3)绕过登录验证码要写入的cookies信息

||-config.py 包含读取配置文件方法和一些全局参数

2、data

||-存放一些数据文件

!!-generator 一个生成各类型随机数据的类,里面包含生成随机汉字、指定位数的数字、字符串的方法,可以减少造测试数据的工作量

3、driver

||-存放浏览器驱动

4、log

||-logger.py 封装的日志类,输出不同级别的日志信息到指定的日志文件里

5、report

||-HTMLTestRunner.py 生成一个HTML格式的网页报告

6、test

||-pageObject 存放各个页面的元素、操作

||-test_suit 存放用例

7、utils

||-common 封装常用方法

||——base_page 页面基本操作(如前进、后退、关闭、切换窗口、弹窗处理、元素定位、点击、输入、截图等)

||-file_reader 封装各种数据文件读取方法,实现脚本参数化

||——csv_reader.py 读取csv文件,支持逐行或逐列读取数据

||——excel_reader.py 读取excel文件

||——yaml_reader.py 读取yml文件,配置文件读取就是调用这个类中的get_data()方法

20200916162639562.jpg#pic_center

接下来主要讲常用方法的封装。

其实封装这些方法主要是为了完善各种日常操作的日志信息写入及异常处理。前进、后退、关闭、点击、输入这些都没什么特别的,主要就是调用driver的方法实现,再加上日志信息写入和一些异常处理即可。

着重讲一下切换窗口、日志信息写入、弹窗处理及元素定位三个方法。

1、切换窗口

分三种情况——当前有1/2/>2个窗口

①只有一个窗口,无法切换

②有两个窗口,直接切换到当前窗口外的另一窗口

③有两个以上窗口,遍历每个窗口,直到切换到的窗口是目标窗口(需要靠传入参数判断)为止

If len(driver.window_handles)==1:#不做任何操作,输入警告日志信息

elif len(driver.window_handles)==2:

driver.switch_to_window(‘另一窗口句柄’)else:

For windowindriver.window_handles:

driver.switch_to_window(window)

If 当前窗口是目标窗口:

Break

2、日志信息写入

在每一个封装好的操作类里面,针对各种操作,写入对应日志信息。例如用常用方法类来说明

logger = Logger('BasePage').get_logger()

If len(driver.window_handles)==1:

Logger.warning(“当前只打开了一个窗口,无法切换!”)elif len(driver.window_handles)==2:

driver.switch_to_window(‘另一窗口句柄’)

Logger.info(‘切换到另一窗口’)else:

For windowindriver.window_handles:

driver.switch_to_window(window)

If 当前窗口是目标窗口:

Break

3、弹窗处理(主要针对alert和confirm弹窗)

首先需要判断弹窗是否出现?(使用EC.alert_is_present())

-Y 获取弹窗提示信息,与传入的预期提示信息比较,判断信息是否正确?

-Y 点击确认按钮,关闭弹窗

-N 写入错误日志,提示信息有误,并截图,点击确认按钮,关闭弹窗

-N 不需处理,写入日志,无弹窗

4、元素定位

这里主要是使用find_element()的方法,传入参数格式为(By.方法,’表达式’)

使用find_element()方法需要导入By模块(from selenium.webdriver.common.by import By)

方法可选值:id、xpath、link text、partial link text、name、tag name、class name、css selector

5、最后

稍微提一下这个框架里的PageObject思想。

PageObject(页面对象),简单点说就是把界面定位和业务操作分开。这个框架主要是把UI自动化分为三层:对象库层、操作层和业务层。

在pageObject文件夹下的各个page类,相当于是对象库层,主要存放各个页面的元素

Base_Page类相当于是操作层,再由各个page类继承Base_Object类来实现页面的一些基本操作。最后testcase中的各个用例类,类似业务层,并使用unittest框架组装并批量执行测试用例。

絮叨

对接口、自动化、软件测试零基础入门、python全栈、面试题感兴趣可以加入我们175317069一起学习,群内会有不定期测试资料链接发放喔。

内容来源于网络如有侵权请私信删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值