全网最详细的Python自动化测试+邮件推送+企业微信推送+Jenkins

createh52周前 (12-12)技术教程18


目录


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自动化部署就完成了。

相关文章

干货|SpringBoot集成极光推送完整实现代码(建议收藏)

工作中经常会遇到服务器向App推送消息的需求,一般企业中选择用极光推送的比较多,在集成极光时发现极光的文档并不完整,网上的文章也很多不能直接使用,这里列出我在工作中集成极光的全部代码,只需要按照如下代...

一文带你彻底搞懂Redis实现消息的订阅发布

前言Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息。Redis客户端可以订阅任意数量的频道!一、实现订阅发布功能①命令:这些命令被广泛用于构...

轻松实现服务器事件推送!Spring SseEmitter 详解

引言服务器推送技术背景简介服务器推送(Server Push)技术允许网站和应用在有新内容可用时主动向用户推送更新,而不需要用户主动去查询。与传统的"拉"模型不同,服务器推送采用...

手把手告诉你如何监听 MySQL binlog 实现数据变化后的实时通知

Hello 大家好,我是阿粉。不知道大家在日常的工作中有没有遇到这样的场景,很多时候业务数据有变更需要及时加载到缓存、ES 或者发送到消息队列中通知下游服务。一般遇到这种情况下,在实时性要求不高的场景...

使用 Netty 长连接实现 Server 主动推送功能问题分析

背景使用 Netty 实现长连接,Client 端主动发起请求到 Server 端后,Server 缓存 Channel ,后续业务需要主动向 Client 推送数据时,直接遍历 Channel 写入...

6款Linux常用远程连接工具,你最中意哪一款?

点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文2106字,阅读约需6分钟Hi,大家好。远程连接的实现方法有很多,概括地说有两种,一种是用系统自带的远程连接,另外一种是用...