pytest框架的封装以及用例管理框架

pytest框架的封装以及用例管理框架

  • 公共类
  • 统一封装
    • requests_util02.py
    • test_api01.py
  • 自动化测试的基础
    • 自动化测试的介入点
    • 自动化测试和手工测试占比
    • 自动化实施过程
  • pytest元素定位
    • 元素定位查找
    • 元素定位的方式
      • 通过 ID 定位
      • 通过 Name 定位
      • 通过 Class Name 定位
      • 通过 Tag Name 定位
      • 通过 XPath 定位
      • 通过 CSS Selector 定位
      • 通过 Link Text 定位(用于定位链接)
      • 通过 Link Text 定位(用于定位链接)
      • 案例分析

公共类

在这里插入图片描述

import requests
class RequestsUtil02:# 创建一个 requests 库的会话sess = requests.session()# 定义一个发送所有请求的函数def send_all_request(self, **kwargs):# 使用会话对象发送请求res = self.sess.request(**kwargs)# 返回响应对象return res

在这里插入图片描述

统一封装

requests_util02.py

import requestsclass RequestsUtil02:# 创建一个 requests 库的会话sess = requests.session()# 定义一个发送所有请求的函数def send_all_request(self, **kwargs):# 使用会话对象发送请求res = self.sess.request(**kwargs)print(res.json())# 返回响应对象return resdef send_all_reuqest(self, method, url, params):pass

test_api01.py

import jsonpath
import requests
from common_02.requests_util02 import RequestsUtil02class TestApi:#创建一个类变量access_token=" "#获取鉴权码的接口def test_get_token(self):urls = "https://api.weixin.qq.com/cgi-bin/token"datas = {"grant_type": "client_credential","appid": "wx8a9de038e93f77ab","secret": "8326fc915928dee3165720c910effb86"}res=RequestsUtil02().send_all_reuqest(method="get",url=urls, params=datas)# print(res.json())# res = requests.get(url=urls, params=datas)# 从响应结果中解析出 JSON 数据,并使用 jsonpath 提取出 access_token 的值# jsonpath.jsonpath() 返回一个列表,包含所有匹配到的结果,这里假设 access_token 只有一个# lis=jsonpath.jsonpath(res.json(), "$.access_token")# TestApi.access_token=res.json()["access_token"]# print(TestApi.access_token)# 打印提取到的 access_token 的值,lis[0] 是因为 jsonpath 返回的是一个列表,我们需要取第一个元素# print(lis[0])#获取测试查询的接口def test_select_flag(self):urls= "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info"datas= {"access_token": TestApi.access_token}res= RequestsUtil02().send_all_reuqest(method="get",url=urls, params=datas)# print(res.json())#编辑便签的接口def test_edit_flag(self):urls="https://api.weixin.qq.com/cgi-bin/menu/create"datas1={"access_token": TestApi.access_token}data2={"button":[{"type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC"},{"name":"菜单","sub_button":[{"type":"view","name":"搜索","url":"http://www.soso.com/"},{"type":"view","name":"视频","url":"http://v.qq.com/"},{"type":"click","name":"赞一下我们","key":"V1001_GOOD"}]}]}res=RequestsUtil02().send_all_reuqest(method="post",url=urls,json=data2,params=datas1)# print(res.json())if __name__ == '__main__':TestApi().test_get_token()TestApi().test_select_flag()TestApi().test_edit_flag()

自动化测试的基础

自动化测试的介入点

到项目的中后期和维护期,自动化适合介入
三期:8个月
第一期:3个月
第二期:2.5个月
自动化迭代半个月-一个月

自动化测试和手工测试占比

  • 小型项目:

在小型项目中,自动化测试的比例可能较低,大约占总测试工作量的 10% 到 30% 左右。这是因为在小型项目中,通常会有较少的功能和交互,因此自动化测试的需求相对较少。手工测试通常会占据较大的比例,用于验证基本功能和交互是否正常。

  • 中型项目:

在中型项目中,自动化测试的比例可能会增加,大约占总测试工作量的 30% 到 50%。这是因为中型项目通常会涉及到更多的功能和交互,手工测试会变得更加耗时和繁琐。因此,团队会倾向于增加自动化测试的覆盖范围,以提高测试效率和稳定性。

  • 大型项目:

