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)

相关推荐

  1. harmonyOS学习笔记之@Styles装饰@Extend装饰

    2024-05-09 13:16:06       51 阅读
  2. Python学习(1):装饰

    2024-05-09 13:16:06       45 阅读
  3. 13.接口自动化学习-Pytest结合Yaml使用

    2024-05-09 13:16:06       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-09 13:16:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-09 13:16:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-09 13:16:06       87 阅读
  4. Python语言-面向对象

    2024-05-09 13:16:06       96 阅读

热门阅读

  1. 使用 PhotoRec 恢复磁盘丢失文件

    2024-05-09 13:16:06       31 阅读
  2. pat乙1029-旧键盘

    2024-05-09 13:16:06       38 阅读
  3. VPN 服务器通俗理解

    2024-05-09 13:16:06       37 阅读
  4. 设计模式——组合模式(Composite)

    2024-05-09 13:16:06       38 阅读
  5. Leetcode 199:二叉树的右视图

    2024-05-09 13:16:06       31 阅读
  6. Vue 组件参数传递:多个参数 vs 单个对象

    2024-05-09 13:16:06       35 阅读
  7. vue后端api开发

    2024-05-09 13:16:06       34 阅读
  8. CGAL在ubuntu下的安装及Hello World的测试

    2024-05-09 13:16:06       29 阅读
  9. 1700.无法吃午餐的学生数量

    2024-05-09 13:16:06       37 阅读