当前位置: 首页 > news >正文

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试

在这里插入图片描述
这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述
Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求,JSON判断登录是否成功

Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告

Python自动化测试实战篇(3)优化unittest批量自动化接口测试代码,ddt驱动+yaml实现用例调用,输出HTMLTestRunner测试报告
Python自动化测试实战篇(4)selenium+unttest+ddt实现自动化用例测试,模拟用户登陆点击交互测试,Assert捕获断言多种断言
Python自动化测试实战篇(5)优化selenium+unittest+ddt,搞定100条测试用例只执行前50条

本篇主要是对之前的代码用PO分层的方式去优化梳理整个的自动化测试的流程
主要就是针对之前写过的文章进行用PO分层的思想去优化代码

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试

  • PO分层简介
  • 1.本篇运用的PO分层流程图
  • 2.未优化之前的代码
  • 3.用PO分层优化自动化代码
    • 1.po_public 存放公共包
    • 2.po_config 存放项目包的路径
    • 3.po_data 存放数据报告
    • 4.po_usecase 存放测试用例和unittest的测试组件
    • 5.po_lastrun 存放运行文件

PO分层简介

PO分层主要是为了帮助已经进入自动化的公司进行在测试用例上的维护,增强代码可读性,和减少用例维护的成本,将测试代码和业务代码进行一个分离开来。

也就是意味着你用selenium用来做自动化和接口自动化测试的代码实际上是分开,但是最终你还是可以一起调用,但是如果你换了需要换一个其他的功能进行测试时,你又要重新写一套新的测试用例,这样就非常浪费时间。

PO分层就是将这些分开,变成一个模块,就像是餐厅大厨炒菜那样

洗菜
选材
切菜
炒菜
熬汤
端盘上菜

假如我需要做红烧鱼那么我就调用后厨进行红烧鱼的制作,那么前面的选材-洗菜-切菜过程都是一样,我只要去考虑怎么烧鱼好吃和烧鱼多久的问题,以及那个加强和优化那个环境更好留住顾客和增加翻台率

同样的如果我换了一道菜变成鲫鱼汤,那么也很简单只要在最后变成熬汤的方法就可以,前面的那些功能也是一样。

实现功能复用,减少重复创建的流程,这就是PO思想,如果不用的话那么我需要在后厨重新搞一遍,那样又是浪费很多时间。

1.本篇运用的PO分层流程图

那么结合到自动中如何走?
大致如下图所示:
在这里插入图片描述

2.未优化之前的代码

可以看到未优化前的代码虽然能够让人一眼就能看清晰知道需要做些什么,但是对于复用性较差,如果更换了功能再去调用的话结果就非常复杂

import timeimport yaml #导入yaml模块获取yaml文件值
import os #导入路径拼接
import unittest,requests
from ddt import ddt,data,unpack #导入数据驱动from HTMLTestRunner3_New import HTMLTestRunnerf=open(os.path.join('D:\pythonpj\pytest\lojump.yaml'),mode='r',encoding='utf-8')
ts_et=yaml.safe_load(f)
url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
@ddt
class lg(unittest.TestCase):@data(*ts_et)@unpackdef test_logjump(self,**dict):#定义一个测试用例reps=requests.post(url=url,headers=headers,data={'userAccount':dict['userAccount'],'loginPwd': dict['loginPwd']})print(reps.text)
def logjum():t_ime = time.strftime('%Y-%m-%H-%M-%S')a1_path = os.path.abspath(os.path.dirname(__file__))report_path = os.path.join(a1_path, t_ime+'测试报告.html')discre = unittest.defaultTestLoader.discover(start_dir=a1_path,pattern='g2.py')p = open(report_path,'wb')run = HTMLTestRunner(stream=p,title='CMS总计报告',description='执行情况',tester='you')run.run(discre)
if __name__ == '__main__':logjum()unittest.main()

我可以用PO分层将这里面的内容分开存放

在这里插入图片描述

3.用PO分层优化自动化代码

在Pycharm中新建6个包用于存放相应的功能
在这里插入图片描述
在这里插入图片描述

1.po_public 存放公共包

在这里插入图片描述
定义两个方法用户后续调用时使用
新建 use_configini.py

import configparser
class use_ini:def __init__(self,file):#定义一个构造方法self.file1 = configparser.ConfigParser()#创建对象self.file1.read(file)def read_ini(self,a,b):value = self.file1.get(a,b)#获取变量节点和变量名称return value#获取文件中变量节点的值

