使用 Python+Selenium + 第三方库实现简单的web自动化测试框架 源码

一、配置(config)

1.1 说明

设置自动化案例运行时的属性值。

安排自动化案例的执行顺序。
所在路径:
…\Project_Selenium\config

1.2 文件
1.2.1 config.ini
目录:
…\Project_Selenium\config\config.ini

配置字段:
1 [PROJECT]
1.1 browserType
说明:
浏览器类型
示例:
browserType = Chrome
browserType = FireFox

2 [TEST]
2.1 timeOut
说明:
隐形等待时间,单位秒
示例:
timeOut = 10

3 [LOG]
3.1 loggingLevel
说明:
输出日志级别
支持debug, info, warn, warning, error, fatal, critical,级别有低到高,配置级别会记录>=该级别的日志信息

示例:
loggingLevel = info
loggingLevel = error

4 [EMAIL]
4.1 sendEmail
说明:
自动化执行完毕后是否发送邮件

示例:
sendEmail = False

4.2 SMTPLoginName
说明:
SMTP服务器登录名

示例:
SMTPLoginName = zhangsan@outlook.com

4.3 SMTPLoginPasswd
说明:
SMTP服务器登录密码

示例:
SMTPLoginPasswd = 12345678

4.4 senderAddress
说明:
发件地址

示例:
senderAddress = zhangsan @outlook.com

4.5 SMTPServerAddress
说明:
SMTP服务器地址

示例:
SMTPServerAddress = smtp-mail.outlook.com

4.6 SMTPPort
说明:
SMTP服务器地址端口

示例:
SMTPPort = 587

4.7 emailTitle
说明:
邮件主题
示例:
emailTitle = Web自动化测试报告邮件

4.8 emailText
说明:
正文内容
示例:
详细测试报告请查看附件...

5 [receiversAddress]
说明:
收件地址 可配置多个
注意:
选项名不能重复

5.1 address1
说明:
地址1
示例:
address1 =123456789@qq.com

5.2 address2
说明:
地址2
示例:
address2 = zhangsan@outlook.com

测试案例运行配置.xlsx
目录:
…\Project_Selenium\config\测试案例运行配置.xlsx

配置说明:
如下表格为<测试案例运行配置.xlsx>的配置样式(Sheet页)
配置方式 路径 文件名 类名 方法名 是否执行 场景描述 说明

按方法运行 test 案例_1.py Test_1 test_baidu_1_search Y    
按方法运行 test 案例_2.py Test_2 test_baidu_2_search Y    
按方法运行 test 案例_2.py Test_2 test_baidu_3_search N    
按类名运行 test 案例_2.py Test_2 - Y    
按路径运行 \test\测试集_1\ - - - Y    
按路径运行 \test\ - - - Y    

1 配置方式

说明:

组织测试案例、运行测试案例的方式。

运行时会按照案例顺序从上往下执行。

多进程并发执行只需要在该案例中配置其他Sheet页即可,同一Excel中的不同Sheet页并发执行。

1.1 1-按方法运行

说明:

我们以案例1.py文件为例,如下图。

执行时只会执行该方法内的案例。

如果一个py文件中有多个测试案例(方法),而测试时只执行其中的某些,可以通过这一配置实现。

1.2 2-按类名运行

说明:

我们以案例2.py文件为例,如下图。

配置该文件的类并以‘2-按类名运行’则运行时会执行该案例的所有方法(test_baidu_2_search 和 test_baidu_3_search)。

如果一个py文件中有多个测试案例(方法),并需要全部执行,可以通过类名配置运行。

1.3 3-按路径运行

说明:

当前…\Project_Selenium\test 下的目录文件结构如下:

---->.\test
---->\测试集_1
---->测试集1_案例1_zhaopin_1.py
---->案例_1.py
---->案例_2.py
---->案例_3.py
---->案例_4.py
---->案例_5.py

若按照路径配置运行时,例如配置“\test\”,执行时会先执行当前目录下的文件(案例_1.py到案例_5.py),然后再执行当前目录中文件夹下的其他案例(测试集_1下的测试集1_案例1_zhaopin_1.py)。

2 路径

说明:

1.路径务必为相对路径

