全网最详细的Python自动化测试+邮件推送+企业微信推送+Jenkins
off999 2024-09-18 22:38 29 浏览 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自动化部署就完成了。
相关推荐
- 面试官:来,讲一下枚举类型在开发时中实际应用场景!
-
一.基本介绍枚举是JDK1.5新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错...
- 一日一技:11个基本Python技巧和窍门
-
1.两个数字的交换.x,y=10,20print(x,y)x,y=y,xprint(x,y)输出:102020102.Python字符串取反a="Ge...
- Python Enum 技巧,让代码更简洁、更安全、更易维护
-
如果你是一名Python开发人员,你很可能使用过enum.Enum来创建可读性和可维护性代码。今天发现一个强大的技巧,可以让Enum的境界更进一层,这个技巧不仅能提高可读性,还能以最小的代价增...
- Python元组编程指导教程(python元组的概念)
-
1.元组基础概念1.1什么是元组元组(Tuple)是Python中一种不可变的序列类型,用于存储多个有序的元素。元组与列表(list)类似,但元组一旦创建就不能修改(不可变),这使得元组在某些场景...
- 你可能不知道的实用 Python 功能(python有哪些用)
-
1.超越文件处理的内容管理器大多数开发人员都熟悉使用with语句进行文件操作:withopen('file.txt','r')asfile:co...
- Python 2至3.13新特性总结(python 3.10新特性)
-
以下是Python2到Python3.13的主要新特性总结,按版本分类整理:Python2到Python3的重大变化Python3是一个不向后兼容的版本,主要改进包括:pri...
- Python中for循环访问索引值的方法
-
技术背景在Python编程中,我们经常需要在循环中访问元素的索引值。例如,在处理列表、元组等可迭代对象时,除了要获取元素本身,还需要知道元素的位置。Python提供了多种方式来实现这一需求,下面将详细...
- Python enumerate核心应用解析:索引遍历的高效实践方案
-
喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据GitHub代码分析统计,使用enumerate替代range(len())写法可减少38%的索引错误概率。本文通过12个生产...
- Python入门到脱坑经典案例—列表去重
-
列表去重是Python编程中常见的操作,下面我将介绍多种实现列表去重的方法,从基础到进阶,帮助初学者全面掌握这一技能。方法一:使用集合(set)去重(最简单)pythondefremove_dupl...
- Python枚举类工程实践:常量管理的标准化解决方案
-
本文通过7个生产案例,系统解析枚举类在工程实践中的应用,覆盖状态管理、配置选项、错误代码等场景,适用于Web服务开发、自动化测试及系统集成领域。一、基础概念与语法演进1.1传统常量与枚举类对比#传...
- 让Python枚举更强大!教你玩转Enum扩展
-
为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?ifstatus==1:print("开始处理")elifstatus==2:pri...
- Python枚举(Enum)技巧,你值得了解
-
枚举(Enum)提供了更清晰、结构化的方式来定义常量。通过为枚举添加行为、自动分配值和存储额外数据,可以提升代码的可读性、可维护性,并与数据库结合使用时,使用字符串代替数字能简化调试和查询。Pytho...
- 78行Python代码帮你复现微信撤回消息!
-
来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。[导读]Python曾经对我说:"时日不多,赶紧用Python"。于是看...
- 登录人人都是产品经理即可获得以下权益
-
文章介绍如何利用Cursor自动开发Playwright网页自动化脚本,实现从选题、写文、生图的全流程自动化,并将其打包成API供工作流调用,提高工作效率。虽然我前面文章介绍了很多AI工作流,但它们...
- Python常用小知识-第二弹(python常用方法总结)
-
一、Python中使用JsonPath提取字典中的值JsonPath是解析Json字符串用的,如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的,使用jsonpat...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)