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

在这里插入图片描述

使用 Python+Selenium + 第三方库实现简单的 web 自动化测试框架,为 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 = [email protected]

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 [email protected]

5.2 address2
说明:
地址2
示例:
address2 = [email protected]

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

1-按方法运行 test 案例_1.py Test_1 test_baidu_1_search Y    
1-按方法运行 test 案例_2.py Test_2 test_baidu_2_search Y    
1-按方法运行 test 案例_2.py Test_2 test_baidu_3_search N    
2-按类名运行 test 案例_2.py Test_2 - Y    
3-按路径运行 \test\测试集_1\ - - - Y    
3-按路径运行 \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>的配置样式

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

1 1-测试案例运行配置.xlsx Y 执行前准备
2 2-测试案例运行配置.xlsx Y 并发执行_1
3 3-测试案例运行配置.xlsx Y 并发执行_2
4 3-测试案例运行配置.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文件

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
在这里插入图片描述

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

你可能感兴趣的:(程序员,IT,软件测试,python,自动化,开发语言,测试工程师,软件测试)