Selenium + Python 自动化测试15(模块化测试)

news2024/9/20 16:40:08

        我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了使用SMTP 对象的sendmail 发送HTML报告的方法。

         本篇文章我们接着讲测试代码的一些优化,提高我们测试代码的易读性,维护方便性。大家也都多多少少有些了解,很多自动化测试方案无法在实际工作中落地,有一个重要的原因就是维护成功太高。导致维护测试脚本的时间比手动执行的时间还要长,不断优化代码。我们可以使用模块测试的思想,避免同一模块重复编写来提高效率。

1、自动化测试模型

         自动化测试模型一般包括:线性测试、模块化驱动测试、数据驱动、关键字驱动、行为驱动、page object 设计模式等

我们今天讨论一下相对简单的模块化测试。

首先看一下我们之间编写的测试代码:

我们编写了2个文件,每个文件的内容类似:

import time

import unittest

from selenium import webdriver



def driverfunc():

    return webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")



#使用unittest的框架,每个案例的标准形式

class LoginTest(unittest.TestCase):

    def setUp(self):

        self.driver = driverfunc()

        print("登录测试开始")



    #输入正确的密码登录成功测试

    def test_login_Y(self):

        driver = self.driver

        username = "standard_user"

        password = "secret_sauce"

        print("登录的用户名是:%s,密码是:%s"%(username,password))

        #打开浏览器,并最大化

        driver.get("https://www.saucedemo.com/")

        driver.maximize_window()

        time.sleep(3)



        #输入用户名,

        driver.find_element_by_name("user-name").send_keys(username)  # by name 定位

        #输入密码

        driver.find_element_by_name("password").send_keys(password)  # by name 定位

        #点击登录按钮

        driver.find_element_by_id("login-button").click()  # by ID 定位



        time.sleep(3)

        #加入断言  //*[@id="header_container"]/div[1]/div[2]/div

        # 验证有显示:Products

        UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text

        self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")



   



    def tearDown(self)#浏览器退出

        self.driver.quit()

        print("登录测试结束")

         可以查看上面的代码,每一条测试用例是独立的,一步一步执行测试。其实就是线性测试模型。这种模型的优势是每一个脚本都是独立的。任何一个测试用例可以拿出来单独的执行。但是,确定也是很明显,就是维护成本很高。若是登录的步骤有改,所有脚本都要改一遍。

         为了解决线性测试的缺点,可以考虑使用模块化测试。

2、模块化测试

         我们来实际做一下模块化测试。模块化的思路其实也是很简单的,类似于编程语言模块化的思想,就是把重复的操作独立成公共模块。在执行测试用例时就去调用。

    这样,我们就可以更改上面的测试用例。

编写login.py

# coding=utf-8

#****************登录模块*******************

import time

from selenium import webdriver

def driver_func():

    return webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")


