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

python之web自动化测试框架

梳理下搭建web自动化框架的流程:

创建目录:

cases:存放测试用例,unittest框架要求用例名必须以test开头,所以命名test_case.py

test_case.py代码如下:继承unittest.TestCase类下面的方法setupclass(),teardownclass()。然后把用例放进去。每个页面作为一个用例

‘’‘这里写业务的用例 用例要用到page unittest’‘’
from page.basePage import Page
import unittest

class UiTester(unittest.TestCase):#继承unittest.TestCase类下面的方法setup(),teardown()
# def setUp(self):#每条测试用例执行之前,先执行它
# pass
# def tearDown(self):#每条测试用例执行之后,执行它
# pass
@classmethod
def setUpClass(cls):#类里面的函数执行之前,最先执行它(所有用例执行之前,执行一次)
cls.page=Page()#实例化,打开浏览器
cls.page.open()#打开url网页

def test_a_login(self):#这是case,每个页面里的功能点,用例与数据源分离,方便维护self.page.send_username()self.page.send_passwd()self.page.login()self.assertTrue(self.page.check_login())
def test_b_creatbug(self):self.page.clickbug()  # 进入到bug页面self.page.mentionbug()  # 点击提bug按钮,进入到提bug页面self.page.selectmodule()  # 选择所属模块self.page.bugtype()  # 选择bug类型self.page.os()  # 选择操作系统self.page.browser()  # 选择浏览器self.page.version()  # 选择影响版本self.page.assignto()  # 选择分配人self.page.deadline()  # 选择截止日期self.page.bugtitle()  # bug标题self.page.context()  # bug步骤self.page.mailto()  # 超送人self.page.file()self.page.save()self.assertTrue(self.page.check_creatbug())
@classmethod
def tearDownClass(cls):#类里面的所有测试用例执行之后,最后执行它(所有用例执行之后,执行一次)cls.page.quit()
lib目录:pyse.py文件主要存放操作元素的方法比如:click(),send_keys(),double_click(),drag_and_drop()等等page目录:basepage.py,根据PO思想,将每个页面作为一个类,每个页面的功能点作为这个类的一个函数。将所有页面写出来在用例文件test_case.py中调用上面的函数,每个页面作为一个用例,调用每个页面的函数bin:start.py写运行用例的流程:创建测试集合,找到测试用例,将每个测试用例加到测试集合中,运行用例,产生报告。