新建 use_yaml.py

from po_config.deposit import *
import yaml
class use_yml:@staticmethoddef re_yml(filename):yml = open(os.path.join(yaml_path,filename),encoding='utf-8')data = yaml.safe_load(yml)return data
if __name__ == '__main__':print(use_yml.re_yml('lojump.yaml'))

新建 logjump.py

#用于存放通用的登录元素
class logjump:useraccount =('userAccount','')password = ('loginPwd','')

2.po_config 存放项目包的路径

在这里将这些路径类的放在po_config这个包里面
在这里插入图片描述
新建一个config.ini文件用于存放路径
在这里插入图片描述
新建一个deposit.py文件

import time
import yaml #导入yaml模块获取yaml文件值
from po_public.util.use_configini import  *
import os #导入路径拼接
import unittest,requests
# from ddt import ddt,data,unpack #导入数据驱动
#获取ini的绝对路径
po_cofing_path=os.path.abspath(os.path.dirname(__file__))
get_path=use_ini(os.path.join(po_cofing_path,'config')).read_ini('conf','de_path')
print(get_path)
#封装一个yaml路径
yaml_path = os.path.join(get_path,'po_usecase')
#封装测试报告路径
time_t = time.strftime('%Y-%m-%d-%H-%M-%S')
testlog = os.path.join(get_path,'po_data',time_t+'测试报告.html')
print(testlog)

新建一个logurl.py文件

url = 'http://192.168.52.129:8080/cms/manage/loginJump.do'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}

3.po_data 存放数据报告

在这里插入图片描述

4.po_usecase 存放测试用例和unittest的测试组件

这里直接将yaml用例放进去即可
在这里插入图片描述
新建logjump_ts.py 存放调用登录用例测试

import unittest,requests
from ddt import ddt,data,unpack #导入数据驱动
from po_config import logurl
from po_public.util import use_yamlts_et=use_yaml.re_yml#调用yaml
url = logurl.url #调用 url
headers = logurl.headers #调用存放的headers@ddt
class lg(unittest.TestCase):@data(*ts_et)@unpackdef test_logjump(self,**dict):#定义一个测试用例reps=requests.post(url=url,headers=headers,data={'userAccount':dict['userAccount'],'loginPwd': dict['loginPwd']})print(reps.text)
if __name__ == '__main__':unittest.main()

5.po_lastrun 存放运行文件

新建一个log_run.py文件
可以看到用PO分层思想优化过后的代码很明显减少了很多,很多重复性的东西就可以直接复用

import unittest
from po_config.deposit import *
from po_lastrun.HTMLTestRunner3_New import HTMLTestRunner
def logjump():unitRun =unittest.defaultTestLoader.discover(start_dir=get_path,pattern='logjummp.py')f=open(testlog,'wb')#导入存放测试报告的地址run=HTMLTestRunner(stream=f,title='登录报告',description='结果如下',tester='yourname')run.run(unitRun)#执行对应文件中的测试报告
if __name__ == '__main__':logjump()#函数调用函数执行结果

使用PO分层之后,每个模块都可以随时修改,而不用一个功能出现就重新创建一次,影响工作效率
在这里插入图片描述

在这里插入图片描述

相关文章:

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试

这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求&…...

Linux 进程:父子进程

目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序,如果一个程序较为庞大,我们可以给这个程序创建多个进程,每个进程负责一部分代码的运行。 A进程如果创建了B进程&am…...

Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具

Unity 之 实现读取代码写进Word文档功能前言一,实现步骤1.1 逻辑梳理1.2 用到工具二,实现读写文件2.1 读取目录相关2.2 读写文件三,编辑器拓展3.1 编辑器拓展介绍3.2 实现界面可视化四,源码分享4.1 工具目录4.2 完整代码前言 之所…...

Typora图床配置:Typora + PicGo + 阿里云OSS

文章目录一、前景提要二、相关链接三、搭建步骤1. 购买阿里云对象存储OSS2. 对象存储OSS:创建Bucket3. 阿里云:添加OSS访问用户及权限4. 安装Typora5. 配置PicGo方法一:使用PicGo-Core (Command line)方法二:使用PicGo(app)6. 最后…...

二进制搭建以太坊2.0节点-2023最新详细版文档

