安享智慧理财项目 测试13

一、日志

日志的作用?

        记录程序运行的步骤和错误

日志的场景

        1、调试bug

        2、查看程序运行轨迹

日志基本应用

        #1、导包

        import logging

        #2、调用日志入口
        logging.error("出错啦,出错原因:{}".format(e))

import logging
#设置日志级别        即保存文件名
logging.basicConfig(level=logging.DEBUG,filename="../log/p2p.log")
#调用日志
logging.debug("调试信息")
logging.info("信息级别")
logging.warning("警告")
logging.error("断言错误!")
logging.critical("严重错误")

        测试人员使用的日志的入口

        info:记录运行步骤

        error:记录运行错误

日志底层组成介绍

说明:logging底层库有4大组件(日志器、处理器、格式器、过滤器)

1、日志器:接受日志信息,设置日志显示级别

2、处理器:控制日志显示位置或文件

3、格式器:控制日志输出的显示样式

关系:

        格式器必须关联处理器

        处理器必须关联日志器

日志封装应用

        重组封装的目的:解决日志显示的样式、储存方式

import logging.handlers
#日志工具
class GetLog:
    @classmethod
    def get_log(cls):
        cls.log = None
        if cls.log is None:
            #1、获取日志器
            cls.log = logging.getLogger()
            #设置日志级别 info
            cls.log.setLevel(logging.INFO)
            filepath = DIR_PATH + os.sep + "log" + os.sep + "p2p.log"
            #2、获取处理器 TimedRotatingFileHandler:日志保存到文件且根据时间去分割
            tf = logging.handlers.TimedRotatingFileHandler(filename=filepath,
                                                           when="midnight",
                                                           interval=1,
                                                           backupCount=3,
                                                           encoding="utf-8")
            #3、获取格式器
            fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
            fm  = logging.Formatter(fmt)
            #4、将格式器添加到处理器中
            tf.setFormatter(fm)
            #5、将处理器添加到日志器中
            cls.log.addHandler(tf)
        #返回日志器
        return cls.log

应用

应用的级别:info、eeror

info:info记录程序运行的步骤

error:记录程序错误

标注地方:api和scrpit

api层:记录程序步骤

scrpit:记录程序执行结果、断言结果、错误原因

# 1、获取图片验证码接口 测试
@parameterized.expand(read_json("register_login.json","img_code"))
def test01_img_code(self,random,expect_code):
    try:
        # 1、调用图片验证码接口
        r = self.reg.api_img_code(random)
        log.info("执行图片验证码响应状态码为:{}".format(r.status_code))
        # 2、查看响应验证码
        self.assertEqual(expect_code, r.status_code)
        log.info("执行图片验证码断言通过")
    except  Exception as e:
        # 1、日志
        log.error("断言失败,原因:{}",format(e))
        # 2、抛异常
        raise

二、认证开户

2.1封装(api_approve_trust.py)

from config import HOST


class ApiApproveTrust:
    #初始化
    def __init__(self,session):
        #获取session对象
        self.session = session
        #认证url
        self.__url_approve = HOST + "/member/realname/approverealname"
        #查询认证状态url
        self.__url_approve_status = HOST + "/member/member/getapprove"
        #开户url
        self.__url_trust = HOST + "/trust/trust/register"
        #图片验证码url
        self.__url_img_code = HOST + "/common/public/verifycode/{}"
        #充值url
        self.__url_recharge = HOST + "/trust/trust/recharge"
    #1、认证接口 封装
    def api_approve(self):
        pass

    #2、查询认证接口 封装
    def api_approve_status(self):
        pass

    #3、开户接口 封装
    def api_trust(self):
        pass

    #4、获取图片验证码接口 封装
    def api_img_cdoe(self):
            pass

    #5、充值接口 封装
    def api_recharge(self):
        pass

难点:认证接口请求参数类型为:multipart/form-data多消息类型,如何实现?
        解决:请求使用data+files两种参数格式,消息会自动切换到multipart即可
        示例:self.session.post(url=self.__url_approve,data=data,files={"x":"y"})

2.2调用(test02_approve_trust.py)
结构
import unittest
import requests

from api.api_approve_trust import ApiApproveTrust
from api.api_reqister_login import ApiRegisterLogin


class TestApproveTrust(unittest.TestCase):
    #初始化
    def setUp(self) -> None:
        #1、获取session
        self.session = requests.session()
        #2、获取ApiApproveTrust对象
        self.approve = ApiApproveTrust(self.session)
        #3、调用登录成功
        ApiRegisterLogin(self.session).api_login()

    #结束
    def tearDown(self) -> None:
        self.session.close()
        
    #1、认证接口 测试
    def test01_approve(self):
        pass

实现

import unittest
import requests

from api import log
from api.api_approve_trust import ApiApproveTrust
from api.api_reqister_login import ApiRegisterLogin


