全网最详细的Python自动化测试+邮件推送+企业微信推送+Jenkins
ztj100 2025-01-09 17:29 17 浏览 0 评论
目录
1. 概述
1.1 python自动化
1.2 邮件推送
1.3 企业微信推送
1.4 Jenkins自动化部署
2. 项目实现
2.1 python脚本
2.2 运行脚本
2.3 邮件推送
2.4 企业微信推送
2.5 Jenkins自动化部署
1. 概述
1.1 python自动化
什么是python自动化?我理解的Python自动化测试就是把以前人为测试转化为机器测试的一种过程。自动化测试是一种比手工测试更快获得故障反馈的方法。
自动化测试是一种质量保障的方式,最重要的还是以做好一款高质量产品为前提。测试工作很多时候就是在不断平衡质量、效率、驱动业务这三者之间的比例和深度。根据不同的业务阶段、不同的目标、当前的关键事件驱动,在质量、效率、驱动业务上不断地调整策略和战术。
1.2 邮件推送
在python自动化测试人员完成项目的自动化测试工作之后,需要将自动化测试报告结果发送给对应的负责人查看。如果每次执行完自动化测试之后都需要测试人员手动将测试报告转发给负责人,如果在转交的过程中发生点突发事件,测试人员忘记要将测试报告转发给负责人,负责人就会迟迟收不到想要的工作内容,这样的效率对于从事软件行业的人们来说效率是很低的。因此由生出python自动化邮件推送这个功能。
邮件传输一般是通过SMTP协议,SMTP协议是一组由源地址到目的地址传输邮件的规则。在python中通过smtplib模块对SMTP协议进行简单的封装,实现了方便的途径来发送邮件,通过SMTP的sendmail方法来发送邮件。这是一种比较通用的邮件传输方法,不过本次我给大家介绍的是unittestreport包中封装的一个邮件推送方法。这个邮件推送方法相对于传统的方法来说,更加的简洁、易懂,适用于使用unittest测试框架的脚本。通过使用python自动化邮件推送功能,就能在自动化测试结果生成之后自动邮件发送到对应负责人的邮箱之中,提高了工作效率。
1.3 企业微信推送
什么是企业微信推送呢?企业微信推送就是自动化测试人员在进行完自动化测试工作之后将测试结果信息推送到自己工作所在的企业微信测试群中,让相关人员看到项目自动化测试的执行情况,这也是一种及时将自动化测试结果共享的一种方法。
1.4 Jenkins自动化部署
什么是Jenkins呢?Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
那什么是Jenkins自动化部署呢?由于自动化测试工作的特性就是在每次版本迭代时对系统功能进行自动化测试,从而找出系统在版本迭代过程汇中可能出现的问题,这种工作具有很强的重复性。如果每次版本迭代都需要测试人员手动执行自动化脚本,对于从事软件行业工作的我们来说并不是一件很酷的事情,而且还很繁琐。由于Jenkins的作用就是用于监控持续重复的工作,所以我们将完成后的自动化测试脚本部署到Jenkins上,并设置好相应的定时器,Jenkins就能按照规定好的程序、时间来自动执行我们的自动化测试脚本,从而提高测试人员的工作效率。
2. 项目实现
2.1 python脚本
本次介绍的是基于SaaS后台管理平台账号的增删改查功能所编写的自动化测试脚本。脚本所使用的python框架是unittest框架,ui元素定位都使用的是Xpath方法。然后通过unittestreport包中的邮件推送和企业微信推送方法来便捷的实现测试报告自动推送到负责人邮箱和对应的企业微信群中。下面将详细介绍脚本实现方法:
在Pycharm编译器中创建一个.py文件,然后在py文件的最开始处导入我们脚本需要使用的文件包。由于我们的自动化测试是基于selenium框架的,并且使用的是UI元素定位方法,因此我们需要导入selenium包。使用的自动化框架是unittest,所以导入unittest包。在自动化脚本运行时,我们需要使得脚本在运行过程中有所停顿以便于观察,所以要导入time包。
将调用浏览器驱动、最大化浏览器、隐式等待和打开测试网址放在setup函数之中,由于setup函数的功能是在调用每一个新函数时都会执行一次,若使用该函数,会导致脚本元素定位的逻辑出现问题,从而导致脚本运行失败。所以我们需要的是在自动化脚本运行前调用一次setup函数即可,因此我们使用的是setUpClass函数,该函数在整个自动化脚本运行过程中只会运行一次,符合我们的预期。但又因为setUpClass函数是一个类函数,若我们将其写在一个类中,也会导致脚本运行错误,因此我们需要在函数前面添加一个@classmethod,来申明这个是一个类函数。同理在脚本运行结束之后,我们需要将自动打开的网页进行关闭,这个关闭网页的功能,我们就写在了tearDownClass类函数中。
接着我们对SaaS登录页面进行代码编写,因为我们采用的是unittest框架,因此创建的场景函数要以test开头,登录界面的函数就为test_01_login。然后通过UI元素定位来实现登录自动化,后面的增删改查环境代码编写也是如此,在这就不一一赘述。
2.2 运行脚本
SaaS后台管理的自动化脚本编写完成之后,我们需要编写一个执行此脚本的运行文件,该文件我们称之为runner文件。因为我们是基于unittest框架编写的自动化脚本,为了便捷并生成界面好看的自动化测试报告,我们在这里选用了unittestreport这个数据包,这里面封装了多个好看的测试报告模板功测试人员选择。
为了辨别生成的测试报告的版本,我们通过time.strftime()方法来给测试报告添加时间戳。然后定义个suite套件用于临时存储我们所有的测试场景脚本。那我们该如何获取之前写的那些场景脚本呢?一种方法是将之前写好的场景脚本的py文件通过import导入到当前文件中来,不过这种办法比较笨重,如果py文件很多的话,我们的工作效率就会变得很低下。所以在这我们介绍另外一种方法,就是通过unittest.defaultTestLoader.discover()方法读取我们文件所在的位置。如果脚本是在本地运行,我们可以导入脚本的绝对路径,但是如果我们要求脚本在别的环境中也能运行,那就不能读取脚本的绝对路径了,而是改为相对路径。因为我们后面还需要将脚本部署到gitlab中,所以在此我们写的就是读取脚本的相对路径。
怎么生成好看的自动化测试报告呢?接下来我们就要用到unittestreport中的TestRunner()方法了。unittestreport将python中的TestRunner()方法进行了重新编写并封装,我们只需要调用其的TestRunner()即可使用。TestRunner()中的各个参数解释在代码中都有注释,在此就不一一赘述。
模板参数填写完之后,通过使用runner.run()调用run方法执行当前脚本就可以生成我们需要的自动化测试报告了。
2.3 邮件推送
自动化测试报告生成之后,我们有两种方法来设置邮件推送结果。一种是常见的第三方SMTP服务,通过导入smtplib和MIMETEXT这两个包来编写邮件推送的方法。
不过这种常见的邮件推送方法代码相对于unittestreport中的send_email()方法来说过于繁琐。unittestreport中将smtp邮件传输方法进行了重新编写并封装,我们只需要调用其方法时,正确填写对应参数即可。
这边的smtp地址为发件人邮箱的smtp地址。如何开启邮箱的smtp服务呢?以163邮箱为例,我们可以登录邮箱后,点击【设置】-【POP3/SMTP/IMAP】中进行设置。
然后在邮箱获取STMP的授权密码并填写到send_email()方法中即可。
执行测试脚本,可以发现接收方的邮箱中受到了测试报告以及测试报告结果的附件。
2.4 企业微信推送
如何将测试报告推送到企业微信所在的测试群呢?首先我们要有一个企业微信。然后要获取自己所在企业微信群的chatid。这个chatid不是每个企业微信群都有的,必须通过接口创建的企业微信群才会有chatid。所以我们首先来讲一下如何通过接口来创建一个企业微信群并获取其chatid。
首先我们要进入企业微信服务商后台管理页面,打开服务商信息,复制我们的CorpID。
然后在企业后台管理中点击【应用管理】-【应用】-【自建】中创建一个应用。
创建完自建应用之后,我们点击进入自己创建的应用,点击查看Secret。
接着我们可以在企业微信中收到通知,获取我们需要的Secret。
获取到企业微信的CorpID和secret之后,我们进入企业微信的开发者中心,先获取创建群聊所需要的access_token。
获取到access_token之后,我们就可以进入下一步创建群聊会话。
body里面参数填写的对应要求如下:
这个时候,我们就会问,我怎么获取对应账号的userid呢?我们可以通过在企业后台管理中的【通讯录】的对应部门中找到用户姓名查看其信息,复制他的账号,然后在企业微信开发者中心的【管理通讯录】-【读取成员】,从而获取对应账号的userid。
获取到userid后我们再次回到创建群聊的接口界面,正确填写Body的对应参数。其中chatid的值为空,我们这边设置为随机生成chatid。
以上我们就获取到了我们企业微信推送的所有参数信息,然后我们调用unittestreport里面的weixin_notice()方法来实现测试报告企业微信推送了。由于access_token的有效时间为2个小时,为了避免重复修改代码,所以我们这边就不使用access_token。
参数填写完成之后,我们运行runner.py脚本。运行结束之后,企业微信中通过接口创建的群聊就会收到运行测试的结果。
2.5 Jenkins自动化部署
如何设置Jenkins自动化部署呢?首先我们需要将创建自己的gitlab账号和安装本地的Jenkins服务,如果是由服务器的那就更好了。在此我们只讲解本地的Jenkins的设置,gitlab是在公司服务器部署的。
首先是gitlab设置,我们创建完自己的gitlab账号之后,登录进入自己的gitlab账号,然后点击【项目】,创建一个新项目。
这样我们的gitlab项目就创建好了,接下来就是在pycharm编译器中设置git上传环境了。首先是需要在本地下载一个git。这边提供一个下载链接:https://git-scm.com/
git下载完后进行默认的安装,然后打开pycharm编译器进行git环境设置。
打开gitlab的项目,复制项目的存储地址。并将该地址写到pycharm的VCS->Get from Version Control ->url中。
如果是第一次在pycharm设置git环境的话,在完成上面的操作之后,会跳出gitlab的 账号密码登录窗口,我们需要输入自己的gitlab账号密码进行验证。
后面的操作一直选择第一个选项即可。然后就会出现我们在gitlab中创建的项目文件夹了。
接下来就是将我们编写的场景脚本和执行脚本上传到gitlab仓库中。
选择我们需要上传的文件,根据需求添加上传的备注信息,然后点击Commit and Push将代码文件推送到Gitlab仓库中。
点击Push推送。
脚本文件推送完成之后,pycharm左下方的Git会出现上传成功的提示。
然后我们到Gitlab中查看一下上传信息。我们可以看到从pycharm上传的代码信息,证明代码推送到Gitlab仓库成功了。
代码推送到Gitlab完成之后,我们就需要在Jenkins中部署一下自动化部署执行python脚本。
在Dos中打开进入Jenkins.war所在的目录,然后通过java -jar jenkins.war --httpPort=8889启动Jenkins。我这边是提前安装过jenkins服务,并且通过--httpPort参数指定了jenkins的服务端口。
出现”Jenkins is fully up and running”就代表Jenkins启动成功了。友情提示,启动Jenkins的这个Dos界面不能关闭,否则Jenkins服务就会关闭。
然后在浏览器输入127.0.0.1:8889进入Jenkins界面
接着点击【Manage Jenkins】->【Manage Plugins】中安装Git和Qy Wechat Notification这两个插件。Git插件的作用,顾名思义就是用于拉Gitlab仓库的代码,Qy Wechat Notification插件的作用是将执行后的测试结果信息推送到企业微信群中。安装好这两个插件之后,我们需要重启一下Jenkins服务,最简单的方法就是将启动Jenkins服务的Dos页面关闭,重新按照启动Jenkins的方法重启一次。
然后再点击【Manage Jenkins】->【Manage Credentials】配置全局密钥。
点击【添加凭据】
然后填写凭据的各个参数信息。
这样我们的Git凭据就设置完成了,接下来是创建Jenkins执行的Job。点击首页的【新建Item】选择【构建一个多配置项目】,任务名称根据自己的需求填写即可。
接下来设置git地址:
接着配置触发器:
接着我们配置python脚本的运行设置。
运行python脚本的命令为python XX.py文件,我们的python脚本执行文件名为runner.py,所以我们这边填写为python runner.py
最后我们需要配置一下脚本运行后推送到企业微信的设置。这边我们需要配置一个Webhook地址,这个Webhook地址其实就是企业微信群中的机器人的地址,在创建机器人时会生成这个Webhook地址,我们将机器人的Webhook地址填写进来即可。
Job配置完成之后,点击【Build Now】运行Job。我们可以发现Job构建成功了。
然后查看Jenkins构建Job时推送到企业微信群的信息:
就此Jenkins自动化部署就完成了。
相关推荐
- 干货 | 各大船公司VGM提交流程(msc船运公司提单查询)
-
VGM(VerifiedGrossMass)要来了,大外总管一本正经来给大家分享下各大船公司提交VGM流程。1,赫伯罗特(简称HPL)首先要注册账户第一,登录进入—选择product------...
- 如何修改图片详细信息?分享三个简单方法
-
如何修改图片详细信息?分享三个简单方法我们知道图片的详细信息里面包含了很多属性,有图片的创建时间,修改时间,地理位置,拍摄时间,还有图片的描述等信息。有时候为了一些特殊场景的需要我们需要对这些信息进行...
- 实用方法分享:没有图像处理软件,怎么将一张照片做成九宫格?
-
在发朋友圈时,如果把自己的照片做成九宫格,是不是更显得高大上?可能你问,是不是要借助图片处理软件,在这里,我肯定告诉你,不需要!!!你可能要问,那怎么实现呢?下面你看我是怎么做的,一句代码都不写,只是...
- 扫描档PDF也能变身“最强大脑”?RAG技术解锁尘封的知识宝藏!
-
尊敬的诸位!我是一名物联网工程师。关注我,持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与AI的无尽可能。今天有网友问我扫描档的PDF文件能否做知识库,其实和普通pdf处理起来差异...
- 这两个Python库,轻而易举就能实现MP4与GIF格式互转,太好用了
-
mp4转gif的原理其实很简单,就是将mp4文件的帧读出来,然后合并成一张gif图。用cv2和PIL这两个库就可以轻松搞定。importglobimportcv2fromPILimpo...
- python图片处理之图片切割(python把图片切割成固定大小的子图)
-
python图片切割在很多项目中都会用到,比如验证码的识别、目标检测、定点切割等,本文给大家带来python的两种切割方式:fromPILimportImage"""...
- python+selenium+pytesseract识别图片验证码
-
一、selenium截取验证码#私信小编01即可获取大量Python学习资源#私信小编01即可获取大量Python学习资源#私信小编01即可获取大量Python学习资源importjso...
- 如何使用python裁剪图片?(python图片截取)
-
如何使用python裁剪图片如上图所示,这是一张包含了各类象棋棋子的图片。我们需要将其中每一个棋子都裁剪出来,此时可以利用python的...
- Python rembg 库去除图片背景(python 删除图片)
-
rembg是一个强大的Python库,用于自动去除图片背景。它基于深度学习模型(如U^2-Net),能够高效地将前景物体从背景中分离,生成透明背景的PNG图像。本教程将带你从安装到实际应用...
- 「python脚本」批量修改图片尺寸&视频安帧提取
-
【python脚本】批量修改图片尺寸#-*-coding:utf-8-*-"""CreatedonThuAug2316:06:352018@autho...
- 有趣的EXCEL&vba作图(vba画图表)
-
还记不记得之前有个日本老爷爷用EXCEL绘图,美轮美奂,可谓是心思巧妙。我是没有那样的艺术细胞,不过咱有自己的方式,用代码作图通过vba代码将指定的图片写入excel工作表中,可不是插入图片哦解题思...
- 怎么做到的?用python制作九宫格图片,太棒了
-
1.应用场景当初的想法是:想把一张图切割成九等份,发布到微信朋友圈,切割出来的图片,上传到朋友圈,发现微信不按照我排列的序号来排版。这样的结果是很耗时间的。让我深思,能不能有一种,直接拼接成一张...
- Python-连续图片合成视频(python多张图叠加为一张)
-
前言很多时候,我们需要将图片直接转成视频。下面介绍用python中的OpenCV将进行多张图合成视频。cv2安装不要直接用pipinstallcv2,这会报错。有很多人建议用打开window自带的...
- 如何把多个文件夹里的图片提取出来?文件夹整理合并工具
-
在项目管理中,团队成员可能会将项目相关的图片资料分散存储在不同的文件夹中,以便于分类和阶段性管理。然而,当项目进入汇报或总结阶段时,需要将所有相关图片整合到一个位置,以便于制作演示文稿、报告或进行项目...
- 超简单!为图片和 PDF 上去掉水印(pdf图片和水印是一体,怎么去除)
-
作者:某某白米饭...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 干货 | 各大船公司VGM提交流程(msc船运公司提单查询)
- 如何修改图片详细信息?分享三个简单方法
- 实用方法分享:没有图像处理软件,怎么将一张照片做成九宫格?
- 扫描档PDF也能变身“最强大脑”?RAG技术解锁尘封的知识宝藏!
- 这两个Python库,轻而易举就能实现MP4与GIF格式互转,太好用了
- python图片处理之图片切割(python把图片切割成固定大小的子图)
- python+selenium+pytesseract识别图片验证码
- 如何使用python裁剪图片?(python图片截取)
- Python rembg 库去除图片背景(python 删除图片)
- 「python脚本」批量修改图片尺寸&视频安帧提取
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- node卸载 (33)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- exceptionininitializererror (33)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)