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)