selenium+python web自动化测试框架项目实战实例教程

自动化测试对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行...

可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。学习自动化测试最终目的是应用到实际项目中,本篇将介绍大家自动化测试框架:

  • 项目目录结构:

  • 基本类模块代码
 from Common.Log import framelog
class base():def __init__(self,driver):self.driver = driverself.log = framelog().log()self.log.info("info")#把八大定位放在一个函数里面def find_ele(self,dic):#传递过来字典第一个即为定位方式by =list(dic.keys())[0];print("by"+by)#传递过来字典第二个为具体的元素ele=list(dic.values())[0];self.log.info("id")self.log.info("元素"+ele)try:if by == 'id':return self.driver.find_element_by_id(ele)elif by == 'name':return self.driver.find_element_by_name(ele)elif by == 'className':return self.driver.find_element_by_class_name(ele)elif by== 'linktext':return  self.find_element_by_link_text(ele)elif by == 'partial':return self.find_element_by_partial_link_text(ele)elif by == "css":return  self.driver.find_element_by_css_selector(ele)elif by == "xpath":return self.driver.find_element_by_xpath(ele)else:return  self.driver.find_element_by_tag_name(ele)except:return None#输入值def send_key(self,ele):print(ele)return  self.find_ele(ele)#后退def back(self):self.driver.back()#前进def forword(self):self.driver.forward()#当前窗口urldef url(self):self.driver.current_url
  • 数据模块-读取excel操作:
import  xlrd,os
#读excel操作、所有数据存放字典中
#filename为文件名
#index为excel sheet工作簿索引
def read_excel(filename,index):xls = xlrd.open_workbook(filename)sheet = xls.sheet_by_index(index)print(sheet.nrows)print(sheet.ncols)dic={}for j in range(sheet.ncols):data=[]for i in range(sheet.nrows):data.append(sheet.row_values(i)[j])dic[j]=datareturn  dic
  • log模块日志封装:
import logging,tim
from Common.function import  projectPath
class framelog():def __init__(self, logger=None):# 创建一个loggerself.logger = logging.getLogger(logger)self.logger.setLevel(logging.DEBUG)# 创建一个handler,用于写入日志文件self.log_time = time.strftime("%Y_%m_%d_")#路径需要修改self.log_path = projectPath()+"/Logs/"self.log_name = self.log_path + self.log_time + 'log.log'print(self.log_name)fh = logging.FileHandler(self.log_name, 'a', encoding='utf-8')fh.setLevel(logging.INFO)# 定义handler的输出格式formatter = logging.Formatter('[%(asctime)s] %(filename)s->%(funcName)s line:%(lineno)d [%(levelname)s]%(message)s')fh.setFormatter(formatter)self.logger.addHandler(fh)#  添加下面一句,在记录日志之后移除句柄#   self.logger.removeHandler(fh)# 关闭打开的文件fh.close()def log(self):return self.logger
  • PO车次预定模块实现:
from Base.base import  base
import  time
class bookPage(base):#预定车票def book(self):return self.by_xpath("//*[@id='tbody-01-K5260']/div[1]/div[6]/div[4]/a")#动车def book_typeD(self):return  self.by_css("#resultFilters01 > dl:nth-child(1) > dd.current > label > i")# 关闭浮层def book_close(self):return  self.by_css("#appd_wrap_close")def book_nologin(self):return  self.by_css("#btn_nologin")def bookBtn(self):try:time.sleep(7)self.book_close().click()time.sleep(2)self.book().click()time.sleep(2)self.book_nologin().click()except:self.log.error("车次查询失败")Nonereturn self.dr_url()
  • 测试配置文件:
[testUrl]
url = “测试环境url"
[productUrl]
url = "生产环境url"
  • 测试用例管理模块
  1. 测试套件管理:
