让自动化测试秒杀繁琐操作?试试PO模式设计框架

news2024/11/15 11:03:09

目录:导读

引言

po模式

优势:

 目录解释:

页面对象设计模式:

base基础层:

page对象层:

 test:测试层

data数据层:

 common层:

 untils:

 config层:

run层:

report:

结语


引言

你是否曾经因为每次更新功能都要重新写一堆自动化测试代码而感到疲惫不堪?

或者因为页面元素的频繁变动而不得不持续地修复测试脚本?

如果你也有这些苦恼,那么PO模式设计框架可能是解决之道。它可以让你以更简单、更高效的方式编写自动化测试代码,减少反复劳动和错误率。

在本文中,我们将介绍如何采用PO模式设计框架来秒杀繁琐的自动化测试操作,让你轻松应对变化万千的测试环境。

po模式

在UI级的自动化测试中,对象设计模式表示测试正在交互的web应用,程序用户界面中的一个区域,这个是减少了代码的重复,也就是说,如果用户界面发生了改变,只需要在一个地方修改程序就可以了。

优势:

1、创建可以跨越多个测试用例共享的代码

2、减少重复代码的数量

3、如果用户界面发生变更后,只需要在一个地方维护就可以了。

创建ui,在ui的工程中创建对应的包和目录。utils   最后一个包的名称

 目录解释:

各个目录详解:

(1)base:基础层,主要编写底层定位元素的类,它是一个包。

(2)common:公共类,里面编写公共使用到的方法。

(3)config:配置文件存储目录。

(4)data:存储测试使用到测试数据。

(5)page:对象层,编写具体的业务逻辑,把页面每一个操作行为单独的写一个方法或者是函数。

(6)report:测试报告目录,主要用来存放测试报告。

(7)test:测试层,里面主要是测试模块,也可以说是每个测试的场景的代码。

(8)utils:工具类,存放工具,如文件处理、说明文档等。

(9)run:运行层:整个自动化测试的运行目录。

页面对象设计模式:

base基础层:

在该层中主要编写了基础代码。在该层主要定义了类WebUI,在这个类中编写了单个元素和多个元素定位的方法。

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:张红

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import NoSuchElementException
import time as t

class WebUI(object):
    def __init__(self,driver):
        #webdriver实例化后的对象
        self.driver=driver

    def findElement(self,*args):
        '''
        单个元素定位的方式
        :param args:
        :return: 它是一个元组,需要带上具体什么方式定位元素属性以及元素属性的值
        '''
        try:
            return self.driver.find_element(*args)
        except NoSuchElementException as e:
            return e.args[0]

    def findsElement(self,*args,index):
        '''
        多个元素定位的方式
        :param args:
        :param index: 被定位的目标索引值
        :return: 它是一个元组,需要带上具体什么方式定位元素属性以及元素属性的值
        '''
        try:
            return self.driver.find_elements(*args)[index]
        except NoSuchElementException as e:
            return e.args[0]

page对象层:

在这一层的类直接继承了基础层的类,以类属性的方法指明每个操作元素属性的值,然后依据操作步骤编写对应的方法,(比如关于登录的操作:输入用户名、输入密码,点击登录,获取文本的信息操作会在实例中实现的登录操作,然后把每个登录操作封装成一个方法,这样实现登录测试用例直接调用,返回失败信息---其中形式参数会在测试层赋值)

注意:获取文件信息的方法,要有return返回值否则在测试层断言时获取不到文本信息,数据属性和方法名字不要一样

 test:测试层

在这里首先需要导入对象层中的类和unittest单元测试框架,在测试类中,继承了unittest.TestCase和对象层中的类,TestCase是由于在编写自动化测试的用例中,用到的测试固件、测试断言和测试执行都是需要它中的方法,而对象层中的类包含对象层中的测试操作步骤的方法,继承后可以直接进行调用。

注意事项:

1、在编写用例的时候需要添加备注信息,明确表示该用例是测试的哪个点,验证的哪个场景.

2、测试模块都是以test_开头,测试方法也是以test_开头的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

#! /usr/bin/env python

# -*- coding:utf-8 -*-

# author:张红

from page.sina import *

import  unittest

from selenium import  webdriver

import time as t

from page.init import *

