16.接口自动化学习-编码处理与装饰器

1.编码和解码

编码:将自然语言翻译成计算机可以识别的语言
hello–01010
解码:将机器识别的语言翻译成自然语言

2.编码格式

UTF-8
GBK
unicode

3.编码操作

   #编码操作
   str1="hello呀哈哈哈"
   str2=str1.encode('gbk')
   print(str2)
   print(type(str2))
   #解码操作
   str3=str2.decode('gbk')
   # str4 = str2.decode('utf-8')
   print('解码与编码一致结果',str3)

在这里插入图片描述

 resp = requests.request(data['method'], url=f'{HOST}' + data['url'],
                                        params=inData, headers=self.header)
 #修改响应数据编码
  resp.encoding='gbk'
print('响应数据编码》》',resp.encoding)

4.装饰器技术

应用:
在已有的自动化项目中,需要加入一个功能:
获取每个用例执行的时间
方法:
(1)在每个test_xx的方法中,使用time.time进行计时–效率不高,改变原有结构

(2)运用python装饰器

4.1 装包、解包、闭包

装包:在函数定义时 def test(*args,**kwargs)
test(1,2,3,name=tom)–args:装包成元组,**kwargs装包成字典
解包:在函数调用时
test(
[10,20])====>解包成test(10,20)
闭包:在一个函数里定义一个函数,内置函数使用了外函数的一个变量,外函数的返回值是内函数的函数对象

装饰器: 在已有函数的功能上,不修改代码去扩展函数功能

第一版:调用结构会改变

import time
def test_case01():
    time.sleep(1)#模拟测试用例执行时间
    print("--01自动化测试用例执行--")
def test_case02():
    time.sleep(1)#模拟测试用例执行时间
    print("--02自动化测试用例执行--")
def show_time(func):
    def inner():
        startTime=time.time()
        #自动化测试用例执行过程
        func()
        endTime=time.time()
        print("执行时间》》",endTime-startTime)
    return inner
if __name__ == '__main__':
    test_case01=show_time(test_case01) #用一个变量test_case接受外部函数的返回
    test_case01()#就可以使用变量名去调用内置函数

    test_case02=show_time(test_case02)
    test_case02()

第二版:语法糖优化,没有改变调用方式和原test_case中的代码

@show_time #等价于第一版的 test_case01=show_time(test_case01)
等价于test_case01=inner

import time
def show_time(func):
    def inner():
        startTime=time.time()
        #自动化测试用例执行过程
        func()
        endTime=time.time()
        print("执行时间》》",endTime-startTime)
    return inner
@show_time#等价于 test_case01=show_time(test_case01)
def test_case01():
    time.sleep(1)#模拟测试用例执行时间
    print("--01自动化测试用例执行--")
@show_time
def test_case02():
    time.sleep(1)#模拟测试用例执行时间
    print("--02自动化测试用例执行--")

if __name__ == '__main__':
    test_case01()
    test_case02()

在这里插入图片描述

实际运用:计算login接口用例的执行时间

要根据实际接口情况进行改造,本次添加了login的参数和返回
装饰器.py


import time
def show_time(func):
    def inner(*args):# login函数有参数,所以加上*args
        startTime=time.time()
        #自动化测试用例执行过程
        res = func(*args)
        endTime=time.time()
        print("执行时间》》",endTime-startTime)
        return res #login有返回值,所以要return
    return inner

login.py

from common.baseApi import BaseApi
from configs.config import NAME_PSW
import requests
import hashlib
import copy
import json
from utils.装饰器 import show_time

class Login(BaseApi):
    # 登录接口
    @show_time#等价于login=show_time(login)
    def login(self,inData,getToken=False):
        # 浅拷贝inData,以防加密时原数据被修改
        inData= copy.copy(inData)
        print(type(inData))

        inData['password'] = get_md5_data(inData['password'])

        # 封装数据
        payload = inData
        # 请求并接受响应
        respData = self.request_send(payload)
        print(type(respData))
        if getToken:
            return respData['data']['token']
        else:
            return respData

# 加密接口
def get_md5_data(pwd: str):
    md5 = hashlib.md5()
    md5.update(pwd.encode('utf-8'))
    # hexdigest():返回摘要,作为十六进制数据字符串值
    return md5.hexdigest()

if __name__ == '__main__':
   res=Login().login(NAME_PSW)
   print(res)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试笔记——多线程使用场景

