Pytest+selenium+allure+Jenkins自动化测试框架搭建及使用

一、    环境搭建
1.    Python下载及安装
Python可应用于多平台包括windows, Linux 和 Mac OS X, 本文主要介绍windows环境下。你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。
 

 

如未安装python, 推荐下载python 3.8.3以上版本,本文主要介绍windows下安装,打开 WEB 浏览器访问https://www.python.org/downloads/windows/ ,在下载列表选择对应的Windows系统平台安装包,如文件名python-3.9.5-amd64.exe(对应64位操作系统),直接运行安装。

 下载后运行.exe可执行文件,使用默认设置,“下一步”直到完成, 添加安装路径如:C:\Python38和C:\Python38\Scripts两个路径到环境变量Path中,保存后在cmd命令行下执行python验证。
环境变量编辑结果:

 

 2. JDK安装(后面的Tomcat, allure等需要依赖JDK)
去官网(https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html)下载JDK安装包,运行下载的JDK安装文件,如jdk-8u181-windows-x64.exe,只需要更改一下安装位置(或不改)并记住这个安装位置。
2.1在上一步的环境变量中新建JAVA_HOME变量,变量值即JDK安装目录(我的是: c:\Program Files\Java\jdk1.8.0_181)。
2.2再新建CLASS_PATH变量,变量值为 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;  前面有个英文的点和分号不要漏掉。
2.3 Path变量中新增值 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;  注意如果是windows7系统等path变量中多个地址都放在一行的情况下,要在之间增加英文分号与前面的变量值间隔开.
设置完成后结果如下图所示:

 保存配置后可以在cmd下执行java -version验证:

 

3. 编辑器安装
可以自行搜索PyCharm或Visual Studio Code的安装及配置,本文不详细说明
PyCharm下载地址: https://www.jetbrains.com/zh-cn/pycharm/
Visual Studio Code下载地址: https://code.visualstudio.com/

4. 相关python包及插件的安装
本框架需要用到的python包包括:pytest, selenium, allure-pytest
4.1 安装pytest
在cmd下或PyCharm或Visual Studio Code的Terminal命令行下用pip命令工具安装: 
>pip install -U pytest   (-U参数表示如已安装则升级到最新版)

 Pytest命令未指定目录或文件时,会在当前目录及所有子目录下查找测试模块,包含:文件名为test_*.py或者*_test.py的文件,在测试模块中查找以test_开头的函数,查找名字以Test开头的类。其中首先筛选掉包含__init__()函数的类,再查找类中以test_开头的类方法,即规则如下:
==测试文件以test_开头(以_test结尾也可以)
==测试类以Test开头,并且不能带有init方法
==测试函数以test_开头
==断言使用基本的assert即可
如图所示

Pytest框架提供可按优先级执行测试用例 

 

4.2 安装selenium
命令行输入
>pip install selenium    

  
了解selenium请访问:https://blog.csdn.net/qq_44326412/article/details/107825851?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162129756416780357211210%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162129756416780357211210&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-107825851.first_rank_v2_pc_rank_v29&utm_term=selenium&spm=1018.2226.3001.4187
 4.3 安装allure
4.3.1 Allure 下载最新版本:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 选择一个版本进入后,下载zip包

下载完后解压到某个目录中, 在环境变量path中加入allure所在目录,如我的环境变量path中增加D:\allure\allure-2.13.9\bin
4.3.2 与pytest的集成
安装pytest-allure插件库, >pip install allure-pytest
4.3.3 Jenkins中安装allure插件 ,以下安装Jenkins时再介绍
4.3.4 allure生成报告
说明:pytest执行测试用例产生的数据是以json格式的数据类型保存,通过allure generate去解析才能正式生成html类型的测试报告
配合pytest使用: >pytest --alluredir=D:/pytest/result (执行pytest时指定allure报告产生结果的目录,也可以使用相对路径指定,如:pytest --alluredir=../result , 表示指定当前目录的上一级目录下的result目录)
要在测试完成后查看实际报告,需要使用Allure命令行实用程序从结果生成报告:
>allure generate ../result -o ../report --clean (从上一条命令生成的allure结果../result中整理成测试报告到../report下,--clean参数表示之前已有结果则清除)
通过allure注解方式可对报告进行层级划分,这种方式可对用例进行统一的管理并分级展示
示例代码:
 

 执行结果如下:

 

5. Tomcat及Jenkins安装
   注Jenkins也可以直接运行在windows下, 但推荐使用Tomcat容器来运行Jenkins
5.1从官网下载Tomcat,根据需要下载windows版的64位zip文件;下载地址为:https://tomcat.apache.org/whichversion.html

5.2将下载后的Tomcat解压到某个盘中,我的解压到D:\Tomcat; 