class SinaTest(Init,Sina):

    def test_username_null(self):

        self.login(username='',password='12345')

        t.sleep(3)

        # 验证邮箱名为空

        self.assertEqual(self.getUserError(),'请输入邮箱名')

        t.sleep(3)

    def test_username_supportChinese(self):

        self.login(username='中国',password='12345')

        t.sleep(3)

        # 验证邮箱名不支持中文

        self.assertEqual(self.getUserError(),'邮箱名不支持中文')

        t.sleep(3)

    def test_username_formatError(self):

        self.login(username='123',password='12345')

        t.sleep(3)

        # 验证邮箱名格式不正确

        self.assertEqual(self.getUserError(),'您输入的邮箱名格式不正确')

    def test_password_null(self):

        self.login(username='15102903662@sina.com',password='')

        t.sleep(3)

        # 验证密码为空

        self.assertEqual(self.getPassError(),'请输入密码')

        t.sleep(3)

    def test_login_error(self):

        self.login(username='15102903662@sina.com',password='724225')

        t.sleep(3)

        # 验证用户名错误

        self.assertEqual(self.getUserError(),'登录名或密码错误')

        t.sleep(3)

data数据层:

春初测试使用到的测试数据(主要是把数据写入json文件,yaml文件)

在data下创建json文件

 common层:

common:公共层,里面编写公共使用到的文件(处理路径---重点处理的是json文件或者yaml文件)一般时定义基础路径的

1、在这个层创建public.py  文件

导入os库,定义基础路径(也就是把基础路径处理为将要读取文件所在文件夹的路径,这样方便使用的时候做路径拼接)

 untils:

工具层:基本上是对data里面的(json yaml文件的读取)

在untils下创建模块:operationJson.py,设置方法readJson()来读取数据

在这个模块我们需要导入os来进行路径拼接,Json反序列化用来读取文件,还有就是导入公共层下的基础路径

 config层:

配置文件存储目录

run层:

运行层,主要是运行测试用例的目录,我们可以根据测试模块来运行,也可以运行所有的模块,该层的内容也适用于所有场景(适用的前提是po设计模式的目录结构如上所示)

测试报告:

 1 import time
 2 # 时间
 3 import unittest
 4 # 加载测试模块
 5 import os
 6 # 处理路径
 7 import HTMLTestRunner
 8 # 生成测试报告必须要用的库
 9 def getSuite():
10     # start_dir=加载所有的测试模块来执行,pattern=通过正则的模式加载所有的模块
11     '''获取所有执行的测试模块'''
12     suite = unittest.TestLoader().discover(
13         start_dir=os.path.dirname(__file__),
14         pattern='test_*.py'
15     )
16     return suite
17 
18 # 获取当前时间
19 def getNowtime():
20     return time.strftime("%y-%m-%d %H_%M_%S",time.localtime(time.time()))
21 
22 # 执行获取的测试模块,并获取测试报告
23 def main():
24     filename=os.path.join(os.path.dirname(__file__),'report',getNowtime()+"report.html")
25     # 把测试报告写入文件中,b是以二进制的方式写入
26     fp=open(filename,"wb")
27     # HTMLTestRunner实例化的过程,stream是流式写入,title是测试报告的标题,description是对测试报告的描述
28     runner=HTMLTestRunner.HTMLTestRunner(
29         stream=fp,
30         title="UI自动化测试报告",
31         description="UI自动化测试报告"
32     )
33     runner.run(getSuite())
34 if __name__=="__main__":
35     main()

report:

主要用于存放测试报告

结语

这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。

 PO模式教程获取方式:留言【po模式学习】即可

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

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

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

相关文章

救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫等个人漂浮设备 (PFD)UL报告标准要求

个人漂浮设备 (PFD) 个人漂浮设备 (PFD) 是帮助人们在水中保持漂浮状态的装备。个人漂浮设备是一个范围较大的商品分类,其中包括救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫 救生衣 救生衣是一种在使用者正确穿戴时可为其提供支持的服装或设备,由…

Redis【性能 01】Redis 5.x 6.x 7.x 共5个不同版本延迟及性能测试对比分析(单机版默认配置)

延迟及性能测试比对分析过程 1.环境说明2.测试结果Version 5.0.3【待优化版本】Version 5.0.7【云服务器使用的版本】Version 5.0.14【5.x最终版】Version 6.2.12【6.x最终版】Version 7.2-rc1【当前最新的发布候选版】 3.汇总分析3.1 延迟测试结果汇总3.1 性能测试结果汇总 4.…

今天 国际青年节 “International Youth Day “

《劝学》孟郊 击石乃有火,不击元无烟。 人学始知道,不学非自然。 万事须己运,他得非我贤。 青春须早为,岂能长少年。 Strike stones to make it burn; No smoke unless you strike. Youre crude if you dont learn; And you…

Syncthing文件同步 - 免费搭建开源的文件自动同步服务器并公网远程访问【私人云盘】

文章目录 1. 前言2. Syncthing网站搭建2.1 Syncthing下载和安装2.2 Syncthing网页测试2.3 注册安装cpolar内网穿透 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 在数据爆炸的当下,每天都会产生海量的数据,这些…

SQL注入攻防入门详解