def login(username,password):

        driver = driver_func()

        # 打开浏览器,并最大化

        driver.get("https://www.saucedemo.com/")

        driver.maximize_window()

        time.sleep(3)

        # 输入用户名,

        driver.find_element_by_name("user-name").send_keys(username# by name 定位

        # 输入密码

        driver.find_element_by_name("password").send_keys(password# by name 定位

        # 点击登录按钮

        driver.find_element_by_id("login-button").click()  # by ID 定位

        return driver

然后,重新编写登录测试用例:

#使用unittest的框架,每个案例的标准形式

class LoginTest(unittest.TestCase):

    def setUp(self):

        print("登录测试开始")


    #输入正确的密码登录成功测试

    def test_login_Y(self):

        username = "standard_user"

        password = "secret_sauce"

        print("登录的用户名是:%s,密码是:%s"%(username,password))

        driver=login.login(username,password)  #调用登录函数

        time.sleep(3)

        #加入断言  //*[@id="header_container"]/div[1]/div[2]/div

        # 验证有显示:Products

        UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text

        self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")

        self.driver=driver

    def tearDown(self)#浏览器退出

        self.driver.quit()

        print("登录测试结束")

今天就先学习到这里。

每天进步一点点,加油!

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

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

相关文章

ZooKeeper 集群的详细部署

ZooKeeper 集群部署 一、ZooKeeper 简介1.1 什么是 ZooKeeper1.2 ZooKeeper 特点 二 ZooKeeper 的架构和设计4.1 ZooKeeper 数据模型4.1.1 Znode 节点特性 三、ZooKeeper 的集群安装前准备工作3.1 需要的准备工作3.2 Linux 系统 3 个节点准备3.2.1 克隆3.2.2 配置另外两台服务器…

评论系统如何不崩溃?揭开海量评论背后的技术秘密

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米!今天我们来聊聊一个非常实际的场景:海量新闻评论的入库问题。假设你在某个新闻平台工作,某条热门新闻突然火爆,用户的评论量如潮水…

SpringBoot Web开发(请求,响应,分层解耦)

Author_T17🥥 目录 一.请求响应概述 1.Servlet 2.DispatcherServlet 3.请求响应工作概图 4.BS/CS架构 二.API测试工具 三.请求 1.简单参数 (1)原始方式(不推荐) ​编辑 (2)Spring Boo…

【剑指 offer】删除链表中重复的结点

目 录 描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5 思路: 通过快慢…

2024年阳光电源社招校招入职测评:前程无忧智鼎题库全解析

在职场竞争日益激烈的今天,企业对人才的选拔标准越来越高。阳光电源,作为行业的领军企业,采用了前程无忧智鼎题库进行社招校招入职测评,旨在通过科学的方法选拔出与企业文化和价值观高度契合的人才。 测评概览 测评名称&#xff1…

大模型RAG企业级项目实战:Chatdoc智能助手文档(从零开始,适合新手)

大模型RAG企业级项目实战:Chatdoc智能助手文档(从零开始,适合新手) 大模型RAG企业级项目实战完整链接 LLM模型缺陷: ​ 知识是有局限性的(缺少垂直领域/非公开知识/数据安全) ​ 知识实时性(训练周期长、成本高) …

5计算机网络全面解析

网络功能和分类 计算机网络是计算机技术与通信技术相结合的产物,它实现了远程通信、远程信息处理和资源共享。 计算机网络的功能:数据通信、资源共享、管理集中化、实现分布式处理、负载均衡。 网络性能指标:速率、带宽(频带宽…

1.微服务发展阶段

单体应用阶段 简介 系统业务量很小的时候我们把所有的代码都放在一个项目中,然后将这个项目部署在一台服务器上,整个项目所有的服务都由这台服务器去提供 优点 1.展现层、控制层、持久层全都在一个应用里面,调用方便、快速,单个请…

Unity URP 曲面细分学习笔记

Unity URP 曲面细分学习笔记 1.曲面细分与镶嵌1.1 外壳着色器 Hull Shader1.2 镶嵌器阶段 Tessellator1.3 域着色器阶段 Domain Shader 2.具体实现2.1 不同的细分策略2.1.1 平面镶嵌 Flat Tessellation2.1.2 PN Tessellation(Per-Node Tessellation)2.1.…

NPM使用教程:从入门到精通

NPM使用教程:从入门到精通,掌握Node.js包管理神器 引言 随着Node.js的流行,JavaScript已经成为服务器端开发的主力军。NPM(Node Package Manager)作为Node.js的官方包管理工具,为开发者提供了一个庞大的代…

用R的界面来安装扩展包

下面内容摘录自《R 语言与数据科学的终极指南》专栏文章的部分内容,每篇文章都在 5000 字以上,质量平均分高达 94 分,看全文请点击下面链接: 2章4节:认识和安装R的扩展包,什么是模糊搜索安装,工…

Linux高级编程 8.12 标准IO

目录 一、标准io 二、文件 三、man手册 四、操作文件 1.fopen 2.fputc 3.fgetc 4.fgets 5.fputs 6.fread 7.fwrite 五、命令解读 1.显示目录下的文件信息命令 2.vimdiff小工具 3.stat命令 一、标准io IO: input output I: 键盘是标准输…

吃透张宇18讲+1000题,最后能考到110+吗?

张宇18讲太难了怎么办? 当然是换一本 不难的,张宇18讲的难度确实超过大多数同学能够接受的程度,张宇老师也说,默认大家基础已经很好,所以,如果你想很好的利用张宇18讲,必须要有一个一个很好的基…

ViT——探索自监督视觉Transformers在深度伪造检测中的应用

介绍 论文地址:https://arxiv.org/abs/2405.00355 在这篇评论文章中,我们研究了自监督、预训练Transformers与监督、预训练Transformers和传统神经网络(ConvNets)相比,在检测深度伪造方面的效果如何。 我们尤其关注…

开源的 P2P 跨平台传文件应用「GitHub 热点速览」

就在上周,发完那篇文章之后不久,我就有幸获得了 GitHub Models 服务公测的访问权限,所以就体验了一下 Playground 聊天功能。 起初,我以为这是“微软菩萨”降临,但玩了一圈下来,发现实际效果并没有那么惊艳…

❤️【接口测试面试】精选50接口测试面试题目,或许能帮到金九银十面试浪潮中的你❤️

基本理论知识 1、什么是(软件)接口测试? 接口测试:是测试系统组件间接口的一种测试方法 接口测试的重点:检查数据的交换,数据传递的正确性,以及接口间的逻辑依赖关系 接口测试的意义:在较早期开展,在软…

iPhone官方商店软件下载---免费看各种剧第⑤弹【iOS版包括iPad】

①点击iPhone自带软件App Store ②点击搜索,输入“周末趣味活动” ,点击下载到手机 ③进入软件页面后,我们需要激活页面,点击“feedback” ,输入“周六日”,点击“summit” ④等软件闪退后,再点…

智能化清理C盘的方法 小白也可以轻松清理C盘了 不再担心误删文件

智能化清理C盘的方法 小白用户也可以轻松清理C盘了 不再担心误删文件。对于电脑小白来说,C盘清理是一个大大的问题,因为大家都不知道C盘里有哪些文件可以删除,哪些不能删除,所以就直接的导致大家不可能去清理c盘垃圾。 就算是C盘…

一次sql请求,返回分页数据和总条数

日常搬砖,总少不了需要获取分页数据和总行数。 一直以来的实践是编码两次sql请求,分别拉分页数据和totalCount。 最近我在思考: 常规实践为什么不是 在一次sql请求中中执行多次sql查询或多次更新,显而易见的优势: ① 能…

opencv 控制鼠标键盘实现功能setMouseCallback

鼠标事件类型 OpenCV 支持多种鼠标事件类型,常见的包括: cv2.EVENT_LBUTTONDOWN:左键按下 cv2.EVENT_RBUTTONDOWN:右键按下 cv2.EVENT_MBUTTONDOWN:中键按下 cv2.EVENT_LBUTTONUP:左键释放 cv2.EVENT_RBUTT…