5.3配置Tomcat环境变量,新建一个TOMCAT_HOME,值为D:\Tomcat\apache-tomcat ;新建一个CATALINA_HOME,值为D:\Tomcat\apache-tomcat-9.0.36;将;%TOMCAT_HOME%\bin;%CATALINA_HOME%\lib放到path中。

5.4进入到D:\Tomcat\apache-tomcat-9.0.36\bin点击startup.bat文件
  

5.5然后在浏览器中输入localhost:8080出现一只猫页面即成功(默认是8080端口),如果端口冲突要修改,就到D:\Tomcat\apache-tomcat-9.0.36\conf目录下修改server.xml文件中<Connector port="8088" protocol="HTTP/1.1"  connectionTimeout="20000" redirectPort="8443" />将8080改为8088或其它你想要的端口号 
效果图如下

5.6安装Jenkins

5.6.1下载Jenkins应用包jenkins.war (下载地址https://www.jenkins.io/zh/download/)

5.6.2 新建一个环境变量,JENKINS_HOME,即将要安装的jenkins的目录,我创建的为D:\Jenkins,
或者是编辑D:\Tomcat\apache-tomcat-9.0.36\conf下的context.xml文件添加<Context ...> <Environment name="JENKINS_HOME" value="D:/jenkins/" type="java.lang.String"/>
</Context>
不然会默认安装在c盘用户下的.jenkins 文件夹下,还有就是如果之前的文件如果安装出错了的话要将所有的文件都删除掉不然还会影响后续的安装
5.6.3把jenkins.war 包放在tomcat的webapps下
 
5.6.4进入到D:\Tomcat\apache-tomcat-bin运行startup.bat文件,此时会安装jenkins,安装好之后,wabapp里会出现jenkins文件。重点jenkins和tomcat端口不要一样。tomcat设置端口8088,jenkins端口8080,打开http://localcat:8086/jenkins
效果如下图,访问jenkins的时候有个初始化密码,需要输入,查找初始化密码,按提示进入对应的目录D:\Program Files\Jenkins\secrets,打开initialAdminPassword复制其中密码到输入栏(Linux系统下初始化密码在/root/.jenkins/secrets/initialAdminPassword)

5.6.5 安装Jenkins的allure插件
以admin帐号登录Jenkins,首页左边Manage Jenkins菜单下,进入Manage Plugins子菜单,在插件管理页面中选择”可选插件”,搜索allure, 会搜索到Allure Jenkins Plugin,勾选后点击页面下方的Install without restart或Download now and install after restart即可安装.
5.6.6 jenkins全局配置
由于jeknkins运行需要jdk环境,所以全局配置要引入环境变量

宿主执行机执行需要依赖本地allure启动组件,全局配置需引入allure环境变量 

注:关于Jenkins中项目的配置请查阅文档 
安装后在项目配置中”构建”步骤执行pytest命令时生成测试结果并指定存放目录 

然后可在项目的配置菜单中看到构建后操作下有Allure Report项如下图,其中的Results: Path中填写测试结果生成的目录result(即上步构建指定的结果目录), 在Report path:中指定测试报告存放的目录: 

 

二、    pytest+selenium框架
1.    框架的目录结构 

 

说明:common目录存放公共的方法,如driver,读取文件的方法等,目录中需要__init__.py文件;
config目录存放日志等的配置文件,目录中需要__init__.py文件;
driver目录存放浏览器驱动程序,目前使用谷歌驱动器chromedriver.exe; 
log目录即存放日志文件;
PageObject目录存放页面类、方法、元素等,目录中需要__init__.py文件;
report目录存放allure产生的测试报告;
result目录存放allure生成的测试结果文件;
testcase目录用于存放测试用例和conftest.py(pytest胶水文件,如果需要),目录中需要__init__.py文件,如在windows命令行运行用例,可cd到此目录下后执行pytest命令;
其它文件__init__.py为空文件,python包的必要文件,没有此文件则不能在py文件中导入;
README.md为项目的相关文字说明;
requirements.txt文件中列明了依赖包的信息,为了方便项目安装依赖,可以直接在命令行下执行:pip install -r requirements.txt ,即可安装好所需要的包及其需要的版本。

2. 框架的组成
简单理解POM模型:
由于下面要讲元素相关的,所以首先理解一下POM模型
Page Object模式具有以下几个优点。
a.抽象出对象可以最大程度地降低开发人员修改页面代码对测试的影响, 所以, 你仅需要对页面对象进行调整, 而对测试没有影响;
b.可以在多个测试用例中复用一部分测试代码;
c.测试代码变得更易读、 灵活、 可维护
Page Object模式图

 

•    basepage ——selenium的基类,对selenium的方法进行封装
•    pageelements——页面元素,把页面元素单独提取出来,放入一个文件中
•    searchpage ——页面对象类,把selenium方法和页面元素进行整合
•    testcase ——使用pytest对整合的searchpage进行测试用例编写
通过上图我们可以看出,通过POM模型思想,我们把:
•    selenium方法
•    页面元素
•    页面对象
•    测试用例
以上四种代码主体进行了拆分,虽然在用例很少的情况下做会增加代码,但是当用例多的时候意义很大,代码量会在用例增加的时候显著减少。我们维护代码变得更加直观明显,代码可读性也变得比工厂模式强很多,代码复用率也极大的得到了提高。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【冒泡排序】

前言 在计算机科学中&#xff0c;排序算法是一种常见且重要的算法。排序算法的目标是将一组无序的数据按照一定的规则进行重新排列&#xff0c;以便更方便地进行搜索、查找或其他操作。 冒泡排序&#xff08;Bubble Sort&#xff09;是最简单的排序算法之一&#xff0c;它的原…

思维导图对我生活以及工作的帮助(用户投稿)

作为一名白领&#xff0c;我每天都面临着各种各样的工作和生活压力。 为了更好地应对这些挑战&#xff0c;我开始尝试使用思维导图来帮助自己更好地组织和管理各种信息和任务。其中一款非常优秀的软件就是ProcessOn思维导图&#xff0c;它为我的工作和生活带来了很多便利和帮助…

树与图的深度优先遍历

树的重心 本题的本质是树的dfs&#xff0c; 每次dfs可以确定以u为重心的最大连通块的节点数&#xff0c;并且更新一下ans。 也就是说&#xff0c;dfs并不直接返回答案&#xff0c;而是在每次更新中迭代一次答案。 这样的套路会经常用到&#xff0c;在 树的dfs 题目中 #includ…

5-2图像处理经典案例:正弦噪声图像去噪

学习目标&#xff1a; 图像处理经典案例 去除噪声 1.简述 图像降噪的英文名称是Image Denoising&#xff0c; 图像处理中的专业术语。是指减少数字图像中噪声的过程&#xff0c;有时候又称为图像去噪。图像的噪声来源相对复杂&#xff0c;搞清楚图像噪声的成因对我们进行…

Java——《面试题——分布式篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

大数据Doris(五十三):MySQL Dump 导出

文章目录 MySQL dump 导出 一、Dump导出案例 二、注意事项 MySQL Dump 导出 mysqldump是一个常用的 MySQL 数据库备份工具&#xff0c;它可以将 MySQL 数据库中的数据导出为 SQL 格式的文件&#xff0c;从而实现对数据的备份、迁移和恢复等操作。Doris 在0.15 之后的版本已…

Echarts折线图折线呈现为渐变线条

想要如图所示的折线图&#xff0c;折线线条为渐变颜色&#xff0c;两边颜色接近区域面积的颜色&#xff0c;中间颜色亮度高一些&#xff0c;在series中使用lineStyle&#xff0c;将其color设置为渐变色&#xff1a; option {xAxis: {type: category,data: [Mon, Tue, Wed, Th…

服务器技术(三)--Nginx

Nginx介绍 Nginx是什么、适用场景 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx专为性能优化而开发&#xff0c;性能是其最重要的考量&#xf…

PaddleOCR #使用PaddleOCR进行光学字符识别 - OCR模型对比

PaddleOCR 在其工具包中提供了多种模型&#xff0c;并且非常易于应用。根据准确性和速度比较模型始终是一个好习惯。在本节中&#xff0c;我们将比较 PaddleOCR 提供的四种模型&#xff0c;即 SRN、PP-OCRv2、PP-OCRv3 和 NRTR。比较将在 COCO-text 数据集上进行&#xff0c;该…

神经网络初谈

文章目录 简介神经网络的发展历程神经网络的初生神经网络的第一次折戟神经网络的新生&#xff0c;Hinton携BP算法登上历史舞台命途多舛&#xff0c;神经网络的第二次寒冬神经网络的重生&#xff0c;黄袍加身&#xff0c;一步封神神经网络的未来&#xff0c;众说纷纭其他时间点 …

vscode超炫酷的编码特效详解

1.在扩展中搜索 插件&#xff1a;Power Mode 2.在设置里搜索Code Actions On Save 3.点击在settings.json中编辑 {"powermode.enabled": true, //启动// "powermode.presets": "flames", // 火花效果 // 炸裂// "powermode.presets&quo…

uniapp项目或者vue项目 封装弹框组件

baseDialog组件代码: <template><view class"base-dialog" v-if"show"><view class"mask"></view><view class"Popmenu" :style"{ width }"><view class"header">{{ title …