class TestApproveTrust(unittest.TestCase):
    # 初始化
    def setUp(self) -> None:
        # 1、获取session
        self.session = requests.session()
        # 2、获取ApiApproveTrust对象
        self.approve = ApiApproveTrust(self.session)
        # 3、调用登录成功
        ApiRegisterLogin(self.session).api_login()

    # 结束
    def tearDown(self) -> None:
        self.session.close()

    # 1、认证接口 测试
    def test01_approve(self):
        try:
            # 调用认证接口
            r = self.approve.api_approve()
            log.info("接口执行为".format(r.text))
            # 断言
            self.assertIn("提交成功", r.text)
            log.info("断言通过!")
        except Exception as e:
            #日志
            log.error("断言错误!原因{}".format(e))
            #抛异常
            raise

    # 2、查询认证状态接口 测试
    def test02_approve_status(self):
        try:
            # 调用认证状态接口
            r = self.approve.api_approve_status()
            log.info("接口执行为".format(r.text))
            # 断言
            self.assertIn("华", r.text)
            log.info("断言通过!")
        except Exception as e:
            # 日志
            log.error("断言错误!原因{}".format(e))
            # 抛异常
            raise

    # 3、开户接口 测试
    def test03_trust(self):
        try:
            # 调用认证接口
            r = self.approve.api_trust()
            log.info("接口执行结果为:{}".format(r.text))
            # 断言
            self.assertIn("form", r.text)
            print("请求后台开户结果为:", r.json())
            log.info("断言通过!")
            #三方开户

        except Exception as e:
            # 日志
            log.error("断言错误!原因{}".format(e))
            # 抛异常
            raise

    # 4、获取图片验证码接口 测试
    def test04_img_code(self,random=123):
        try:
            # 调用接口
            r = self.approve.api_img_code(random)
            log.info("接口执行为:{}".format(r.status_code))
            # 断言
            self.assertEqual(200, r.status_code)
            log.info("断言通过!")
        except Exception as e:
            # 日志
            log.error("断言错误!原因{}".format(e))
            # 抛异常
            raise

    # 5、充值接口 测试
    def test05_recharge(self,valicode=8888):
        try:
            #调用图片验证码
            self.approve.api_img_code(1231123)
            # 调用接口
            r = self.approve.api_recharge(valicode)
            log.info("接口执行为:{}".format(r.json()))
            print("请求后台充值结果为:{}".format(r.json))
            # 断言
            self.assertIn("form", r.text)
            log.info("断言通过!")
            #三方充值

        except Exception as e:
            # 日志
            log.error("断言错误!原因{}".format(e))
            # 抛异常
            raise

问题:

        三方开户、三方充值如何操作?-- 从响应数据中提取input标签name属性值和value属性,在Python中如何提取?

扩展

BeautifulSoup

学习目标

1、掌握如何使用BeautifulSoup解析HTML文档

安装BeautifulSoup:

要安装beautifulsoup4,你可以使用pip(Python的包安装器)来执行安装命令。在命令行或终端中,你可以输入以下命令:

pip install beautifulsoup4

这将会从Python包索引(PyPI)下载并安装beautifulsoup4包。如果你正在使用Python 3(这是大多数现代系统上的默认情况),并且你的系统中同时安装了Python 2和Python 3,你可能需要使用pip3而不是pip来确保为正确的Python版本安装包:

pip3 install beautifulsoup4

此外,如果你在使用虚拟环境(推荐做法,因为它可以避免包之间的冲突),请确保你的虚拟环境已经激活,然后再运行上述命令。

如何使用BeautifulSoup:

BeautifulSoup的基本用法:

2.3BeautifulSoup库

说明:一个python中解析html/xml的三方库

安装:pip install beautifulsoup4

应用步骤:

1、导包

2、实例化

3、调用方法

实例:

#1、导包
from bs4 import BeautifulSoup
html = """
    <html>
        <head>
            <title>曾志伟</title>
        </head>
        <body>
            <p id="test01">软件测试</p>
            <p id="test02">2024年</p>
            <a href="/api.html">接口测试</a>
            <a href="/web.html">Web自动化测试</a>
            <a href="/app.html">APP自动化测试</a>
        </body>
    </html>
        """
#2、获取ba对象 告诉BeautifulSoup类,你要解析的是html格式
bs = BeautifulSoup(html,"html.parser")

#3、调用方法 重点:
#               1、查找所有标签 bs.find_all("标签名") == 元素的集合 == ["元素1","元素2"]
#               2、查找属性 元素.get("属性名")
for a in bs.find_all("a"):
    print(a.get("href"))

重点:

1、查找所有标签 bs.find_all("标签名") == 元素的集合 == ["元素1","元素2"]

2、查找属性 元素.get("属性名")

扩展其他方法:

#4、扩展其他方法
#获取单个元素 bs.标签名
print(bs.a)
#获取文本
print(bs.a.string)
#获取属性
print(bs.a.get("href"))
#获取标签名
print(bs.a.name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值