首页 > 其他分享 >pytest框架的封装以及用例管理框架

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

时间:2024-03-28 20:04:37浏览次数:30  
标签:定位 框架 res driver element 用例 token pytest 测试

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

公共类

在这里插入图片描述

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 requests


class RequestsUtil02:
    # 创建一个 requests 库的会话
    sess = requests.session()

    # 定义一个发送所有请求的函数
    def send_all_request(self, **kwargs):
        # 使用会话对象发送请求
        res = self.sess.request(**kwargs)
        print(res.json())
        # 返回响应对象
        return res

    def send_all_reuqest(self, method, url, params):
        pass

test_api01.py

import jsonpath
import requests
from common_02.requests_util02 import RequestsUtil02


class 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()

标签:定位,框架,res,driver,element,用例,token,pytest,测试
From: https://blog.csdn.net/JennyXi2001/article/details/136987926

相关文章

  • MNN:轻量级深度学习推理框架的优雅之选
    在深度学习领域,推理框架的选择对于模型的应用至关重要。MNN,作为阿里巴巴开源的一款轻量级深度学习推理框架,凭借其出色的性能和易用性,逐渐成为了众多开发者的首选。本文将为大家详细介绍MNN的特点、安装及编译过程,带您领略这一优雅之选的魅力。一、MNN:轻量级推理框架的璀璨......
  • 前端学习-UI框架学习-Bootstrap5-006-表格
    菜鸟教程链接基础表格<template><divclass="containermt-3"><h2>基础表格</h2><p>.table类来设置基础表格的样式:</p><tableclass="table"><thead><tr>&l......
  • SpringBoot框架学习
    SpringBoot相比Spring的优点1.开发基于Spring的应⽤程序很容易。2.SpringBoot项⽬所需的开发或⼯程时间明显减少,通常会提⾼整体⽣产⼒。3.SpringBoot不需要编写⼤量样板代码、XML配置和注释。4.Spring引导应⽤程序可以很容易地与Spring⽣态系统集成,如SpringJDB......
  • 前端学习-UI框架学习-Bootstrap5-005-颜色
    菜鸟教程学习链接字体颜色Bootstrap5提供了一些有代表意义的颜色类:.text-muted,.text-primary,.text-success,.text-info,.text-warning,.text-danger,.text-secondary,.text-white,.text-dark,.text-body(默认颜色,为黑色)and.text-light:可以设置文本颜色透明度......
  • 在Vue.js框架中,activated和created的区别
    在Vue.js框架中,activated和created两个钩子函数都是在组件被创建时执行的函数,但它们的使用场景略有不同。createdcreated钩子函数是在组件被创建(即实例化)时执行的,可以用它来初始化组件的数据、监听事件、调用方法等操作。它是组件生命周期中的第一个钩子函数,通常用于组件初......
  • 前端学习-UI框架学习-Bootstrap5-004-文字排版
    菜鸟教程链接Bootstrap5默认设置Bootstrap5默认的font-size为16px,line-height为1.5默认的font-family为"HelveticaNeue",Helvetica,Arial,sans-serif此外,所有的元素margin-top:0、margin-bottom:1rem(16px)h1-h6<template><divclass="con......
  • 网络安全体系框架
    网络安全体系框架目录一、引言1.网络安全问题的提出-------------------------------------------------2.网络安全体系框架设计的重要性---------------------------------------二、网络安全体系框架的设计理念1.总体设计理念---------------------------------------......
  • Flask后端框架搭建个人图库
    Hello,我是"小恒不会java"前言最近发现自己有一些站点图片丢失,原来是用了人家的链接。考虑到使用对象存储容易被刷流量,可以用flask这种轻量级框架快速实现网页登陆操作,行,也就不考虑正式生产环境那些复杂的登录认证(像token这些)。介绍我简单在服务器上flaskrun了,网址:http:......
  • 前端学习-UI框架学习-Bootstrap5-003-网格系统
    菜鸟教程链接Bootstrap提供了一套响应式、移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列规则网格每一行需要放在设置了.container(固定宽度)或.container-fluid(全屏宽度)类的容器中,这样就可以自动设置一些外边距与内边距。使......
  • Django框架之python后端框架介绍
    一、网络框架及MVC、MTV模型1、网络框架网络框架(Webframework)是一种软件框架,用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具,以简化开发过程并提高开发效率。网络框架通常包括以下功能和特点:路由处理(Routing):网络框架定义了URL与处理程序......