import unittest
import HTMLTestRunner
import  time
from Common.function import  projectPathif __name__ == '__main__':test_dir=projectPath()+"TestCases"tests=unittest.defaultTestLoader.discover(test_dir,pattern ='test*.py',top_level_dir=None)now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time()))filepath=projectPath()+"/Reports/"+now+'.html'fp=open(filepath,'wb')#定义测试报告的标题与描述runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'自动化测试报告',description=u'测试报告')runner.run(tests)fp.close()

2.测试脚本:

import os,sys
sys.path.append(os.path.split(os.getcwd())[0])
import  time,unittest,HTMLTestRunner
from PageObject.bookPage import bookPage
from PageObject.orderPage import orderPage
from PageObject.searchPage import searchPagefrom Base.baseUnit import  unitBase
from selenium import  webdriverclass SearchTest(unitBase):def test_02(self):search = searchPage(self.driver)res =search.searchTrain("杭州","上海","2019-05-10")#本例断言是根据当前页面的url去判断的self.assertIn('TrainBooking',res)def test_03(self):book = bookPage(self.driver)res=book.bookBtn()self.assertIn("InputPassengers",res)def test_04(self):order = orderPage(self.driver)order.userInfo("小王")
  • 项目格式:

以上为代码级web自动化测试框架,后续将分享无代码自动化测试框架

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

LabVIEW应用开发——基本函数(一)

前面我们介绍了一些控件的介绍和属性的配置,想要完成一个软件只会拖控件肯定是不行的,没办法实现既有的功能。比如我们要实现从串口中读到数据,根据一定的协议解析,然后转换成各个参数的值的显示,包括时间、电压、电流…

796. 子矩阵的和(左上角前缀和)

题目: 796. 子矩阵的和 - AcWing题库 思路: 1.暴力搜索(搜索时间复杂度为O(n2),很多时候会超时) 2. 前缀和(左上角前缀和):本题特殊在不是直接求前n个数的和,而是求…

第1篇 目标检测概述 —(3)目标检测评价指标

前言:Hello大家好,我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标,主要包括几个指标:精确率(Precision)、召回率(Recall)、交并比(IoU)、平均…

UI自动化测试是什么?什么项目适合做UI自动化测试

UI 测试是一种测试类型,也称为用户界面测试,通过该测试,我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要,通过执行 UI 测试…

Flink Hive Catalog操作案例

在此对Flink读写Hive表操作进行逐步记录,需要指出的是,其中操作Hive分区表和非分区表的DDL有所不同,以下分别记录。 基础环境 Hive-3.1.3 Flink-1.17.1 基本操作与准备 1、上传依赖jar包到flink/lib目录下 cp flink-sql-connector-hive-…

基于springboot实现校友社交平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校友社交平台管理系统演示 摘要 校友社交系统提供给用户一个校友社交信息管理的网站,最新的校友社交信息让用户及时了解校友社交动向,完成校友社交的同时,还能通过论坛中心进行互动更方便。本系统采用了B/S体系的结构,使用了java技…

Linux下的文件操作和文件管理

文章目录 应用编程文件操作文件描述符open函数write函数read函数close函数lseek函数文件操作例子 文件管理文件基本知识文件类型文件共享空洞文件错误处理退出程序原子操作fcntl和ioctl截断文件stat函数软链接和硬链接 应用编程 系统调用(system call)是Linux内核提供给应用层…

便利连锁:如何增加收益?教你一招轻松搞定!

自动售货机,作为零售行业的一项颠覆性技术,正逐渐改变着我们的购物方式和商业格局。这一创新技术不仅重新定义了零售业务模式,还为企业提供了更多的机会来满足不断演变的消费者需求。 客户案例 便利连锁店 成都某便利连锁店面临一系列挑战&am…

ASP.NET Core3.1 API 创建(Swagger配置、数据库连接Sql Server)、开发、部署