2.以项目中案例目录(test)为起始目录

示例:

test\directory1\directory2

3 文件名

说明:

此处输入测试用例的文件名,包含后缀。

示例:

案例_1.py

4 类名

说明:

文件中定义的类名,区分大小写

5 方法名

说明:

类中定义的方法名,区分大小写

6 是否执行

说明:

N-不执行

Y-执行

7 场景描述

说明:

描述场景

8 说明

1.3.3 测试计划配置.xlsx

目录:

…\Project_Selenium\config\测试计划配置.xlsx

配置说明:

如下表格为<测试计划配置.xlsx>的配置样式

顺序执行 文件名 是否执行 说明

测试案例运行配置.xlsx Y 执行前准备
测试案例运行配置.xlsx Y 并发执行_1
测试案例运行配置.xlsx Y 并发执行_2
测试案例运行配置.xlsx Y 执行后处理

1 顺序执行

说明:

组织《测试案例运行配置.xlsx》的运行顺序。

运行时会按照案例顺序从上往下执行。

2 文件名

说明:

配置…\Project_Selenium\config\路径下“测试案例运行配置.xlsx”的文件名包含后缀格式。

3 是否执行

说明:

N-不执行

Y-执行

二、日志(log)

2.1 说明

自动化运行时记录并保存日志为log.log文件

自动保存截图照片文件,文件格式为YYYMMDD-hh24mmss.png,截图方法在Driver类中会介绍

所在路径:

…\Project_Selenium\log

三、数据(data)

3.1 说明

1. 支持对.csv、.xlsx 格式的数据文件读写,可以将测试数据维护在此目录。

所在路径:

…\Project_Selenium\data

3.2 读写方法

示例文件:

登录名 密码 是否通过

张三 password N
李四 password Y
Excel/CSV读
  def readExcel(self, path: str, column=1, row=1, sheet=1):
    """
          读取Excel某一单元格数据
          :param path: Excel路径 type=str
          :param sheet: 第几个sheet页或sheet页名称 type=int or str
          :param row: 行数 type=int
          :param column: 列数或列字段名 type=int or str
          :return: 单元格的值
        """
 
  def readCsv(self, path: str, column=1, row=1, fields=True):
        """
          说明:读取csv某一单元格数据
          注意:文件编码建议使用utf-8
          :param path: csv文件路径 type=str
          :param row: 行数 type=int
          :param column: 字段名或列数 type=str or int
          :param fields: csv文件第一行是否是字段
          :return: 单元格值
        """

 获取指定列数和行数的单元格数据

readExcel( path=r”C:\LoginData.xlsx”, column=1, row=1)
readCsv ( path=r”C:\LoginData.csv”, column=1, row=1)

获取指定列名和行数的单元格数据

readExcel( path=r”C:\LoginData.xlsx”, column=”登录名”, row=1)
readCsv ( path=r”C:\LoginData. csv”, column=”登录名”, row=1)

写入Excel指定单元格数据

:param path: Excel路径 type=str
:param row: 行数 type=int
:param column: 列数或列字段名 type=int or str
:param value: 需要写入的数据 type=str
:param sheet: 第几个sheet页或sheet页名称 type=int or str
"""
def writeCsv(self, path: str, value="", column=1, row=1, fields=True):
"""

 说明:写入csv指定单元格数据