在大型项目中,自动化测试的比例通常会进一步增加,占总测试工作量的 50% 到 80% 或更多。这是因为大型项目通常会涉及到复杂的功能和交互,手工测试可能无法满足测试需求。因此,团队会投入更多的资源和精力来建立和维护自动化测试框架,并加强自动化测试的覆盖范围。

自动化实施过程

1.可行性分析
2.框架选择(selenium,RF)
3.需求分析
4.制定计划
5.测试用例的设计(从功能测试收取)
6.环境搭建
7.版本控制
8.脚本维护

pytest元素定位

元素定位查找

1.元素是否加载完成
2.页面是否存在frame或者iframe
3.元素是否不可用或者不可读,不可见
是否是动态的元素,动态的DIV层,字定义组件
前提:元素唯一

元素定位的方式

通过 ID 定位

element = driver.find_element(By.ID, 'element_id')

通过 Name 定位

element = driver.find_element(By.NAME, 'element_name')

通过 Class Name 定位

element = driver.find_element(By.CLASS_NAME, 'element_class')

通过 Tag Name 定位

element = driver.find_element(By.TAG_NAME, 'element_tag')

通过 XPath 定位

element = driver.find_element(By.XPATH, '//div[@class="example"]')

通过 CSS Selector 定位

element = driver.find_element(By.CSS_SELECTOR, 'div.example')

通过 Link Text 定位(用于定位链接)

element = driver.find_element(By.LINK_TEXT, 'Link Text')

通过 Link Text 定位(用于定位链接)

element = driver.find_element(By.PARTIAL_LINK_TEXT, 'Partial Link Text')

案例分析

from selenium import webdriver
from selenium.webdriver.common.by import By# 启动浏览器
driver = webdriver.Chrome()# 打开商城网站
driver.get('http://example.com')# 定位搜索框,并输入关键字
search_box = driver.find_element(By.ID, 'search-box')
search_box.send_keys('手机')# 定位搜索按钮,并点击
search_button = driver.find_element(By.ID, 'search-button')
search_button.click()# 定位搜索结果中的第一个商品,并点击进入商品详情页面
first_product = driver.find_element(By.CLASS_NAME, 'product-item')
first_product.click()# 在商品详情页面,定位加入购物车按钮,并点击
add_to_cart_button = driver.find_element(By.XPATH, '//button[contains(text(), "Add to Cart")]')
add_to_cart_button.click()# 定位购物车图标,并点击进入购物车页面
cart_icon = driver.find_element(By.CLASS_NAME, 'cart-icon')
cart_icon.click()# 关闭浏览器
driver.quit()

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

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

相关文章

唯众物联网安装调试员实训平台物联网一体化教学实训室项目交付山东技师学院

近日,山东技师学院物联网安装调试员实训平台及物联网一体化教学实训室采购项目已顺利完成交付并投入使用,标志着学院在物联网技术教学与实践应用方面迈出了坚实的一步。 山东技师学院作为国内知名的技师培养摇篮,一直以来致力于为社会培养高…

windows11 openssh服务开启;第三方ping不通局域网windows电脑;ssh连接内部ubuntu系统

参考:https://blog.csdn.net/2301_77554343/article/details/134328867 1、windows11 openssh开启 1)我这边可选功能在设置-系统里面;其他网上看在应用下;添加可选openssh服务器安装 2)安装后打开,管理员…

光伏户用开发技巧

一、开发户用光伏的技巧有哪些? 1.项目可行性分析 电站开发前需要先进行可行性分析,从当地的气象条件、电网的接入能力、政策环境等方便分析。可以自行收集数据分析,也可以邀请专业机构进行评估。 2.选址和电站设计 光伏电站的选址&#…

agent利用知识来做规划:《KnowAgent: Knowledge-Augmented Planning for LLM-Based Agents》笔记

文章目录 简介KnowAgent思路准备知识Action Knowledge的定义Planning Path Generation with Action KnowledgePlanning Path Refinement via Knowledgeable Self-LearningKnowAgent的实验结果 总结参考资料 简介 《KnowAgent: Knowledge-Augmented Planning for LLM-Based Age…

Spring Cloud四:微服务治理与安全

Spring Cloud一:Spring Cloud 简介 Spring Cloud二:核心组件解析 Spring Cloud三:API网关深入探索与实战应用 文章目录 一、服务注册中心的选型与最佳实践1. 主流服务注册中心概述2. 最佳实践建议(1)、选型建议(2)、高可用性与稳定性1). 高可…

