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)、平均…

最后一个单词的长度[简单]

优质博文:IT-BLOG-CN 一、题目 给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s Hell…

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-…

【成功实现】CentOS磁盘扩容

对服务器磁盘扩容操作步骤 查看磁盘信息 fdisk -l 创建新分区 fdisk /dev/sda P n p … t 回车 8e w 重启虚拟机 reboot mkfs.ext4 /dev/sda4 查看磁盘信息 fdisk -l 创建物理卷 pvcreate /dev/sda4 y 创建卷组 并绑定物理卷 vgcreate centos /dev/sda4 创建逻辑…

golang小技巧

1/有时需要把json内容返回给前段进行文本编辑json字段,那么最好是能返回格式化后的json,这样对于用户编辑页方便。这时候可以利用json.MarshalIndent(data, "", "\t")来进行格式化,带有缩进的marshal。 2/对holders的填…

如何使用SpringBoot处理全局异常

如何使用SpringBoot处理全局异常 使用ControllerAdvice 和 ExceptionHandler处理全局异常 参考: ControllerAdvice ResponseBody Slf4j public class ExceptionHandler {ResponseStatus(HttpStatus.OK)org.springframework.web.bind.annotation.ExceptionHandler…

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

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

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

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

【ARM Coresight 系列文章 15.2 – components power domain 详细介绍】

【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1. Coresight 电源域模型1.1.1 CDBGPWRUPREQ 和 CDBGPWRUPACK1.1.2 CSYSPWRUPREQ 和 CSYSPWRUPACK1.1.3 Power Domain ID In RomTable1.1.4 Power domain entries1.1.5 Algorithm to discover power domain IDs1.1.6 De…

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

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

[Pytorch] 保存模型与加载模型

1、保存模型 # 定义模型 model BPNetModel(n_featuren_feature,n_hiddenn_hidden,n_outputn_output) #调用网络# 保存模型 torch.save(model, BPNetModel0.pth) 2、加载模型 import torch## 读取模型 model torch.load(BPNetModel0.pth) 3、保存模型参数 #调用网络 mode…

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…

springcloud gateway转发后getServerName被更改的问题

该问题起源于一次将代码移植到微服务产生。当使用springcloud gateway更换掉nginx网关后,出现无法登录的情况,跟进发现转发的信息里丢失了Host MimeHeaders accept */* knife4j-gateway-code ROOT content-type application/x-www-form-urlencoded …

Linux docker 安装 部署

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