文章目录 一、配置 JWT 认证二、部署执行节点geth2.1 下载geth二进制文件2.2 geth节点启动三、部署共识节点Prysm3.1 下载Prysm脚本3.2 Prysm容器生成四、检查节点是否同步完成4.1 检查geth执行节点4.2 检查prysm共识节点4.3 geth常用命令五、节点同步详细说明5.1 启动时日志5.…...

如何简化跨网络安全域的文件发送流程,大幅降低IT人员工作量?

为什么要做安全域的隔离? 随着企业数字化转型的逐步深入,企业投入了大量资源进行信息系统建设,信息化程度日益提升。在这一过程中,企业也越来越重视核心数据资产的保护,数据资产的安全防护成为企业面临的重大挑战。 …...

带你深入了解c语言指针后续

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨在该…...

借助Intune无感知开启Bitlocker

希望使用 Intune 部署 BitLocker,但不知道从哪里开始?这是人们最开始使用 Intune 时最常见的问题之一。在本博客中,你将了解有关使用 Intune 管理 BitLocker 的所有信息,包括建议的设置、BitLocker CSP 在客户端上的工作方式&…...

零基础该如何转行Python工程师?学习路线是什么?

最近1年的主要学习时间,都投资到了 python 数据分析和数据挖掘上面来了,虽然经验并不是十分丰富,但希望也能把自己的经验分享下,最近也好多朋友给我留言,和我聊天,问我python该如何学习,才能少走…...

Go项目(商品微服务-1)

文章目录简介建表protohandler商品小结简介 商品微服务主要在于表的设计,建哪些表?表之间的关系是怎样的? 主要代码就是 CURD表和字段的设计是一个比较有挑战性的工作,比较难说清楚,也需要经验的积累,这里…...

机器学习——集成学习

引言 集成学习:让机器学习效果更好,单个不行,群殴走起。 分类 1. Bagging:训练多个分类器取平均(m代表树的个数)。 2.Boosting(提升算法):从弱学习器开始加,通过加权来进行训练。…...

VS编译系统 实用调试技巧

目录什么是bug?调试是什么?有多重要?debug和release的介绍windows环境调试介绍、一些调试实例如何写出(易于调试)的代码编程常见的错误什么是bug?其实bug在英文翻译中有表示臭虫的含义,因为第一次被发现的导致计算机…...

【华为OD机试模拟题】用 C++ 实现 - GPU 调度(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明GPU 调度题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。...

腾讯前端必会react面试题合集

React-Router的路由有几种模式? React-Router 支持使用 hash(对应 HashRouter)和 browser(对应 BrowserRouter) 两种路由规则, react-router-dom 提供了 BrowserRouter 和 HashRouter 两个组件来实现应用的…...

Linux搭建SVN服务器,并内网穿透实现公网远程访问

文章目录1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6.2 配置…...

C++STL之list的模拟实现

目录 一.list准备 二. iterator迭代器 1._list_iterator 2.begin()、end() 3.const_begin()、const_end() 4.!&& 5. && -- 6.operator* 7.operator-> 三.Modify(修改) 1.insert() 2.erase() 3.push_back() && push_front() 4.pop_bac…...

为什么硬件性能监控很重要

当今的混合网络环境平衡了分布式网络和现代技术的实施。但它们并不缺少一个核心组件:服务器。保持网络正常运行时间归结为监控和管理导致网络停机的因素。极有可能导致性能异常的此类因素之一是硬件。使用硬件监控器监控网络硬件已成为一项关键需求。 硬件监视器是…...

HTTP缓存

HTTP缓存HTTP缓存引发的一个问题HTTP缓存的作用HTTP缓存的分类强制缓存协商缓存(解决强缓存下资源不更新问题)缓存策略HTTP缓存引发的一个问题 有一次在开发移动端H5项目,UI提了几个UI问题,经过样式调试,android上没有…...

SPI设备树处理过程

SPI设备树处理过程 文章目录SPI设备树处理过程参考资料:一、 spi_device结构体二、 SPI设备树格式2.1 SPI Master2.2 SPI Device2.3 设备树示例三、设备树实例3.1 使用GPIO模拟的SPI控制器3.2 IMX6ULL SPI控制器四、 设备树处理过程致谢参考资料: 内核头…...

数据有哪些重要的作用?

我们正处在科技高速发展的时代,如今互联网已经与我们的生活息息相关,我们每天在互联网产生大量的数据,这些数据散落在网络中看似没有怎么作用,但是这些数据经过系统的处理整合起来确实非常有价值的。 一、 发展大数据技术可以提高…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...