北京密云广电许可证办理要求与流程

北京密云广电许可证办理攻略:要求与流程全解析 一、引言 各位老板好,我是经典世纪胡云帅,随着广播电视行业的快速发展,越来越多的企业和个人希望进入这一领域,开展节目制作、传播等业务。而在北京密云,这一…

二进制王国(蓝桥杯备赛)【sort/cmp的灵活应用】

二进制王国 题目链接 https://www.lanqiao.cn/problems/17035/learning/?contest_id177 题目描述 思路 这里就要灵活理解字典序排列,虽然string内置可以直接比较字符串字典序,但是在拼接时比较特殊,比如 11的字典序小于110,但…

HTTP --- 下

目录 1. HTTP请求方式 1.1. HTML 表单 1.2. GET && POST方法 1.2.1. 用 GET 方法提交表单数据 1.2.2. 用 POST 方法提交表单数据 1.2.3. 总结 1.3. 其他方法 2. HTTP的状态码 2.1. 重定向 2.1.1. 临时重定向 && 永久重定向 2.1.2. 302 &&…

【MySQL系列】Public Key Retrieval is not allowed

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python灰帽子网络安全实践

教程介绍 旨在降低网络防范黑客的入门门槛,适合所有中小企业和传统企业。罗列常见的攻击手段和防范方法,让网站管理人员都具备基本的保护能力。Python 编程的简单实现,让网络运维变得更简单。各种黑客工具的理论和原理解剖,让人知…

基于Matlab的眼底图像血管分割,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

车道线检测论文:《Ultra Fast Structure-aware Deep Lane Detection》

该论文标题为《Ultra Fast Structure-aware Deep Lane Detection》,作者是浙江大学计算机科学与技术学院的Zequn Qin、Huanyu Wang和Xi Li。论文提出了一种新颖的、简单而有效的车道检测方法,旨在解决具有挑战性场景下的车道检测问题,并实现极…

借用QStyledItemDelegate 在DataView中创建各种子控件

在Model/View 中,二维表格的输入方式可能各种各样,我们需要在单元格嵌入各种类型控件,但是能把各种控件整合一个委托类吗?本文进行了尝试。将创建各种控件的逻辑整合到一个委托类。效果图如下: 本文实现了在DataView 的…

【SpringMVC】知识汇总

SpringMVC 短暂回来,有时间就会更新博客 文章目录 SpringMVC前言一、第一章 SpingMVC概述二、SpringMVC常用注解1. Controller注解2. RequestMapping注解3. ResponseBody注解4. RequestParam5. EnableWebMvc注解介绍6. RequestBody注解介绍7. RequestBody与RequestP…

Echarts功能记录

基础配置 工具箱toolbox 对应功能 案例中使用到的第三方脚本

解决Animate.css动画效果无法在浏览器运行问题

背景 在开发官方网站的时候,临时更换了电脑,发现原本正常的动画效果突然不动了。 经过 chrome、Microsoft Edge都无法运行。 Animate.css | A cross-browser library of CSS animations. 问题排查 通过审查元素后发现类名是注入并且生效的。 验证 然…

【图解物联网】第3章 物联网设备

3.1 设备——通向显示世界的接口 3.1.1 为什么要学习设备的相关知识 经过前两章的学习,想必各位读者已经掌握物联网这个词描绘出的世界和用于实现物联网的系统架构了。基于这点,这一章将会为大家介绍在物联网世界中起着核心作用的因素,即设…

atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)

前言:在学习C语言的时候,我们知道每个字符都有其所对应的ASCII码值,当我们使用49来打印字符时,打印出来的就是数字字符 ‘ 1 ’,那么字符能否直接被转换成对应的整型数字呢?答案是当然可以,这时…

印度洋涡旋统计

印度洋涡旋统计 clear;clc;clf;close all; %% 读取涡旋半径、时间范围、经纬度信息,以及涡旋点的经纬度;半径路径和涡旋极性; file2=‘D:\matlab_work\accept_work\涡旋统计的平面分布\eddy_trajectory_2.0exp_19930101_20200307.nc’; time=double(ncread(file2,‘time’)…

一文搞懂数据链路层

数据链路层 1. 简介2. MAC3. 以太网 1. 简介 (1)概念 链路(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。 数据链路(data link) 除了物理线路(双绞线电缆、同轴电缆、光线等介质)外&#xff0…