线程池使用场景(CountDownLatch, Future) CountDownLatch CountDownLatch(闭锁/倒计时锁)用来进行线程同步协作,等待所有线程完成倒计时(一个或者多个线程,等待其他多个线程完成某件…

漏扫神器Invicti V2024.4.0专业版

前言 Invicti Professional是Invicti Security公司推出的一个产品,它是一种高级的网络安全扫描工具。Invicti Professional旨在帮助组织发现和修复其网络系统中的潜在安全漏洞和弱点。它提供了全面的漏洞扫描功能,包括Web应用程序和网络基础设施的漏洞扫…

2024 GESP6级 编程第一题 游戏

题目描述 你有四个正整数 ,并准备用它们玩一个简单的小游戏。 在一轮游戏操作中,你可以选择将 减去 ,或是将 减去 。游戏将会进行多轮操作,直到当 时游戏结束。 你想知道游戏结束时有多少种不同的游戏操作序列。两种游戏操作…

[微信小程序] 入门笔记1-滚动视图组件

[微信小程序] 入门笔记1-滚动视图组件 1.页面&组件&渲染 在小程序是由一个个页面page组成, 而页面又是由一个个组件component组成.和网页类似,这里的组件指的就是输入框<input>,按钮<button>,文本<text>,图片<image>等元素.如果你学过网页一…

;【排列【

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

ethercat :推荐一个不错的ethercat主从站开源项目

一、引言 最近在研究EtherCAT,也极有兴趣想要搞通整个底层协议&#xff0c;将来有机会搞自己的软件EtherCAT产品。这里推荐一个不错的开源项目&#xff0c;与志同道合的朋友共同学习。 Ethercat-master 主站地址&#xff1a;https://github.com/OpenEtherCATsociety/SOEM Eth…

记一次DNS故障导致用户无法充值的问题(上)

背景&#xff1a; 刚刚过去了五一劳动节&#xff0c;回来后一上班接到客服运营团队反馈的节日期间的问题&#xff0c;反馈有部分用户无法充值。拿到的反馈资料有&#xff1a; 无法充值操作视频、问题时间、手机机型、手机网络情况。 1、从视频中看到用户点击支付后没有任何反…

DRF视图基类使用方法

【 一 】drf之请求 请求对象Request 【 0 】前言 ​ 在 Python 中&#xff0c;通常通过 request 对象来处理 HTTP 请求&#xff0c;尤其是在 web 开发中&#xff0c;比如使用 Django、Flask 等框架时会经常接触到这个对象。request 对象是框架提供的&#xff0c;用于封装客户…

[附源码]秦时明月6.2魔改版_搭建架设教程_附GM工具_安卓苹果

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#xff0c;踩过的坑都给你们填上了 一. 演示视频 秦时明…

stack的使用

1.栈的定义 我们可以看到模板参数里面有一个容器适配器 &#xff0c;什么是适配器&#xff1f;比如充电器就叫做电源适配器&#xff0c;用在做转换&#xff0c;对电压进行相关的转换适配我们的设备。栈&#xff0c;队列不是自己直接管理数据&#xff0c;是让其他容器管理数据&a…

缓存雪崩、击穿、击穿

缓存雪崩&#xff1a; 就是大量数据在同一时间过期或者redis宕机时&#xff0c;这时候有大量的用户请求无法在redis中进行处理&#xff0c;而去直接访问数据库&#xff0c;从而导致数据库压力剧增&#xff0c;甚至有可能导致数据库宕机&#xff0c;从而引发的一些列连锁反应&a…

【linux】进程概念|task_struct|getpid|getppid

目录 ​编辑 1.进程的概念 进程的基本概念 进程与程序的主要区别 进程的特征 进程的状态 描述进程—PCB task_struct中的内容 查看进程 1.创建一个进程&#xff0c;运行以下代码 通过系统调用获取进程标示符 getpid()以及getppid() 1.进程的概念 进程的基本概念…

JRT失控处理打印和演示

基于JRT完备的脚本化和打印基础&#xff0c;基于JRT的业务可以轻松的实现想要的打效果&#xff0c;这次以质控图的失控处理打印和月报打印来分享基于JRT的打印业务实现。 演示视频链接 失控报告打印 失控处理打印的虚拟M import JRT.Core.DataGrid.GridDto; import JRT.Co…

微信小程序开发-数据事件绑定

&#x1f433;简介 数据绑定 数据绑定是一种将小程序中的数据与页面元素关联起来的技术&#xff0c;使得当数据变化时&#xff0c;页面元素能够自动更新。这通常使用特定的语法&#xff08;如双大括号 {{ }}&#xff09;来实现&#xff0c;以便在页面上展示动态数据。 事件绑…

分布式与一致性协议之ZAB协议(八)

ZAB协议 如何实现读操作 相比写操作&#xff0c;读操作的处理要简单很多&#xff0c;因为接收到度请求的节点只需要查询本地数据&#xff0c;然后响应数据给客户端就可以了。读操作的核心流程如图所示。 1.跟随者在FollowerRequestProcessor.processRequest()中接收到度请求…

Python深度学习基于Tensorflow(6)神经网络基础

文章目录 使用Tensorflow解决XOR问题激活函数正向传播和反向传播解决过拟合权重正则化Dropout正则化批量正则化 BatchNormal权重初始化残差连接 选择优化算法传统梯度更新算法动量算法NAG算法AdaGrad算法RMSProp算法Adam算法如何选择优化算法 使用tf.keras构建神经网络使用Sequ…

射频无源器件之电桥

一. 电桥的定义及作用 电桥主要用于实现微波大功率功放系统的功率合成分配,信号采集等功能,被广泛应用于中国及全球4G/5G基站、5G网络覆盖、北斗导航天线、车载高精度导航(无人驾驶)天线等。可将信号分成有相位差的两路,90度电桥相位差90,180度电桥相位差180。 常说的3d…

【CSS】认识CSS选择器及各选择器对应的用法

目录 一、什么是CSS&#xff1f; 二、CSS 选择器 1. 标签选择器 2. 类选择器 3. ID选择器 4. 通配符选择器 5. 复合选择器 一、什么是CSS&#xff1f; CSS(Cascading Style Sheet)&#xff0c;层叠样式表。它与 HTML&#xff08;超文本标记语言&#xff09;一起使用&am…

c++11 的explicit关键字 -- 显示构建对象

概述: 在平时我们定义一个类&#xff0c;然后创建类对象可以有多种方式&#xff0c;主要分为两种: 声明一个Student类: class Student { public: Student(int age) { m_age age; } private: int m_age; }; 显示构建(explicit) Student s1(5); //…

全栈开发之路——前端篇(5)组件间通讯和接口等知识补充

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 辅助文档&…
最新文章