注意:文件编码建议使用utf-8
:param path: csv文件路径 type=str
:param value: 需要写入的数据 type=str
:param row: 行数 type=int
:param column: 字段名或列数 type=str or int
:param fields: csv文件第一行是否是字段
:return: None
"""

示例:

根据指定行列数设置单元格数值
readExcel( path=r”C:\LoginData.xlsx” , value=”N” , column=3, row=2)
readCsv( path=r”C:\LoginData. csv” , value=”Y” , column=3, row=3)
 
根据指定列名和行数设置单元格数值
readExcel( path=r”C:\LoginData.xlsx” , value=”李四” , column=”是否通过”, row=2)
readCsv( path=r”C:\LoginData. csv” , value=”李四” , column=”是否通过”, row=3)

四、驱动(drivers)

4.1 说明

管理浏览器对应的驱动文件。

自动化案例执行时使用的是该目录下的驱动。

所在路径:

…\Project_Selenium\ drivers

五、元素(elements)

5.1 说明

在该目录下编写页面的元素,可以将元素与案例隔离,分别维护。

所在路径:

…\Project_Selenium\ elements

class 首页():
输入框 = (By.CSS_SELECTOR, "#kw")
确定按钮 = (By.CSS_SELECTOR, "#su")
 
def setUpClass(cls):
cls.driver = Driver("https://www.baidu.com", "chrome")
@classmethod # 执行整个TestCase中只调用一次setUp和tearDown
def tearDownClass(cls):
cls.driver.quit()
def test_baidu_1_search(self):
self.driver.getelement((首页.输入框)).clear()
self.driver.getelement((首页.输入框)).send_keys("Python")
self.driver.getelement(*(首页.确定按钮)).click()

六、报告(report)

6.1 说明

自动化运行结束后生成报告文件,

格式为“
ResultReport_YYYYMMDD_hh24mmss.html”

所在路径:

…\Project_Selenium\ report

七、源码(src)

7.1 说明:

该目录为项目源码

所在路径:

…\Project_Selenium\ src

八、测试用例(test)

8.1 说明

该目录为测试用例存放目录

所在路径:

…\Project_Selenium\ test

示例代码:

coding:utf-8
import unittest
import time
from elements.百度 import 首页 # 元素库
from src.log import Log # 日志记录功能
from src.public import Public # 继承一些公共方法
from src.testcasemore import TestCaseMore # 集成扩展unittest.TestCase功能的类
from src.newselenium import Driver # 使用经过二次封装的Dirver
logger = Log().getLogger # 创建日志记录对象,记录日志信息通过logger.info logger.error选择不同级别来记录
class Test_1(TestCaseMore, unittest.TestCase): # 继承TestCaseMore 和 unittest.TestCase两个类,必填
@classmethod # 执行整个TestCase中只调用一次setUp
def setUpClass(cls): # 案例初始化时执行
cls.driver = Driver("https://www.baidu.com", "chrome") # 初始化驱动,指定浏览器类型并打开初始url

案例也可单独调试

if name == "main":
unittest.main()

九、其他

9.1 .idea

说明:

项目工程配置文件,可以忽略,请勿删除

9.2 tutorial

说明:

自动化框架相关手册和说明

9.3 runtest.bat

说明:

自动化执行bat脚本

9.4 runtest.py

说明:

自动化开始执行py文件

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/453859.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++那些事儿】深入理解C++类与对象:从概念到实践(下)| 再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元

&#x1f4f7; 江池俊&#xff1a;个人主页 &#x1f525; 个人专栏&#xff1a;✅C那些事儿 ✅Linux技术宝典 &#x1f305; 此去关山万里&#xff0c;定不负云起之望 文章目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit 关键字 2. static成员2.1 概念…

十四、Nacos源码系列:Nacos配置发布原理

目录 一、简介 二、加密处理 三、发布配置 3.1、插入或更新配置信息 3.2、发布配置数据变动事件 3.2.1、目标节点是当前节点 3.2.2、目标节点非当前节点 四、总结 一、简介 一般情况下&#xff0c;我们是通过Nacos提供的Web控制台登录&#xff0c;然后通过界面新增配置…

个人博客系列-后端项目-用户注册功能(7)

介绍 用户注册API的主要流程&#xff1a;1.前端用户提交用户名&#xff0c;密码 2. 序列化器校验用户名&#xff0c;密码是否合法。3.存入数据库。4.签发token 创建序列化器 from rest_framework import serializers from rest_framework_simplejwt.serializers import Toke…

图【数据结构】

文章目录 图的基本概念邻接矩阵邻接表图的遍历BFSDFS 图的基本概念 图是由顶点集合及顶点间的关系组成的一种数据结构 顶点和边&#xff1a;图中结点称为顶点 权值:边附带的数据信息 路径 &#xff1a; 简单路径 和 回路&#xff1a; 子图&#xff1a;设图G {V, E}和图G1…

计算机网络:关键性能指标与非性能特征解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

VR文化旅游虚拟现实介绍|虚拟现实元宇宙|VR设备购买

虚拟现实&#xff08;VR&#xff09;技术正在改变我们对文化旅游的认知和体验。通过VR技术&#xff0c;人们可以身临其境地探索世界各地的文化遗产和旅游景点&#xff0c;无需亲临现场也能感受到逼真的体验。以下是VR文化旅游虚拟现实的介绍&#xff1a; 身临其境的体验&#x…

c++之旅——第六弹

大家好啊&#xff0c;这里是c之旅第六弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一,静态成员&…

安装Mysql和Mycli插件

一、安装数据库 1.重定向生成配置文件 cat >/etc/yum.repos.d/mysql.repo <<EOF [mysql57-community] nameMySQL 5.7 Community Server baseurlhttp://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/ enabled1 gpgcheck0 EOF 2.yum安装 yum -y install mysq…

eclipse导入项目出现中文乱码

eclipse导入java项目的时候有时会出现乱码问题&#xff0c;很苦恼&#xff0c;网上找了很多方法都没用&#xff0c;所以得自己记录一下。导入项目可参考链接 eclipse中导入java项目-CSDN博客 1、点击 Windows --> Pereferences 2、依次点击下图内流程 3、看到下面的就修改成…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的血细胞智能检测与计数(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;开发血细胞智能检测与计数系统对于疾病的预防、诊断和治疗具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个血细胞智能检测与计数系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&a…

弧形导轨的设计要求

制造业设备种类越来越多&#xff0c;非标自动化设备渐渐成了主力市场&#xff0c;其中弧形导轨线体作为非标自动化运输中的基石&#xff0c;承担了运输&#xff0c;定位&#xff0c;特殊工位组装&#xff0c;其设计要求也非常严格。 1、精度要求&#xff1a;弧形导轨需要具备高…

【C++】开源:iceoryx通信中间件配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍iceoryx通信中间件配置与使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新…

Linux运维之管理工具篇

一、前言 因运维过程中&#xff0c;经常会借助于很多工具来实现我们的监控、备份、校验&#xff0c;安全测试&#xff0c;批量操作&#xff0c;可视化辅助&#xff0c;集中管理等&#xff0c;甚至AI相关&#xff0c;本文特对常用工具进行梳理记录&#xff0c;以备不时之需及后…

记OnlyOffice的两个大坑

开发版&#xff0c;容器部署&#xff0c;试用许可已安装。 word&#xff0c;ppt&#xff0c;excel均能正常浏览。 自带的下载菜单按钮能用。 但config里自定义的downloadAs方法却不一而足。 word能正常下载&#xff0c;excel和ppt都不行。 仔细比对调试了代码。发现app.js…

2024年3月份实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

Antd中s-table组件某字段进行排序

Antd中s-table组件某字段进行排序 提前说明&#xff0c;s-table组件包含分页等功能 <s-tableref"table":columns"columns":data"loadData"bordered:row-key"(record) > record.id"></s-table>而其中loadData为获取表数…

strcat函数

函数理解记忆&#xff1a;str表示是<string.g>中的函数&#xff0c;cat表示附加。意思是将一个字符串的内容附加到另一个字符串的末尾。 注意要点&#xff1a;既然要附加&#xff0c;附加的字符串和被附加的字符串都要有\0。否则不知道附加多少&#xff0c;不知附加在哪…

【Linux进程的知识点】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档文章目录 前言 操作系统的知识补充 我们来理解一个用户操作接口&#xff1a; 进程的理解 进程的基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 …

算法刷题Day8 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

目录 0 引言1 反转字符串1.1 我的解题1.2 2 反转字符串II2.1 解题 3 替换数字3.1 双指针法 4 翻转字符串里的单词4.1 我的解题思路4.2 另一种思路 5 右旋转字符串5.15.2 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题…

什么是序列化?为什么需要序列化?

1、典型回答 序列化(Serialization)序列化是将对象转换为可存储或传输的形式的过程(例如: 将对象转换为字节流) 反序列化(Deserialization) 是将序列化后的数据(例如: 二进制文件)转换回原始对象的过程。通过反序列化&#xff0c;可以从存储介质 (如磁盘、数据库) 或通过网络…