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函数有参数,所以加上*argsstartTime=time.time()#自动化测试用例执行过程res = func(*args)endTime=time.time()print("执行时间》》",endTime-startTime)return res #login有返回值,所以要returnreturn 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_timeclass 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)