po框架的了解和应用

news2024/11/28 10:42:35

https://www.cnblogs.com/xiaolehong/p/18458470 笔记
任务:1、通过po框架输入测试报告 2、编写自动化测试框架 3、总结测试讲解稿

自动化测试框架概念:

自动化测试框架是一个集成体系,这个体系中包含测试功能的函数、测试数据源、测试对以及重要的模块。
作用:用于解决或处理复杂的问题。
对于测试人员来说:
线性脚本的自动化脚本在维护性和可用性上较差,所以利用设计框架来实现自动化测试

框架设计的目标:

设计出来的框架是直接给测试人员或其他测试人员简单向里面不断补充用例,所以我们的框架设计必须
三简化:操作简单、维护简单、拓展简单

设计框架的同时要结合业务流程,不仅靠技术实现,还要对业务流程的理解和把握(重点和难点)

设计框架时要将基础的封装成公用的如:断言,定位方法等

设计用例要与代码分开,便于用例管理,可以采用数据驱动框架实现。比如(ddt数据驱动)

po框架

(1)po(page object 缩写)
(2)业务流程与页面元素操作分离 ,可以简单理解为每个页面下都有一个配置class,配置类就是用来维护页面元素或操作方法
(3)提高测试用例的可维护性、可读性

‘’‘ini是一种配置文件在ui自动化测试中配置文件的种类ini、Excel、.py、yaml、txt’‘’
1、先创建一个discz项目
再创建一个cofing包,存放所有配置文件信息(比如项目路径和数据,用例的路径) 可以封装路径
再创建一个Data包放数据(测试数据), 在Data包中创建一个TestData目录(放测试数据),测试环境的一些url地址和账号密码可以放在TestData中
再创建一个repot包存放测试报告, 在repot包中创建一个Testreport目录(存放报告)
再创建一个public公共公开的包(存放一些功能用例)
在public包中创建pages存放元素层流程层(封装所有页面的公共方法,基类)
在public包中创建utils包(处理公共类公共函数都存放在此)
可以在utils中来读取pages中封装的登录的流程(封装读取ini文件或者EXCEL表格的工具类和工具函数
再创建一个TestCase用例包用来存放用例,编写测试用例
再创建一个run_all用来运行,通过运行测试用例中封装好的用例然后在repot中生成测试报告
框架的思想:把整个用例进行拆分

po模式

对比:

传统的设计测试用例存在的弊端:
1.易读性差
2.复用性差
3.可维护性差
4.扩展性差

自动化测试框架分层如下:

config配置包:存放项目配置文件、如框架中每个目录的绝对路径
data数据包:存放测试数据、一般以ini文件类型存放
public公共包:
①pages:存放项目中共有的函数和方法
②utils:主要是用于读取data目录下ini文件并获取内容,一些模版也可以放到这里
repot报告包:自动化测试报告
run运行包:存放运行的用例
testcase用例包:存放所有用例

pages:封装定位方法
utils:元素定位

用到的python模块:xlrd 1.2.0版本

流程:

案例1:
ui自动化测试,我是用po框架做的,对自动化用例进行分层:先创建一个项目名称xx;在项目下创建对应的包,一般我是分为6个包
(1)先创建第一个cofing包存放所有配置文件信息(比如项目路径和数据,用例的路径)
(2)在创建第二个Data包
放数据(测试数据)
(3)在创建第三个report包==存放测试报告
(4)在创建第四个包public公共公开包(存放一些功能用例);在这个包下面在创建两个子包:
pages包和utils包
a、在pages包中存放元素层流程层(封装所有页面的公共方法,基类)
b、在utils包(处理公共类公共函数都存放在此)
可以在utils中来读取pages中封装的登录的流程(封装读取ini文件或者EXCEL表格的工具类和工具函数
(5)在创建一个TestCase用例包用来存放用例
(6)在创建一个run_all用来运行
通过运行测试用例中封装好的用例在运行然后在repot中生成测试报告
这就是我的框架;

案例2:我讲解下我的框架,po框架,可以分成6层:如下
第1层的话是config配置层,这个里面主要是封装了一些我们测试环境的url地址和一些连接数据库的IP地址,用户名密码等等
第2层是utils工具类层,这个里面主要封装了一些读取Excel表格的工具类,还有发邮件的工具类,还有一些读取配置文件的工具类
第3层是一个public基类,这个里面主要封装了元素定位的方法比如把id,name,class,xpath,css等等都封装在一个类方法里面了,还把一些send_keys和隐式等待和其他公共方法都进行了二次的封装
第4层就是testcase用例层了,这个里面主要就是通过定义一个类然后继承unittest.TestCase这个类,通过unittest单元测试框架来管理用例,在setupclass里面去创建driver对象,然后通过设置和取值的方法,拿到driver对象,先编写登录的用例,然后这个里面也用到了PO设计模式,把我们的元素定位和流程层,代码层进行了分离,最后用例写完再通过self.assertEquals进行一个断言
第5层就是run运行层,首先会通过把所有的用例加载到一个suite套件里面,然后再通过调用run方法运行这个套件
第6层就是通过HTMLtestrunner模块生成测试报告,然后最后通过Jenkins做可持续集成,在回归测试阶段,每天晚上都会运行一下我们的ui自动化用例,大致的一个框架结构就是这样的。

案例3:
写自动化用例的时候我喜欢对用例进行分层处理。我一般会设置六个模块:公共模块、用例模块、执行模块、报告模块、数据模块、页面元素模块。
把一些公共的,经常调用的属性放到公共模块中,比如登录登退出啊,连接断开数据库等。
页面元素模块就是将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),这样的话当页面元素变动的话我们只需要更改页面元素对象即可。
把用例的具体内容放到用例模块中,比如我要借款,通过设置一些类,再把我要借款相应的用例放到这下面,这样后续我进行维护就非常的直观方便。
执行模块就是对上面各个类的执行方法,要执行哪些类里的哪些用例和对应测试报告的生成。
报告模块就是存放生成测试报告的地方,这样我们就能一目了然的看到是哪些模块下的用例的执行情况。
数据模块的是就是存放一些数据的地方,比方说用户的账户密码,网址信息等。
就拿我要出借这个流程的举个例子讲解一下吧!首先导入相应的库 from selenium import webdriver ,import unittest。然后新建一个继承unittest.testcase类。然后在def setup里写一些前置条件:像是webdrvier.chrome()选择谷歌浏览器,用get方式获取网址打开,用maximize.window进行浏览器最大化处理,避免出现页面中元素定位后无?法点击报错的现象,确保用例执行的准确性,因为有时候用例执行太快,而网页加载太慢会?导致报错,所以我一般都会用implicity_wait进行智能等待,确保页面加载完成。把登入写进了公共模块中直接调用他。
接下来定位我要出借,因为他是一个下拉列表,所以我们得先导入from selenium.webdriver.support.ui import Select模块,用 Select(dr.find_element_by_xpath(“ ”).select_by_index(1),通过索引位进行定位。这个时候会打开一个新页面,所以我们得定位到这个新页面。
首先我们先获取所以页面的句柄allhead=dr.window_handles,再用dr.switch_to_window(allhead[-1])定位到我要出借这个新页面,通过find_element_by_xpath定位对应的标,然后定位到投资金额框,至于输入金额的话为了提高效率,我是之前已经写好了随机生成整百金额的函数,所以我这边直接调用就可以了,至于验证码我之前就已经请开发帮我去掉了,然后定位确认投资按钮点击。接下来系统会弹出一个风险提示
揭示书,它是一个alter弹框,alter=driver.switch_to_alter()进入到alter弹框里,再用alter.accept()。
这时候为了保证用例执行的准确性,再用unittest框架中的断言,之后用if语句和assertEquals判断前后两个值是否相符如:(出借成功,出借失败),不相符的话用dr.get_screenshot_as_file(“d:\yy\erorr1.png”),最后到执行和生成报告了,用unittest中的testloader方法。
定义一个变量接收测试用例的目录,discover=unittest.defaultTestLoader.discover(测试用例的目录,“text*.py”)加载该目录下所有以text开头。
的Py文件。
导入生成报告所需的HTMLTestRunnerCN模块,用with open打开对应的报告文件,“wb”二进制方式写入,用HTMLTestRunnerCN里的runner方法生成测试报告。最后用runnrt.run(discover)方法执行之前加 载的用例就好了。
这就是之前公司用python加selenium做自动化测试的一个基本流程。

操作:

1.新建一个项目,创建六个大包(里面放两个公共包):

在这里插入图片描述

2.conf包下面放ini文件和path文件

ini文件:
在这里插入图片描述

[test_data]
url =http://cms.duoceshi.cn/manage/login.do
username = admin
pwd = 123456

path包:

import  os
bash_path=os.path.dirname(os.path.dirname(__file__))
print(bash_path) #项目路径
conf_path=os.path.join(bash_path,"conf")
print(conf_path)
data_path=os.path.join(bash_path,"data")
print(data_path)
report_path=os.path.join(bash_path,"report")
print(report_path)
testcase_path=os.path.join(bash_path,"testcase")
print(testcase_path)
public_path=os.path.join(bash_path,"public")
print(public_path)
pages_path=os.path.join(bash_path,"public","pages")
print(pages_path)
utils_path=os.path.join(bash_path,"public","utils")
print(utils_path)

3.在data包放入测试用例表格

在这里插入图片描述

4.把HTMLTestRunnerNew.py和邮件模板放到util包。

修改邮件名

5.在util新建文件表格处理文件

read_excel:


```python
import xlrd
from conf.cms_path 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MIDIPLUS 50周年丨中国国际乐器展览会首日盛况

10月10日,由中国乐器协会、上海国展展览中心有限公司、法兰克福展览(上海)有限公司共同主办的中国(上海)国际乐器展览会在上海新国际博览中心(上海市浦东新区龙阳路2345号)盛大开幕。 2024上海…

ART 光学跟踪系统:通过 VR HMD 解锁完全沉浸式 VR 体验

在虚拟现实体验中,完全沉浸式虚拟现实体验应该既准确又舒适。当与现实世界的物体融合时,虚拟现实的表现必须与现实精确匹配。这意味着所使用的运动跟踪系统必须为整套项目提供可靠且可重复的高精度运动数据,以及体感无法察觉到的超低延迟。AR…

水深探测仪的作用和使用方法

在水域救援的行动里,救援人员时刻面临着复杂多变、充满未知的水域状况。当接到救援任务奔赴现场,那片需要涉足的水域就像一个神秘莫测的异世界,挑战着所有人的认知与勇气。 水深探测仪作为一种专用于测量水域深度的设备,通过声波和…

宝塔 进程守护管理器 神坑,再次跌入。thinkphp-queue队列 勤勤学长

如果,你有在使用【进程守护管理器】,记得在更新/重启,甚至卸载重新安装后,重启服务器。 事情的起因是,昨日服务器突然异常,网站无法正常访问,进入宝塔面板,发现 cpu和负载率均超过1…

甘肃小米,一口软糯,满是乡愁

🎈甘肃小米,自然的馈赠🎈🌾家人们,今天必须给大家安利来自甘肃的小米!💛✨甘肃,那片广袤而神奇的土地,孕育出的小米有着别样的魅力。颗粒饱满,色泽金黄&#…

RDD优化:缓存和checkpoint机制、数据共享(广播变量、累加器)、RDD的依赖关系、shuffle过程、并行度说明

文章目录 1. 缓存和checkpoint机制1.1 缓存使用1.2 checkpoint1.3 缓存和checkpoint的区别 2. 数据共享2.1 广播变量2.2 累加器 3. RDD依赖关系4.shuffle过程4.1 shuffle介绍4.2 spark计算要尽量避免shuffle 5. 并行度 1. 缓存和checkpoint机制 缓存和checkpoint也叫作rdd的持…

源代码加密有哪些技巧呢?除了用加密软件还有哪些方法?

导语:源代码加密是保护软件核心资产的主要方式了,可以通过多种技术措施确保源代码不被未授权访问、复制或篡改,防止泄密问题。这篇文章是一些有效的源代码加密技巧,欢迎您的阅读! 源代码加密常用技巧1、访问控制&…

俏生元将传统膳食智慧融入现代生活,自然成分绽放健康光彩

近年来,当代女性健康食品市场正经历快速发展和显著变化。随着女性健康意识的提升,市场对专门针对女性健康的产品需求快速上升。女性消费者对健康的关注不再局限于表面,而是越来越注重内在健康和生活质量的提升。此外,中式养生文化…

Python 基于 Bert 的中文情歌分析,多分类中文情感分析

前言 在自然语言处理(NLP)领域中,情感分析是一项非常常见的任务。它的目标是判断文本的情感倾向,例如在社交媒体上的评论、产品评价、电影评论等数据中,识别文本是正面的、负面的,还是中性的。与传统的二分…

中航资本:科技股有哪几种?科技股都包含哪些板块?

科技股主要有两种,一种是软科技,一种是硬科技。 1、硬科技:需要强健的数学、物理、计算机科学和工程技能才能够完毕,例如:光电芯片、‌人工智能、‌航空航天、‌生物技能、‌信息技能、计算机视觉、集成电路规划、软件…

2024双十一值得入手的好物品牌有哪些?精选五款双十一必入好物推荐

在双十一这个全民狂欢的购物节,各大品牌纷纷推出诱人的优惠活动,让人心动不已。今年,有哪些品牌的好物值得我们关注呢?下面,我将为大家精选五款双十一必入好物推荐,让你的购物车不再空虚。 双十一必入好物…

怎么把人声和背景音乐分离?实用方法:将人声从音乐中剥离

怎么把人声和背景音乐分离?在数字音频处理中,将人声与背景音乐进行分离是一个复杂但富有挑战性的任务。这种分离技术在音乐制作、影视编辑、版权管理以及个人娱乐等多个领域具有广泛的应用价值。 虽然完美地将人声和背景音乐分离开来可能仍然是一个技术难题&#…

⽂件操作详解

本章讲述的是有关文件的相关内容,本章我们会认识到什么是文件,二进制文件与文本文件,文件的打开和关闭,⽂件的顺序读写和随机读写以及⽂件读取结束的判定和⽂件缓冲区。 1.什么是⽂件 像这样在磁盘(硬盘)上…

骑行眼镜的选择攻略:评论与实用建议!

骑行眼镜评论分析 目录 骑行眼镜评论分析 1. 评论的基本统计分析(数据来源:淘宝评论信息接口) 评论长度的集中趋势: 评论长度的离散程度: 2.用户评价分析 词云高频词分析 1. 眼镜 (2***8 次出现): 2. 不错 (1***9 次出现)…

(29)数字信号处理中正弦波的表示

文章目录 前言一、奈奎斯特采样定理二、正弦波的时域表示三、数字信号处理中正弦波的表示方法 前言 本文首先介绍了奈奎斯特采样定理,然后以奈奎斯特采样定理为基础,给出MATLAB代码,说明在数字信号处理中如何表示一个正弦波。 一、奈奎斯特采…

Flutter技术学习

以下内容更适用于 不拘泥于教程学习,而是从简单项目入手的初学者。 在开始第一个项目之前,我们先要了解 两个概念。 Widget 和 属性 Widget 是用户界面的基本构建块,可以是任何 UI 元素。属性 是 widget 类中定义的变量,用于配…

Python脚本分类和代码举例

Python是一种强大且灵活的编程语言,被广泛应用于数据分析、Web开发、自动化、人工智能等领域。在不同的应用场景下,Python脚本可以被分类为多种类型。本文将深入分析Python脚本的分类,同时提供相关代码示例,帮助读者理解和应用这些…

Spring AI 介绍与入门使用 -- 一个Java版Langchain

Langchain 是什么? Langchain 是一个Python 的AI开发框架,它集成了模型输入输出、检索、链式调用、内存记忆(Memory)、Agents以及回调函数等功能模块。通过这些模块的协同工作,它能够支持复杂的对话场景和任务执行流程…

【大数据】数据采集工具sqoop介绍

文章目录 什么是sqoop?一、Sqoop的起源与发展二、Sqoop的主要功能三、Sqoop的工作原理四、Sqoop的使用场景五、Sqoop的优势六、Sqoop的安装与配置 sqoop命令行一、Sqoop简介与架构二、Sqoop特点三、Sqoop常用命令及参数四、使用示例五、注意事项 什么是sqoop? Sqoop是一款开…

BlackMarket_ 1靶机渗透

项目地址 plain https://download.vulnhub.com/blackmarket/BlackMarket.zip 实验过程 开启靶机虚拟机 ![](https://img-blog.csdnimg.cn/img_convert/169d964d61ea9660c1104e723f71449e.png) 使用nmap进行主机发现,获取靶机IP地址 plain nmap 192.168.47.1-254…