文章目录 创建项目点击Nuget安装包删除原有controllers编辑新建controll、添加注释Startup 注册Swagger服务使用swagger中间件配置XML注释更改启动端口 launchsettings.json在startup.cs跨域处理运行 数据库设计与连接安装库新建类继承框架根据数据库表设计对应设计类在DataCon…

【QT】其他常用控件2

新建项目 lineEdit 什么都不显示(linux password) password textEdit和plainTextEdit spinBox和doubleSpinBox timeEdit、dateEdit、dateTimeEdit label 显示图案,导入资源:【QT】资源文件导入_复制其他项目中的文件到qt项目中_St…

jmeter界面压测过程卡死解决思路

1、排查压测机的资源是否充足; 2、检查jmeter压测脚本,除聚合报告的所有组件关闭; 我在压测过程中出现频繁卡死,就是查看结果数和断言结果信息量过多导致: 3、直接用非gui界面形式,也就是脚本形式压测。

【路径规划】A*算法 Java实现

A*(A-Star)算法是一种广泛使用的寻路算法,尤其在计算机科学和人工智能领域。 算法思想 通过评估函数来引导搜索过程,从而找到从起始点到目标点的最短路径。评估函数通常包括两部分:一部分是已经走过的实际距离&#x…

Linux docker 安装 部署

docker 安装 linux系统离线安装docker 如何使用docker部署c/c程序 常用命令 给予 docker 访问 gui 的权限 在 /etc/profile 末尾添加 if [ "$DISPLAY" ! "" ] thenxhost fi在执行 更新 source /etc/profiledocker下载镜像 docker search gcc #搜索d…

C#的DataGridView数据控件(直接访问SQL vs 通过EF实体模型访问SQL)

目录 一、在DataGridView控件中显示数据 1.直接编程访问SQL (1)源码 (2)生成效果 2.通过EF实体模型访问SQL (1)源码 (2)生成效果 二、获取DataGridView控件中的当前单元格 …

文献阅读(207)FPGA HBM

题目:HBM Connect: High-Performance HLS Interconnect for FPGA HBM时间:2021会议:FPGA研究机构:UCLA Jason Cong 题目:Demystifying the Memory System of Modern Datacenter FPGAs for Software Programmers throug…

K-Means和KNN

主要区别 从无序 —> 有序 从K-Means —> KNN KNN:监督学习,类别是已知的,对已知分类的数据进行训练和学习,找到不同类的特征,再对未分类的数据进行分类。K-Means:无监督学习,事先不知道…

【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)相机内参标定

LivoxHIKROBOT联合标定——相机内参标定 引言1 海康机器人HIKROBOT SDK二次开发并封装ROS1.1 介绍1.2 安装MVS SDK1.3 封装ROS packge 2 览沃Livox SDK二次开发并封装ROS3 相机雷达联合标定——相机内参标定3.1 环境配置3.1.1 安装依赖——PCL 安装3.1.2 安装依赖——Eigen 安装…

快捷键记录

文章目录 ctrlaltashftwinsWinRCtrlc和CtrlvCtrl -Xshell的复制粘贴ctrlalt(鼠标跳出)ctrl alt T ctrlalta 这是QQ/TIM的屏幕截图快捷键。截图成功后,会有一栏导航,可以对图片进行勾画、模糊、绘画、标号、撤回、翻译、提取文…

百度文心一言4.0抢先体验教程!

🍁 展望:关注我, AI学习之旅上,我与您一同成长! 一、 引言 想快速体验文心一言4.0,但又觉得技术难度太高?别担心,我来手把手教你! 🚀 10月17日,文心一言4.0…

【Overload游戏引擎细节分析】PBR材质Shader

PBR基于物理的渲染可以实现更加真实的效果,其Shader值得分析一下。但PBR需要较多的基础知识,不适合不会OpenGL的朋友。 一、PBR理论 PBR指基于物理的渲染,其理论较多,需要的基础知识也较多,我在这就不再写一遍了&…