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

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值