Selenium + Python 自动化测试21(PO+HTML+Mail)

news2024/11/28 2:43:11

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

上一篇我们讨论了PO模式并举例说明了基本的思路,今天我们继续学习。

         本篇文章我们综合一下之前学习的内容,如先将PO模式和我们生成HTML报告融合起来,综合的灵活的使用之前学习的内容。

         整体的思路:编写基础类(page类)>登录页面的类(login 类)>通过unittest框架写测试用例>编写执行函数文件(包含生成HTML报告)

1、先列一下之前的脚本:

如下图第一部分基础页面类:

如下图第二部分登录页面类:

第三部分,如下图所示登录方法和执行的内容

2、引入unittest重写测试用例

参考如下:

# coding=utf-8  --指定了文件内容使用的字符编码格式,告知Python解释器如何解读文件中的文本内容。

from login_object import  LoginPage

from selenium import  webdriver

import time

import unittest


def login(driver,username,password):   #组装登录函数,基本按操作流程

    login_page=LoginPage(driver)

    login_page.open()

    login_page.enter_username(username)

    login_page.enter_password(password)

    login_page.submit()


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

class LoginTest(unittest.TestCase):

    def setUp(self):

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

        print("登录测试开始")


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

    def test_login_Y(self):

        username = "standard_user"

        password = "secret_sauce"

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

        driver=self.driver

        login(driver,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")


    def tearDown(self)#浏览器退出

        self.driver.quit()

        print("登录测试结束")

3、添加执行函数

参考代码如下 ,生成HTML报告并且发邮件

# coding=utf-8

import  unittest

from HTMLTestRunner import HTMLTestRunner  #导入 HTMLTestRunner 类

import time

import smtplib

import os

from email.mime.text import MIMEText

from email.header import Header


#定义发送邮件的函数

def send_report_by_mail(file_name):

    f=open(file_name,'rb'#打开文件

    report_body=f.read()

    f.close()

    msg=MIMEText(report_body,'html','utf-8') #内容

    msg['Subject']= Header('Swag Labs 网站测试报','utf-8')

    smtp = smtplib.SMTP()

    smtp.connect('smtp.163.com') #发送邮箱服务器

    smtp.login('登录用户名@163.com','登录密码')

    smtp.sendmail('发送邮箱@163.com','接收邮箱@163.com',msg.as_string())

    smtp.quit()

    print("报告已通过邮件发送")



#定义测试用例集的目录

test_dir = './'

report_dir = './report'  #测试报告地址

discover = unittest.defaultTestLoader.discover(test_dir,pattern="test_*.py")#所有要执行的文件



if __name__ == '__main__':

    now = time.strftime("%Y-%m-%d %H_%M_%S")   #当前时间,格式是年月日时分秒

    file_name report_dir+ '/' + now + 'result.html'   #报告名称,加上当前时间避免重复

    fp = open(file_name,'wb')      #打开报告文件,读写权限



    runner = HTMLTestRunner(stream=fp,title="Swag Labs 网站测试报告",description="用例测试情况:")#HTML报告设置

    runner.run(discover)  #执行测试案例

    fp.close()   #关闭报告文件

    send_report_by_mail(file_name)   #发送报告

如上执行查看结果:

今天就先学习到这里吧。后面我们不断优化。

每天进步一点点,加油!

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

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

相关文章

gewe微信聊天机器人搭建教程

由于自身在机器人方面滚爬多年,现在收藏几个宝藏机器人 推荐一下自己常用的机器人: 适合有技术开发的公司,可以自主开发所需要的功能!十分齐全 测试问文档:开发前必读 - GeWe开放平台 有需要的兄弟可以看一下&…

笔记 6 : 彭老师课本第 5 章 ,举例分析 IIC 编程,以及开启虚拟机

(60) 首先看 IIC 的陀螺仪的底板图,board 图: 以 GYRO_INT 为例去查找其对应的控制器: 继续查找 I2C_SCL5 以及 I2C_SDA5 : MPU6050 以及比较复杂,需要查看其手册,全英文版: 再…

iOS开发进阶(二十二):Xcode* 离线安装 iOS Simulator

文章目录 一、前言二、模拟器安装 一、前言 Xcode 15 安装包的大小相比之前更小,因为除了 macOS 的 Components,其他都需要动态下载安装,否则提示 iOS 17 Simulator Not Installed。 如果不安装对应的运行模拟库,真机和模拟器无法…

深入理解Java虚拟机(线程安全)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 线程安全 当多个线程同时访问一个对象时,如果不用考虑…

图片清晰修复有什么方法?归纳了三种

图片清晰修复有什么方法?图片清晰度的修复是一项常见的后期处理任务,尤其当原始照片由于各种原因如手抖、光线不足等出现模糊不清的情况时。下文将介绍三种不同的软件修复方法来帮助提高图片的清晰度和细节,让你的照片看起来更加生动和专业。…

Kubectl命令、初识pod、namespace

文章目录 一、Kubectl简介基础命令1.基本信息命令2.创建和更新资源命令3.删除资源命令4. 查看日志和调试命令5. 端口转发和复制文件命令6. 部署管理命令7. 伸缩命令8. 配置和上下文管理命令9.常用命令 二、Pod简介核心概念pod常见状态调度和初始化阶段容器创建和运行阶段异常状…

【案例52】oracle进程占用CPU100%分析实战

问题现象 Linux环境,数据库CPU一直处于100%。业务系统运行很慢。Top命令结果如下: 问题分析 方法1 根据上图中的oracle进程在操作系统对应的 PID号 : 如 6999,8100 等 通过下面的SQL,查询 select s.SQL_HASH_VALUE, s.SQL_ADDRESSfrom v$session …

PCB线宽和线间距设计PCB抄板

尽量加宽电源、地线宽度,最好是地线比电源线宽,它们的关系是:地线>电源线>信号线,通常信号线宽:0.2~0.3mm,最细宽度可达到0.05~0.07mm,电源线宽为1.2~2.5mm 一般宽度不宜小于0.2mm(8mi…

鹭鹰优化算法SBOA优化RBF神经网络的扩散速度实现多数入多输出数据预测,可以更改数据集(MATLAB代码)

一、鹭鹰优化算法介绍 鹭鹰优化算法(Secretary Bird Optimization Algorithm, SBOA)是一种新型的元启发式算法,它于2024年4月由Youfa Fu等人提出,并发表在SCI人工智能二区顶刊《Artificial Intelligence Review》上。该算法的灵感…

【机器学习】神经网络简介以及如何用Tensorflow构建一个简单的神经网络

引言 神经网络是一种模拟人脑神经元连接和工作方式的计算模型,它是深度学习的基础,并在机器学习领域中扮演着重要角色 文章目录 引言一、神经网络简介1.1 结构组成1.2 工作原理1.3 学习过程1.4 应用领域1.5 感知器1.6 功能特点1.7 总结 二、用Tensorflow…

根据 Web 服务器端的架构相关知识,将PHP改JAVA重构企业网站系统

目录 案例 【题目】 【问题 1】(7 分) 【问题 2】(8 分) 【问题 3】(10 分) 答案 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于应用服务器的叙述,在答题纸上回答问题 1 至问题 3。 【题目】 某电子产品制造公司&#xff0c…

现有electron-quick-start把vue项目打包后的dist打包exe自定义最小化点击事件

1.preload.js里暴露接口 const { contextBridge, ipcRenderer } require(electron) contextBridge.exposeInMainWorld(electronAPI, {WindowMin: (data) > {ipcRenderer.send(window-min, data);} });2.vue文件处理 if(window.electronAPI){window.electronAPI.WindowMi…

12/24/30v/36转固定5v输出芯片

设计电源芯片的应用方案时,必须保证输入电压在DC6V至30V范围内,输出电压为固定的5V,同时电流需在200至300mA之间。在这种需求下,推荐使用AH1405芯片,因其输入电压范围宽(6-40V),内置…

正则表达式——详解

正则表达式是什么? 正则表达式(Regular Expression,通常简写为 regex、regexp 或 RE)是一种强大的文本处理工具,用于描述一组字符串的模式。它可以用来匹配、查找、替换等操作,几乎所有现代编程语言都支持…

【精选】基于Python的热门旅游景点数据分析系统的设计与实现(南京旅游,北京旅游,旅游网站,全国各地旅游网站)

目录: 系统简介: 关键技术介绍 2.1 PYTHON语言简介 2.2 MySql数据库 2.3 DJANGO框架 2.4 Hadoop介绍 2.5 Scrapy介绍 2.6 B/S架构 系统总功能结构设计 系统详细实现: 6系统测试 系统测试的目的 软件测试过程 测试用例 为什么选择…

学习之nodejs安装

安装地址 https://nodejs.org/en/download/package-manager 安装 配置环境变量

【网络编程】select实现服务器与客户端进行通信

1、运行1个服务器和2个客户端 实现效果: 1、服务器和2个客户端互相聊天,服务器和客户端都需要使用select模型去实现 2、服务器要监视2个客户端是否连接,2个客户端是否发来消息,以及服务器自己的标准输入流 3、客户端…

20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡

fdisk -l df -h df -t df -T mount 20240821让飞凌的OK3588-C的核心板在Linux R4下挂载1TB的exFAT格式的TF卡 2024/8/21 19:47 百度:rk3588 buildroot exFAT mount: mounting /dev/mmcblk1p1 on /mnt failed: Invalid argument Disk /dev/mmcblk1: 955 GB, 10254234…

高性能日志系统 代理模式构建全局日志器获取接口

日志器获取接口 通过两个函数,用于获取指定名称的日志器和root日志器。两个函数分别通过调用loggerManager的getInstance方法,获取单例的日志管理器对象,通过这种方式,借助日志管理器获取具体的日志器对象。 设计的主要目的&…

Nginx平滑升级与回滚示例

Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或回滚 Nginx 的版本。 Nginx 平滑升级与回滚 Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或…