毕业开始从事winform到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。 (对于…

ACIS的拓扑基础数据结构

在ACIS中,拓扑基础数据结构按照从低维到高维的顺序包括: Vertex(顶点):表示空间中的一个点,用于定义点的位置和属性。Edge(边):由两个顶点连接而成,具有方向属性,用于定义直线段和圆弧。Coedge(共面边):表示面的边缘,也就是一条边可以被多个面共享。Coedge有两个…

SpringCloud学习(七)——统一网关Gateway

文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在,我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…

淘宝天猫公布618整体活动节奏

5月4日消息,淘宝直播618选品会近日在杭州成功举办,淘宝直播商品中心团队和天猫、全球购行业小二在会上与商家、达人主播等参会人士探讨如何选品才能打动消费者、如何保障货品的质量安全、如何完善商品的售后服务等问题,共同分析直播电商行业中…

verilog驱动LCD显示彩条、字符

verilog驱动LCD显示彩条、字符 一、简介 LCD(liquid crystal display):液晶显示器 TFT:薄膜晶体管 LCD屏幕接口:常见的LCD屏幕接口有:RGB、MCU、LVDS、MIPI等 RGB LCD接口原理图:其中MISO、MOSI是IIC接…

Acjudge #P1004. 整除三元组

蒟蒻来讲题,还望大家喜。若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下Acjudge #P1004. 整除三元组! 原题 题目背景 潍坊高新OI社区打算开讲“数论”了,大家赶紧来学习一下“整除”吧。 题目描述 …

第一章 数字图像本质及基础操作

系列文章目录 第一章 图像本质及基础操作 文章目录 系列文章目录前言一、数字图像的本质二、图像基础理论1.色彩空间1.1 RGB模型1.2 HSV模型1.3 HSL模型1.4 YUV模型1.5 灰度图1.6 OpenCV中色彩空间转换 2.图片的存储3.图像参数 三、图像的基础操作及OpenCV画图1.图像的基础操作…

Hololens2开发指南

练习 - 导入和配置资源 - Training | Microsoft Learn unity需要高版本 用2019.4.30支持平台这没有openxr 用2020.3.36可以,2021版本也可以出现

代码随想录算法训练营第三十天 | 航班问题、二维回溯

回溯法小结 本周小结!(回溯算法系列三) | 代码随想录 (programmercarl.com) 性能分析 子集问题分析: 时间复杂度:O(n 2n),因为每一个元素的状态无外乎取与不取,所以时间复杂度为O(2n)&…

蚁群算法-车辆配载率的路径优化

车辆配送路径优化问题可描述为:某商超配送中心要使用一定数量的车辆对一批货物进行配送服务,要求在不超过车辆的额定载重量和额定容积的条件下,安排这些货物的装载,使得车辆利用率最高。 针对以上问题做出假设: (1) 只…

Python学习笔记(1)

《Python编程:从入门到实践》学习笔记 python编程软件PyCharm Community Edition 2022.3.2,快捷键:Ctrl/ 表示注释Python代码。 一、变量的命名和使用 1.变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数…

Java开发初学者实用网站

1.慕课网(http://www.imooc.com):提供了大量的Java在线教程和视频。 优点 1.广泛的开放性:大规模、开放性和受众广 2.透明性:根据不同兴趣、准备情况和时间来学习所需课程 3.优质资源易获取性:让每位学生…

Python每日一练(20230504)

目录 1. 课程表 Course Schedule I 2. 课程表 Course Schedule II 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 课程表 Course Schedule I 你这个学期必须选修 numCourses 门课程&a…

linux ll命令是什么

ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名。 # 查看指定目录下的内容,默认查看当前目录下内容 ls [-ald] [目录名] # 目录名不填写,默认为当前目录。 # -a:列出的全部的文件,包括隐藏文件 # -l&#x…

医院PACS系统源码,各种类型图像专业的图像处理功能,海量数据存储与检索

RIS/PACS系统源码 RIS/PACS系统源码在预约登记、分诊叫号、技师检查、诊断报告、临床浏览、科室管理等环节满足全院相关科室的要求。在医学影像下载、浏览、处理中满足速度快、强化常用功能、方便阅片等要求。满足放射、超声、内镜、病理等影像科室的业务需求。通过与HIS、LIS…

阿里云AMD服务器CPU:AMD EPYC Genoa 9T34处理器性能

阿里云AMD服务器AMD EPYC Genoa 9T34处理器,主频3.4 GHz,单核睿频最高3.75 GHz,计算性能稳定,阿里云百科分享AMD EPYC™ Genoa 9T34性能测评: 目录 AMD EPYC™ Genoa 9T34 AMD EPYC™ Genoa 9T34 阿里云AMD服务器性…