基于python的自动化测试框架搭建
滴~ 今日打卡!
 
好多天没来打卡了。博主最近一直在把碎片化知识转化为知识体系的过程中挣扎。Python语言、selenium、unittest框架、HTMLTestRunner框架都有所了解,也写了一批脚本去做项目的功能测试。但是感觉还是零零散散,串不起来。
所以这几天,一直在看各大博客、论坛,并尝试着自己搭一个自动化测试框架。到了今天,终于初见成效了。中间修修改改经历了很多,今天主要抽取核心部分谈谈自己的搭建思路(个人浅见,有更好idea的欢迎提出)。
首先,来看看整个项目的架构:
从上面两张结构图,大概讲讲每个模块下的类实现的一些方法:
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()方法
 
接下来主要讲一下常用方法的封装。其实封装这些方法主要是为了完善各种日常操作的日志信息写入及异常处理。前进。后退、关闭、点击、输入这些都没什么特别的,主要就是调用driver的方法实现,再加上日志信息写入和一些异常处理即可。
着重讲一下切换窗口、日志信息写入、弹窗处理及元素定位三个方法
1、切换窗口:
分三种情况——当前有1/2/>2个窗口
①只有一个窗口,无法切换
②有两个窗口,直接切换到当前窗口外的另一窗口
③有两个以上窗口,遍历每个窗口,直到切换到的窗口是目标窗口(需要靠传入参数判断)为止
If len(driver.window_handles)==1:
#不做任何操作,输入警告日志信息
elif len(driver.window_handles)==2:
driver.switch_to_window(‘另一窗口句柄’)
else:
For window in driver.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 window in driver.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
最后,稍微提一下这个框架里的PageObject思想
PageObject(页面对象),简单点说就是把界面定位和业务操作分开。这个框架主要是把UI自动化分为三层:对象库层、操作层和业务层。
在pageObject文件夹下的各个page类,相当于是对象库层,主要存放各个页面的元素
Base_Page类相当于是操作层,再由各个page类继承Base_Object类来实现页面的一些基本操作。最后testcase中的各个用例类,类似业务层,并使用unittest框架组装并批量执行测试用例。
————————————————
基于python的自动化测试框架搭建的更多相关文章
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
		引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ... 
- python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集
		由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ... 
- python web自动化测试框架搭建(功能&接口)——接口用例实现
		测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ... 
- python web自动化测试框架搭建(功能&接口)——接口公共方法
		接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ... 
- python web自动化测试框架搭建(功能&接口)——接口测试模块
		Python接口测试采用python读取excel的方法,通过requests库发送请求和接收响应.模块有: Data:用于存放excel用例的,用例格式: iutil: 接口公共方法,数据引擎.ht ... 
- python web自动化测试框架搭建(功能&接口)——功能测试模块
		功能测试使用selenium,模块有: 1.futil: 公共方法,如元素高亮显示 # coding=utf-8 """高亮显示元素""" ... 
- python web自动化测试框架搭建(功能&接口)——通用模块
		1.通用模块: config.conf: 公共配置文件,配置报告.日志.截图路径,以及邮件相关配置 [report] reportpath = E:\workspace\WebAutomation\s ... 
- Python web自动化测试框架搭建(功能&接口)——unittest介绍
		Python UnitTest测试框架介绍 1) TestCase:所有测试用例类继承的基本类, TestCase的实例就是测试用例 2) TestSuite:测试套件 ... 
- python web自动化测试框架搭建(功能&接口)——环境搭建
		自动化测试框架一般需要实现以下通用功能 执行前准备 结束后清理 执行步骤输出 执行结果输出 错误.失败截图 测试报告 发送邮件 日志 需要的软件和python第三方库有: 通用: JDK Eclips ... 
随机推荐
- cb14a_c++_顺序容器的操作7_赋值与交换(swap)_vector转list
			cb14a_c++_顺序容器的操作7_赋值与交换(swap) vector数据赋值给list, slist.assign(svec.begin(), svec.end());//这样可以转 svec- ... 
- 认证授权方案之JwtBearer认证
			1.前言 回顾:认证方案之初步认识JWT 在现代Web应用程序中,即分为前端与后端两大部分.当前前后端的趋势日益剧增,前端设备(手机.平板.电脑.及其他设备)层出不穷.因此,为了方便满足前端设备与后端 ... 
- 【K8S】Service服务详解,看这一篇就够了!!
			k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 1.1 Service Kubernetes中一个应用服务会有一个或多个实例(Pod, ... 
- 使用SpringCloud Stream结合rabbitMQ实现消息消费失败重发机制
			前言:实际项目中经常遇到消息消费失败了,要进行消息的重发.比如支付消息消费失败后,要分不同时间段进行N次的消息重发提醒. 本文模拟场景 当金额少于100时,消息消费成功 当金额大于100,小于200时 ... 
- EM(最大期望)算法推导、GMM的应用与代码实现
			EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计. 使用EM算法的原因 首先举李航老师<统计学习方法>中的例子来说明为什么要用EM算法估计含有隐变量的概率模型参数. 假设 ... 
- FreeSql.Generator命令行代码生成器是如何实现的
			目录 FreeSql介绍 FreeSql.Generator RazorEngine.NetCore 源码解析 FreeSql.Tools FreeSql FreeSql 是功能强大的对象关系映射技术 ... 
- 4 个好用的 Linux 监控工具
			下面是 Linux 下 4 个日常使用率非常高的监控工具,可以帮助我们准确快速的诊断系统问题. 1. iotop 如果你想知道某些进程使用了多少你宝贵的 I/O 资源,那么就使用 iotop 吧. i ... 
- c++ 宏定义调用不定参数的函数
			假设有一下函数 void Logging(int nLevel, const char* szFormat, ...); 则宏定义如下 #define LOG(FCFL) Logging##FCFL ... 
- 来看下css边框阴影怎么设置?这些方法掌握后工作更轻松
			我们在网页设计中,通常会使用ps工具来达到图片或者边框阴影.立体等效果.但是如果一些基础效果都需要用p图来完成那就显得效率比较低了.其实可以使用CSS来设置边框阴影,下面本篇文章来给大家介绍一下. 在 ... 
- 带你认识网站图片img懒加载和预加载的区别
			懒加载 什么是懒加载? 懒加载也就是延迟加载.当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图),只有当图片出现在浏览 ... 