from lib.logger import logger
from lib.path import WEBCASEPATH,REPORTPATH
from lib.HTMLTestRunner import HTMLTestRunner
import unittest
from lib.tool import Tool
class Main(object):
def run(self):
Tool().clear_picture()
suite = unittest.TestSuite()
cases = unittest.defaultTestLoader.discover(WEBCASEPATH)
print(cases)
for case in cases:
print(case)
suite.addTest(case)
f = open(REPORTPATH,‘wb’)#打开一个报告文件
runner = HTMLTestRunner(f,verbosity=1,title=u’测试报告’, description=u’用例执行情况:')
runner.run(suite)
f.flush()
f.close()

最后:下方这份完整的自动化测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

相关文章:

python之web自动化测试框架

梳理下搭建web自动化框架的流程: 创建目录: cases:存放测试用例,unittest框架要求用例名必须以test开头,所以命名test_case.py test_case.py代码如下:继承unittest.TestCase类下面的方法setupclass(),te…...

算法笔记(十五)—— 动态规划(暴力递归到动态规划)习题训练!

通过递归到记忆化搜索再到严格表结构的动态规划 递归方法的评价:1. 单可变参数的维度;2. 可变参数的个数 记忆化搜索 在暴力递归中会存在很多的重复计算,可以使用存储结构来实现空间换时间。 严格表结构的动态规划 整理位置之间的依赖关系…...

云原生架构基础概念及应用办法

什么是云原生? 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念。 云原生更准确来说就是一种文化,是一种潮流&a…...

RedisTemplate 的基本使用手把手教

下载实例源码 使用步骤 1、引入 spring-boot-starter-data-redis 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2、在 application.yml 配置 R…...

Hbase -- Compact工具梳理

1. 背景 当前&#xff0c;线上HBase集群的自动Major Compact是关闭的&#xff0c;我们选择在凌晨业务空闲的时候进行手动触发Major Compact&#xff0c;Compact工具就是在运维平台上对资源组、RS、表进行Major Compact。目前线上有2种版本的Compact程序&#xff1a;Compact_v1…...

【java代码审计】SQL注入

1 原理 没有正确的对用户的输入进行检查&#xff0c;将用户的输入以拼接的方式带入到SQL语句中&#xff0c;导致SQL注入。 2 产生SQL注入的原因 2.1 JDBC拼接不当造成SQL注入 前置知识&#xff1a; JDBC执行SQL语句的两种方式&#xff1a; PrepareStatement&#xff1a;会对…...

前置知识-辛 Runge-Kutta 方法

1.3.3 辛 Runge-Kutta 方法 将方程 ( 1.10.2 ) (1.10 .2) (1.10.2) 改写为 d z d x =...

require 与 import 两种引入模块方式到底有什么区别?

关于JavaScript 的模块化规范&#xff0c;可以移步至&#xff1a; 【JavaScript高级】模块化规范「一文让你彻底搞懂前端模块化规范 & 区别」 下面进入正题 require 与 import 两种引入模块方式&#xff0c;到底有什么区别呢&#xff1f; 大致可以分为以下几个方面&#…...

软考信息系统监理师备考建议

用好备考方法&#xff0c;两三个月就可以过的。信息系统监理师备考最好以教材和历年真题为主&#xff0c;教学视频模拟题为辅。考试介绍与复习建议&#xff1a;考试设置的科目包括&#xff1a;&#xff08;1&#xff09;信息系统工程监理基础知识&#xff0c;考试时间150分钟&a…...

第八届蓝桥杯省赛——4承压计算(二维数组,嵌套循环)

题目&#xff1a;X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。每块金属原料的外形、尺寸完全一致&#xff0c;但重量不同。金属材料被严格地堆放成金字塔形。7 5 8 7 8 8 9 2 7 2 8 1 4 9 1 8 1 8 8 4 1 7 9 6 1 4 5 4 5 6 5 5 6 9 5 6 5 5 4 7 9 3 5 5 1 7 5 7 9 7 4…...

【ECNU】3645. 莫干山奇遇(C++)

目录 题目 输入格式 输出格式 样例 提示 思路 代码 题目 单点时限: 2.0 sec 内存限制: 512 MB 出题人当然是希望出的题目有关 oxx&#xff0c;于是想方设法给题目配上一些有关 oxx 的背景故事&#xff0c;使得它看起来不那么无趣。但有的时候却无法引入合适的小姐姐&…...

为什么需要学习shell、shell的作用

课程基于B站于超课程笔记 03 Shebang的正确玩法_哔哩哔哩_bilibili P1 shell的作用 P2 shell执行命令的流程 P3 Shebang的正确玩法 什么是shell及组成 shell概念 shelll组成 Shebang概念 /bin/sh /bin/bash一样&#xff0c;都是指向一个bash解释器 [rootlocalhost ~]#…...

pgsql-Create_ALTER_GRANT_REVOKE命令语法

pgsql-Create_ALTER_GRANT_REVOKE命令语法 资料 语法约定 CREATE ROLE ALTER ROLE GRANT授权 REVOKE回收授权 权限类型说明 语法约定 下面的约定被用于命令的大纲&#xff1a;方括弧&#xff08;[和]&#xff09;表示可选的部分&#xff08;在 Tcl 命令里&#xff0c;使…...

【linux】:进程概念

文章目录 冯诺依曼体系结构一&#xff1a;操作系统二: 进程总结冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 冯诺依曼体系如下图&#xff1a; 那么输入设备有哪些呢&#xff1f…...

创建对象的方式和对属性的操作

javaScript支持多种编程范式&#xff0c;包括函数式编程和面向对象编程&#xff0c;javaScript的对象被设计成一组属性的无序集合&#xff0c;由key和value组成。 创建对象的两种方式 早期使用创建对象方式最多的是使用Object类&#xff0c;使用new关键字来创建一个对象&…...

GO时间相关操作说明

文章目录 GO时间相关操作时间转换成字符串字符串转换成时间时间戳和时间操作时间比较操作时间增加和减少操作休眠操作time.AfterFunc操作time.NewTicker操作GO时间相关操作 ​ GO语言在使用时间转换的时候会用到2006-01-02 15:04:05 这是固定参数写法,类似java语言中的yyyy-M…...

选择和分支结构

选择和分支结构选择和分支结构一、复习问答二、选择结构2.1 基础选择结构2.2 if-else结构2.3 多重if结构2.4 嵌套if结构三、分支结构四、局部变量选择和分支结构 一、复习问答 1、Java中基本数据类型 2、类型的转换的两种情形 3、数据类型提升的规则 二、选择结构 2.1 基础选…...

Elasticsearch总结笔记

文章目录简介类型增删改查操作索引原理简介 底层使用的lucene引擎&#xff0c;lucene引擎直接使用相对复杂&#xff0c;有一定的学习成本&#xff0c;同样是使用Java编写&#xff0c;Elasticsearch使用的rest风格的进行交互&#xff0c;而数据呢则是以JSON的方式进行传输。学习…...

Ubuntu 安装指定版本 Mysql,并设置远程连接(以安装mysql 5.5 为例)

目录 一、安装Mysql 1、卸载Mysql&#xff08;可跳过&#xff09; 2、安装mysql 软件源 3、安装mysql 5.5 4、验证测试 二、设置远程登录 1、允许使用root账号远程连接 2、Mysql 允许远程登录 一、安装Mysql 1、卸载Mysql&#xff08;可跳过&#xff09; 如果之前安装…...

NumPy:Python中的强大数学工具

NumPy&#xff1a;Python中的强大数学工具 文章目录NumPy&#xff1a;Python中的强大数学工具一、NumPy简介二、创建数组三、数组尺寸四、数组运算五、数组切片六、数组连接七、数据存取八、数组形态变换九、数组排序与搜索十、矩阵与线性代数运算一、NumPy简介 当谈到数据科学…...

【大模型数学能力红黑榜】:DeepSeek-R1在GSM8K上实现89.6%→93.8%跃迁的关键训练秘钥

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek-R1在GSM8K数学基准上的性能跃迁全景 基准测试背景与指标演进 GSM8K&#xff08;Grade School Math 8K&#xff09;作为衡量模型多步推理能力的关键数学基准&#xff0c;包含8,500道人工校验的…...

开源虾类养殖监控系统:ESP32与MQTT物联网技术实践

1. 项目概述&#xff1a;一个开源虾类养殖监控系统的诞生最近在捣鼓一个挺有意思的项目&#xff0c;叫“openshrimp”。这名字一看就挺直白&#xff0c;开源&#xff08;open&#xff09;加上虾&#xff08;shrimp&#xff09;&#xff0c;基本就点明了核心&#xff1a;一个开源…...

从零开始设计智能体的系统提示

写了137版系统提示之后&#xff0c;我总结出的这套“认知框架设计法”2019年我刚开始接触对话系统的时候&#xff0c;写系统提示&#xff08;System Prompt&#xff09;是一件特别简单的事。你打开OpenAI的Playground&#xff0c;在“System”那个框里写上一段话&#xff0c;比…...

STM32驱动ATK-4.3寸屏避坑指南:用FSMC模拟8080时序,告别花屏和卡顿

STM32驱动ATK-4.3寸屏实战&#xff1a;FSMC模拟8080时序的深度优化 当你在STM32项目中使用ATK-4.3寸TFTLCD时&#xff0c;是否遇到过屏幕闪烁、显示错位或者刷新率低下的问题&#xff1f;这些常见痛点往往源于对NT35510驱动器时序理解不够深入或FSMC配置不当。本文将带你从硬件…...

电动汽车大电池技术瓶颈与成本挑战:从续航焦虑到理性发展

1. 大电池电动汽车面临的现实拷问 最近关于电动汽车的新闻&#xff0c;对电池制造商来说可不算友好。丰田宣布下调其纯电动城市车eQ的销售目标&#xff0c;这本身或许不算大新闻&#xff0c;毕竟eQ的预期销量本就有限。但真正引人深思的&#xff0c;是丰田副董事长内山田竹志在…...

汽车电子新焦点:L1-L3渐进式智能驾驶的技术机遇与实现路径

1. 从“全自动驾驶”的狂热到“渐进式智能”的务实回归最近刚从几个汽车电子圈的重磅展会回来&#xff0c;包括底特律的AutoSens、中国的Tech.AD以及圣克拉拉的嵌入式视觉峰会。一圈跑下来&#xff0c;一个强烈的感受是&#xff1a;行业的风向&#xff0c;真的变了。几年前&…...

Adafruit Metro M7与CircuitPython:高性能嵌入式开发的快速原型利器

1. 项目概述&#xff1a;为什么选择Metro M7与CircuitPython&#xff1f; 在嵌入式开发的世界里&#xff0c;我们常常面临一个核心矛盾&#xff1a;对性能的极致追求与开发效率的难以兼得。传统的C/C开发虽然能榨干硬件的每一分性能&#xff0c;但其陡峭的学习曲线、复杂的编译…...

2026年AI数字人功能大盘点:新手必看的7大核心功能

2026年AI数字人功能大盘点&#xff1a;新手必看的7大核心功能 AI数字人到底有哪些功能&#xff1f;AI数字人有哪些功能&#xff1f;小白也能用的AI数字人功能有哪些&#xff1f;最近越来越多的朋友问我这些问题。今天我们就来一文搞懂AI数字人的核心功能。一、形象克隆&#xf…...

罗技设备进阶指南:从基础连接到高效自定义

1. 罗技设备开箱与基础连接 第一次拿到罗技设备时&#xff0c;很多人会直接拆开包装就开始使用。但其实有几个关键步骤需要注意&#xff0c;这能让你后续的使用体验更顺畅。我建议先检查包装内的所有配件&#xff0c;特别是无线接收器。以MX Keys键盘和MX Master 3鼠标为例&…...

如何突破网盘下载速度限制:LinkSwift直链解析工具全攻略

如何突破网盘下载速度限制&#xff1a;LinkSwift直链解析工具全攻略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...